java WebService调用方式

来源:互联网 发布:怎么运行java文件 编辑:程序博客网 时间:2024/05/22 04:03

webService调用方式有多种。jjdk 调用方式,axis2 调用方式等大类。

1. webservice说明

参照天气:http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?op=getSupportCity 可以看到,webService有三种请求方式(这个和webService定义的wsdl定义有关)。

get,post,soap。http协议和soap协议。

2.jdk调用(传统大类)

执行命令:wsimport -keep url(url为wsdl文件的路径)生成客户端代码。

注: 可能会报错,则应该把:<s:element ref="s:schema"/><s:any/>这段wsdl改成 <s:any minOccurs="2" maxOccurs="2"/>。

  代码生成后:参照一下代码(但是我测试过程中:返回如果是复杂对象不太好解析)--- 改方法我通过本地用jdk发布webservice测试成功,

 //创建一个用于产生WebServiceImpl实例的工厂,WebServiceImplService类是wsimport工具生成的14         WebServiceImplService factory = new WebServiceImplService();15         //通过工厂生成一个WebServiceImpl实例,WebServiceImpl是wsimport工具生成的16         WebServiceImpl wsImpl = factory.getWebServiceImplPort();17         //调用WebService的sayHello方法18         String resResult = wsImpl.sayHello("孤傲苍狼");19         System.out.println("调用WebService的sayHello方法返回的结果是:"+resResult);

     备注:发布时访问地址必须是?wsdl后缀,否则是404.

3.axis2调用

    这一类主要讲通过wsdl2java生成代码后,再进行操作的方式。

a.  执行命令:wsdl2java -uri http://www.webxml.com.cn/WebServices/WeatherWebService.asmx?wsdl -p com.water -s -o E: 这个是天气的调用。

获得到WeatherWebServiceStub.java类

b. 获取支持的地区,先创建对应的实体Zone.

public class Zone {String ID;String Zone;String ZoneID;String Area;String AreaCode;
然后执行以下代码:

WeatherWebServiceStub serviceStub = new WeatherWebServiceStub();com.water.WeatherWebServiceStub.GetSupportDataSet getSupportDataSet = new GetSupportDataSet();GetSupportDataSetResult_type0 d = serviceStub.getSupportDataSet(getSupportDataSet).getGetSupportDataSetResult();System.out.println(d.getSchema().toString());OMElement element = d.getExtraElement();Iterator iterator = element.getChildElements();    Iterator innerItr;        List<String> list = new ArrayList<String>();        OMElement result = null;        while (iterator.hasNext()) {            result = (OMElement) iterator.next();            //获取内容。内容比较深,具体看返回进行判断。            innerItr = result.getChildElements();            System.out.println(((OMElement)innerItr.next()).getLocalName());            //循环解析            while (innerItr.hasNext()) {            Zone dt = (Zone) BeanUtil.processObject((OMElement)innerItr.next(), Zone.class, null, true, new DefaultObjectSupplier(), null);            System.out.println(dt.toString());            }                    }

4. cxf调用(参照:http://blog.csdn.net/posonrick/article/details/45574663)

原创粉丝点击