Java调用WebService的各种方法总结(转载)

来源:互联网 发布:网络机顶盒连接笔记本 编辑:程序博客网 时间:2024/06/05 18:57

java 调用webservice的各种方法总结


2.使用 apt 编译 Hello.java(例:apt -d [存放编译后的文件目录] Hello.java ) ,会生成 jaws目录
3.使用java Hello.Hello运行,然后将浏览器指向http://localhost:8080/hello?wsdl就会出现下列显示
4.使用wsimport 生成客户端
使用如下:wsimport -p . -keep http://localhost:8080/hello?wsdl
5.客户端程序:




二、使用xfire,我这里使用的是myeclipse集成的xfire进行测试的
利用xfire开发WebService,可以有三种方法:
      1一种是从javabean 中生成;
      2 一种是从wsdl文件中生成;
      3 还有一种是自己建立webservice
步骤如下:
    用myeclipse建立webservice工程,目录结构如下:
 
    首先建立webservice接口,
     代码如下:

 



修改service.xml 文件,加入以下代码:



把整个项目部署到tomcat服务器中 ,打开浏览器,输入http://localhost:8989/HelloWorld/services/HelloWorldService?wsdl

客户端实现如下:


这里再说点题外话,有时候我们知道一个wsdl地址,比如想用java客户端引用.net 做得webservice,使用myeclipse引用,但是却出现无法通过验证的错误,这时我们可以直接在类中引用,步骤如下:


三、使用axis1.4调用webservice方法
   前提条件:下载axis1.4包和tomcat服务器   ,并将axis文件夹复制到tomcat服务器的webapp文件夹中
   这里我就说一下最简单的方法:
         首先建立一个任意的java类(例如:HelloWorld.java),复制到axis文件夹下,将其扩展名改为jws,然后重新启动tomcat,在浏览器中输入http://localhost:8989/axis/HelloWorld.jws?wsdl,就会得到一个wsdl文件,其客户端调用方法如下:


四、使用axis2开发webservice(这里首先感谢李宁老师)   
  使用axis2 需要先下载 

   axis2-1.4.1-bin.zip

   axis2-1.4.1-war.zip
  http://ws.apache.org/axis2/  
  同理,也需要将axis2复制到webapp目录中
在axis2中部署webservice有两种方法,
    第一种是pojo方式,这种方式比较简单,但是有一些限制,例如部署的类不能加上包名
    第二种方式是利用xml发布webservice,这种方法比较灵活,不需要限制类的声明
    下面分别说明使用方法:
    1.pojo方式:在Axis2中不需要进行任何的配置,就可以直接将一个简单的POJO发布成WebService。其中POJO中所有的public方法将被发布成WebService方法。先实现一个pojo类:


由于这两个方法都是public类型,所以都会发布成webservice。编译HelloWorld类后,将HelloWorld.class文件放到%tomcat%/webapps/axis2/WEB-INF/pojo目录中(如果没有pojo目录,则建立该目录),然后打开浏览器进行测试:
输入一下url: 

http://localhost:8080/axis2/services/listServices
会列出所有webservice
 
这是其中的两个webservice列表,接着,在客户端进行测试:
首先可以写一个封装类,减少编码,代码如下:
 

  1. package MZ.GetWebService;   
  2. import javax.xml.namespace.QName;   
  3.   
  4. import org.apache.axis2.AxisFault;   
  5. import org.apache.axis2.addressing.EndpointReference;   
  6. import org.apache.axis2.client.Options;   
  7. import org.apache.axis2.rpc.client.RPCServiceClient;   
  8.   
  9.   
  10. public class GetWSByAxis2 {   
  11.       private static String EndPointUrl;   
  12.       private static String QUrl="http://ws.apache.org/axis2";   
  13.       private QName opAddEntry;    
  14.       public String WSUrl;   
  15.       public RPCServiceClient setOption() throws AxisFault   
  16.       {   
  17.           RPCServiceClient serviceClient = new RPCServiceClient();   
  18.           Options options = serviceClient.getOptions();   
  19.           EndpointReference targetEPR = new EndpointReference(WSUrl);   
  20.           options.setTo(targetEPR);   
  21.           return serviceClient;   
  22.       }   
  23.          
  24.       public QName getQname(String Option){   
  25.              
  26.           return new QName (QUrl,Option);   
  27.       }   
  28.  //返回String   
  29.       public String getStr(String Option) throws AxisFault   
  30.       {   
  31.           RPCServiceClient serviceClient =this.setOption();    
  32.         
  33.           opAddEntry =this.getQname(Option);   
  34.          
  35.          String str = (String) serviceClient.invokeBlocking(opAddEntry,    
  36.                           new Object[]{}, new Class[]{String.class })[0];   
  37.          return str;   
  38.      }   
  39. // 返回一维String数组   
  40.       public String[] getArray(String Option) throws AxisFault   
  41.       {   
  42.           RPCServiceClient serviceClient =this.setOption();    
  43.         
  44.           opAddEntry =this.getQname(Option);   
  45.          
  46.          String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry,    
  47.                           new Object[]{}, new Class[]{String[].class })[0];   
  48.          return strArray;   
  49.      }   
  50.       //从WebService中返回一个对象的实例   
  51.      public Object getObject(String Option,Object o) throws AxisFault   
  52.      {    
  53.         RPCServiceClient serviceClient =this.setOption();    
  54.          QName qname=this.getQname(Option);   
  55.          Object object = serviceClient.invokeBlocking(qname, new Object[]{},new Class[]{o.getClass()})[0];   
  56.          return object;   
  57.      }   
  58.         
  59. /////////////////////////////////////////       读者可以自己封装数据类型,如int,byte,float等数据类型   
  60. }  
  1. package MZ.GetWebService;   
  2. import javax.xml.namespace.QName;   
  3.   
  4. import org.apache.axis2.AxisFault;   
  5. import org.apache.axis2.addressing.EndpointReference;   
  6. import org.apache.axis2.client.Options;   
  7. import org.apache.axis2.rpc.client.RPCServiceClient;   
  8.   
  9.   
  10. public class GetWSByAxis2 {   
  11.       private static String EndPointUrl;   
  12.       private static String QUrl="http://ws.apache.org/axis2";   
  13.       private QName opAddEntry;    
  14.       public String WSUrl;   
  15.       public RPCServiceClient setOption() throws AxisFault   
  16.       {   
  17.           RPCServiceClient serviceClient = new RPCServiceClient();   
  18.           Options options = serviceClient.getOptions();   
  19.           EndpointReference targetEPR = new EndpointReference(WSUrl);   
  20.           options.setTo(targetEPR);   
  21.           return serviceClient;   
  22.       }   
  23.          
  24.       public QName getQname(String Option){   
  25.              
  26.           return new QName (QUrl,Option);   
  27.       }   
  28.  //返回String   
  29.       public String getStr(String Option) throws AxisFault   
  30.       {   
  31.           RPCServiceClient serviceClient =this.setOption();    
  32.         
  33.           opAddEntry =this.getQname(Option);   
  34.          
  35.          String str = (String) serviceClient.invokeBlocking(opAddEntry,    
  36.                           new Object[]{}, new Class[]{String.class })[0];   
  37.          return str;   
  38.      }   
  39. // 返回一维String数组   
  40.       public String[] getArray(String Option) throws AxisFault   
  41.       {   
  42.           RPCServiceClient serviceClient =this.setOption();    
  43.         
  44.           opAddEntry =this.getQname(Option);   
  45.          
  46.          String[] strArray = (String[]) serviceClient.invokeBlocking(opAddEntry,    
  47.                           new Object[]{}, new Class[]{String[].class })[0];   
  48.          return strArray;   
  49.      }   
  50.       //从WebService中返回一个对象的实例   
  51.      public Object getObject(String Option,Object o) throws AxisFault   
  52.      {    
  53.         RPCServiceClient serviceClient =this.setOption();    
  54.          QName qname=this.getQname(Option);   
  55.          Object object = serviceClient.invokeBlocking(qname, new Object[]{},new Class[]{o.getClass()})[0];   
  56.          return object;   
  57.      }   
  58.         
  59. /////////////////////////////////////////       读者可以自己封装数据类型,如int,byte,float等数据类型   
  60. }  


客户端调用方法:


2.使用service.xml发布webservice,这种方式和直接放在pojo目录中的POJO类不同。要想将MyService类发布成Web Service,需要一个services.xml文件,这个文件需要放在META-INF目录中,该文件的内容如下:


其中<service>元素用于发布Web Service,一个<service>元素只能发布一个WebService类,name属性表示WebService名,如下面的URL可以获得这个WebService的WSDL内容:
http://localhost:8080/axis2/services/myService?wsdl
  除此之外,还有直接可以在其中制定webservice操作方法:可以这样些service.xml文件


如果要发布多个webservice,可以在文件两段加上<serviceGroup><service></service>...<service></service></serviceGroup>发布

原创粉丝点击