WebService的两种客户端调用方式
WebService的两种客户端调用方式
1.先搭建一个WebService接口.? 接口类:?
实现类:? class?Hello?implements?IHello{??
services.xml:?
web.xml:? web-app?xmlns="http://java.sun.com/xml/ns/javaee"?xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"?version="2.5"?xsi:schemaLocation="http://java.sun.com/xml/ns/javaee???http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" ??servletservlet-name>XFireServletservlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServletload-on-startup>0servlet-mappingurl-pattern>/services/*welcome-file-listwelcome-file>index.jspweb-app注:这里使用XFire搭建WebService,固然需要引用XFire包,以及写法为XFire,不管用什么框架搭建WebService,访问原理都是一样的,所以用任何的客户端都可以访问,需要导入的包在文章尾部注明.? 2.下面介绍调用WebService的两种客户端:? 2.1 XFire客户端:? XFire客户端访问WebService,需要模拟出WS的接口,接口的结构一般定义接口的服务商会提供,如果是自己写的那就更明确了..? 模拟WebService接口(这个接口写法跟WS服务器是一样的,但不是同一个项目也不是同一个类):? 客户端接口类:? 这里起名AnyName,意思是任何模拟接口的任何名字都可以,只要需要调用的方法的结构与WS相同即可.? package?xfire;?? import?org.codehaus.xfire.XFire;?? package?axis;?? 顺便说一点个人理解:? XFire客户端的调用方式,类似于先指定WS接口的结构,然后从远端地址实例化一个对象到本地,由于方法结构一样,所以可以强行转换.然后直接进行本地调用.? Axis客户端的调用方式类似于HTTP访问,设置好参数后直接远端调用.? ?wsdl地址的来源=服务商提供,如果是你自己做的WebService的话,你可以访问默认格式:? http://[IP地址:端口]/[项目访问路径]/services? 如? http://localhost:9415/rcfeng-WebService/services? 至于url的源来,你要先拿到?wsdl地址,然后访问如:? http://localhost:9415/rcfeng-WebService/services/Hello?wsdl,然后拉到下面可以看到红色部分:? <wsdl:service name="Hello">? ??? <wsdl:port name="HelloHttpPort" binding="tns:HelloHttpBinding">? ??????? <wsdlsoap:address location=" http://localhost:9415/rcfeng-WebService/services/Hello " />? ??? </wsdl:port>? </wsdl:service>? 调用的方法名为:? <wsdl:operation name=" hello ">? 然后便可以调用WebService的接口了。? XFire需要用到的包:? activation-1.1.jar? commons-beanutils-1.7.0.jar? commons-codec-1.3.jar? commons-httpclient-3.0.jar? commons-logging-1.0.4.jar? jaxen-1.1-beta-9.jar? jaxws-api-2.0.jar? jdom-1.0.jar? jsf-api.jar? jsf-impl.jar? jsr173_api-1.0.jar? jstl-1.2.jar? mail-1.4.jar? saaj-api-1.3.jar? saaj-impl-1.3.jar? spring-1.2.6.jar? stax-api-1.0.1.jar? wsdl4j-1.6.1.jar? wstx-asl-3.2.0.jar? xbean-2.2.0.jar? xbean-spring-2.8.jar? xfire-aegis-1.2.6.jar? xfire-annotations-1.2.6.jar? xfire-core-1.2.6.jar? xfire-java5-1.2.6.jar? xfire-jaxws-1.2.6.jar? xfire-jsr181-api-1.0-M1.jar? xfire-spring-1.2.6.jar? XmlSchema-1.1.jar? Axis需要用到的包:? axis.jar? commons-discovery-0.2.jar? 注明:以上两种客户端本人是写在同一个项目里,所以Axis需要用到的包看上去少很多,是因为一些通用包在使用XFire的时候已经加进来了.? 附上项目说明:? rcfeng-WebService 为WebService服务端项目? rcfeng-TestWebService 为客户端项目? rcfeng-WebService项目中没有包,可以到rcfeng-TestWebServiceWebRootWEB-INFlibXFire下获取,另外,rcfeng-WebService项目中是使用MyEclipse引用包,直接导入项目可能需要更新jar路径或删掉路径,然后自己导入jar包?
附:报错处理:
webservice [META-INF/xfire/services.xml] cannot be opened because it does not exist 严重: Allocate exception for servlet XFireServlet 在tomcate工程里的 WEB-INF/classes的文件夹下新建一个META-INF文件夹,然后在里面新建一个xfire文件夹,将services.xml文件放到xfire目录下即可解决。 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |