WEBSERVICE

WebService的两种客户端调用方式


1.先搭建一个WebService接口.

接口类:
Java代码   收藏代码
  1. package hello;  
  2.   
  3. public interface IHello {  
  4.       
  5.     public String hello(String str,String str2) ;  
  6.   
  7. }  


实现类:
Java代码   收藏代码
  1. package hello;  
  2.   
  3. public class Hello implements IHello{  
  4.   
  5.     public String hello(String str,String str2) {  
  6.         return "Hello world ,i'am "+str+".   第二个参数 = "+str2 ;  
  7.     }  
  8.   
  9. }  


services.xml:
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <beans xmlns="http://xfire.codehaus.org/config/1.0">  
  3.     <service>  
  4.         <name>Hello</name>  
  5.         <namespace>rcfeng</namespace>  
  6.         <serviceClass>hello.IHello</serviceClass>  
  7.         <implementationClass>hello.Hello</implementationClass>  
  8.     </service>  
  9. </beans>  


web.xml:
Xml代码   收藏代码
  1. <?xml version="1.0" encoding="UTF-8"?>  
  2. <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">  
  3.   <servlet>  
  4.     <servlet-name>XFireServlet</servlet-name>  
  5.     <servlet-class>org.codehaus.xfire.transport.http.XFireConfigurableServlet</servlet-class>  
  6.     <load-on-startup>0</load-on-startup>  
  7.   </servlet>  
  8.   <servlet-mapping>  
  9.     <servlet-name>XFireServlet</servlet-name>  
  10.     <url-pattern>/services/*</url-pattern>  
  11.   </servlet-mapping>  
  12.   <welcome-file-list>  
  13.     <welcome-file>index.jsp</welcome-file>  
  14.   </welcome-file-list>  
  15. </web-app>  



注:这里使用XFire搭建WebService,固然需要引用XFire包,以及写法为XFire,不管用什么框架搭建WebService,访问原理都是一样的,所以用任何的客户端都可以访问,需要导入的包在文章尾部注明.


2.下面介绍调用WebService的两种客户端:

2.1 XFire客户端:

XFire客户端访问WebService,需要模拟出WS的接口,接口的结构一般定义接口的服务商会提供,如果是自己写的那就更明确了..

模拟WebService接口(这个接口写法跟WS服务器是一样的,但不是同一个项目也不是同一个类):

客户端接口类:
这里起名AnyName,意思是任何模拟接口的任何名字都可以,只要需要调用的方法的结构与WS相同即可.
Java代码   收藏代码
  1. package xfire;  
  2.   
  3. public interface IAnyName {  
  4.       
  5.     public String hello(String str,String str2) ;  
  6.   
  7. }  



客户端调用类,测试类:
Java代码   收藏代码
  1. package xfire;  
  2.   
  3. import org.codehaus.xfire.XFire;  
  4. import org.codehaus.xfire.client.XFireProxyFactory;  
  5. import org.codehaus.xfire.service.Service;  
  6. import org.codehaus.xfire.service.binding.ObjectServiceFactory;  
  7.   
  8. public class XFireTest {  
  9.   
  10.     public static void main(String[] args) {  
  11.           
  12.         try {  
  13.               
  14.             String url = "http://localhost:9415/rcfeng-WebService/services/Hello" ;  
  15.               
  16.             Service service = new ObjectServiceFactory().create(IAnyName.class) ;  
  17.               
  18. //          XFire fire=XFireFactory.newInstance().getXFire();  
  19. //          XFireProxyFactory factory=new XFireProxyFactory(fire);  
  20.             XFireProxyFactory factory = new XFireProxyFactory() ;  
  21.               
  22.             IAnyName hello = (IAnyName) factory.create(service,url) ;  
  23.               
  24.             String str = hello.hello("rcfeng","Parameter two") ;  
  25.               
  26.             System.out.println(str);  
  27.               
  28.         } catch (Exception e) {  
  29.             e.printStackTrace();  
  30.         }  
  31.           
  32.     }  
  33. }  


2.2 Axis客户端:
Java代码   收藏代码
  1. package axis;  
  2.   
  3. import org.apache.axis.client.Call;  
  4. import org.apache.axis.client.Service;  
  5. import org.apache.axis.encoding.XMLType;  
  6.   
  7. public class AxisTest {  
  8.       
  9.     public static void main(String[] args) {  
  10.           
  11.         try {  
  12.               
  13.             String str = "rcfeng" ;  
  14.             String endpoint = "http://localhost:9415/rcfeng-WebService/services/Hello" ;  
  15.               
  16.             Service service = new Service() ;  
  17.               
  18.             Call call = (Call) service.createCall() ;  
  19.               
  20.             call.setTargetEndpointAddress(endpoint) ;  
  21.             call.setOperationName("hello") ;//ws方法名  
  22.             //一个输入参数,如果方法有多个参数,复制多条该代码即可,参数传入下面new Object后面  
  23.             call.addParameter("parameter1",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;  
  24.             call.addParameter("parameter2",org.apache.axis.encoding.XMLType.XSD_DATE,javax.xml.rpc.ParameterMode.IN) ;  
  25.             call.setReturnType(XMLType.XSD_STRING) ;  
  26.             call.setUseSOAPAction(true) ;  
  27. //          call.setSOAPActionURI("http://172.20.35.123:6110/cea-ws/services/ChangeMemberPinService");  
  28.               
  29.             String result = (String) call.invoke(new Object[]{str,"Parameter two"}) ;  
  30.               
  31.             System.out.println(result);  
  32.               
  33.         } catch (Exception e) {  
  34.             e.printStackTrace();  
  35.         }  
  36.     }  
  37. }  




以上代码本人测试通过.

顺便说一点个人理解:


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-TestWebService\WebRoot\WEB-INF\lib\XFire\下获取,另外,rcfeng-WebService项目中是使用MyEclipse引用包,直接导入项目可能需要更新jar路径或删掉路径,然后自己导入jar包

微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码 微信小程序毕业设计期末大作业项目源码
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值