Java用axis2调用.net发布的web services接口

一、下载Axis2源码包,下载地址为: http://axis.apache.org/axis2/java/core/download.html

二、将所需要的jar包导入到工程里面,下面列出的是用到的jar包:

三、创建调用接口的测试类,目前接触到的为两种调用方法,分别如下:

    1.用ServiceClient的方式来调用,代码如下:
package com.test;

/**
 * Created with IntelliJ IDEA.
 * User: like
 * Date: 2016/1/19
 * Time: 14:20
 * Description: axis2调用.net发布的web services接口
 * Version: v1.0
 */

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HTTPConstants;

public class TestClient {

    public static void main(String[] args) {

        String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";

        String action = "http://WebXml.com.cn/getWeatherbyCityName";

        String methodStr = "getWeatherbyCityName";

        String namespace = "http://WebXml.com.cn/";

        String tns = "xsd";

        String[] pars = {"theCityName"};

        String[] vals = {"杭州"};

        OMElement result = null;

        result = getWeather(url,action, methodStr, namespace, tns, pars, vals);

        System.out.println(result);

    }

    public static OMElement getWeather(String url,String action,String methodStr,String namespace,String tns,String[] pars,String[] vals){

        OMElement result = null;

        try {

            ServiceClient client = new ServiceClient();

            client.setOptions(getClientOptions(url,action));

            result = client.sendReceive(getOMMethod(methodStr,namespace,tns,pars,vals));

        } catch (AxisFault e) {

            e.printStackTrace();

        }

        return result;

    }


    public static Options getClientOptions(String url,String action){

        //端点引用 指接口位置

        EndpointReference targetEpr = new EndpointReference(url);

        //创建request soap包 请求选项

        Options options = new Options();

        //设置optionssoapAction

        options.setAction(action);

        //设置request soap包的端点引用(接口地址)

        options.setTo(targetEpr);

        //如果报错提示Content-Length,请求内容长度

        options.setProperty(HTTPConstants.CHUNKED,"false");//chunk关掉后,会自动加上Content-Length
        return options;

    }

    public static OMElement getOMMethod(String methodStr,String namespace,String tns,String[] pars,String[] vals){

        //有抽象OM工厂获取OM工厂,创建request SOAP
        OMFactory fac = OMAbstractFactory.getOMFactory();

        //创建命名空间

        OMNamespace nms = fac.createOMNamespace(namespace, tns);

        //创建OMElement方法 元素,并指定其在nms指代的名称空间中

        OMElement method = fac.createOMElement(methodStr, nms);

        //添加方法参数名和参数值

        for(int i=0, tns);

        //创建OMElement方法 元素,并指定其在nms指代的名称空间中

        OMElement method = fac.createOMElement(methodStr, nms);

        //添加方法参数名和参数值

        for(int i=0;i<pars.length;i++){

            //创建方法参数OMElement元素

            OMElement param = fac.createOMElement(pars[i],
package com.test;

/**
 * Created with IntelliJ IDEA.
 * User: like
 * Date: 2016/1/19
 * Time: 14:20
 * Description: axis2调用.net发布的web services接口
 * Version: v1.0
 */

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.transport.http.HTTPConstants;

public class TestClient {

    public static void main(String[] args) {

        String url = "http://webservice.webxml.com.cn/WebServices/WeatherWebService.asmx";

        String action = "http://WebXml.com.cn/getWeatherbyCityName";

        String methodStr = "getWeatherbyCityName";

        String namespace = "http://WebXml.com.cn/";

        String tns = "xsd";

        String[] pars = {"theCityName"};

        String[] vals = {"杭州"};

        OMElement result = null;

        result = getWeather(url,action, methodStr, namespace, tns, pars, vals);

        System.out.println(result);

    }

    public static OMElement getWeather(String url,String action,String methodStr,String namespace,String tns,String[] pars,String[] vals){

        OMElement result = null;

        try {

            ServiceClient client = new ServiceClient();

            client.setOptions(getClientOptions(url,action));

            result = client.sendReceive(getOMMethod(methodStr,namespace,tns,pars,vals));

        } catch (AxisFault e) {

            e.printStackTrace();

        }

        return result;

    }


    public static Options getClientOptions(String url,String action){

        //端点引用 指接口位置

        EndpointReference targetEpr = new EndpointReference(url);

        //创建request soap包 请求选项

        Options options = new Options();

        //设置optionssoapAction

        options.setAction(action);

        //设置request soap包的端点引用(接口地址)

        options.setTo(targetEpr);

        //如果报错提示Content-Length,请求内容长度

        options.setProperty(HTTPConstants.CHUNKED,"false");//chunk关掉后,会自动加上Content-Length
        return options;

    }

    public static OMElement getOMMethod(String methodStr,String namespace,String tns,String[] pars,String[] vals){

        //有抽象OM工厂获取OM工厂,创建request SOAP
        OMFactory fac = OMAbstractFactory.getOMFactory();

        //创建命名空间

        OMNamespace nms = fac.createOMNamespace(namespace, tns);

        //创建OMElement方法 元素,并指定其在nms指代的名称空间中

        OMElement method = fac.createOMElement(methodStr, nms);

        //添加方法参数名和参数值

        for(int i=0;i<pars.length;i++){

            //创建方法参数OMElement元素

            OMElement param = fac.createOMElement(pars[i],nms);

            //设置键值对 参数值

            param.setText(vals[i]);

            //讲方法元素 添加到method方法元素中

            method.addChild(param);

        }

        return method;

    }

}

 
   
 
  
        运行结果如下图所示:
    
         
    2.用RPCServiceClient方式调用,代码如下:  
    
package com.test;

/**
 * Created with IntelliJ IDEA.
 * User: like
 * Date: 2016/1/19
 * Time: 15:09
 * Description:
 * Version: v1.0
 */

import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;

import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.rpc.client.RPCServiceClient;

public class TestClient2 {

    public static void main(String[] args) throws AxisFault {

        String url = "http://fy.webxml.com.cn/webservices/EnglishChinese.asmx?WSDL";

        String action = "http://WebXml.com.cn/TranslatorString";

        String methodStr = "TranslatorString";

        String namespace = "http://WebXml.com.cn/";

        String tns = "";

        String[] pars = {"wordKey"};

        String[] vals = {"随便"};

        OMElement result = null;

        result = translatorString(url,action, methodStr, namespace, tns, pars, vals);

        System.out.println(getResults(result));

        //System.out.println(result);
    }

    public static OMElement translatorString(String url,String action,String methodStr,String namespace,String tns,String[] pars,String[] vals){

        OMElement result = null;

        try {

            RPCServiceClient serviceClient = new RPCServiceClient();

            serviceClient.setOptions(getClientOptions(url,action));

            result = serviceClient.sendReceive(getOMMethod(methodStr,namespace,tns,pars,vals));

        } catch (AxisFault e) {

            e.printStackTrace();

        }

        return result;

    }

    public static Options getClientOptions(String url,String action){

        //有抽象OM工厂获取OM工厂,创建request SOAP
        EndpointReference targetEpr = new EndpointReference(url);

        //创建request soap包 请求选项

        Options options = new Options();

        //设置optionssoapAction

        options.setAction(action);

        //设置request soap包的端点引用(接口地址)

        options.setTo(targetEpr);

        //设置超时时间

        options.setTimeOutInMilliSeconds(6000000000L);

        //传输协议

        options.setTransportInProtocol(Constants.TRANSPORT_HTTP);

        return options;

    }

    public static OMElement getOMMethod(String methodStr,String namespace,String tns,String[] pars,String[] vals){

        //有抽象OM工厂获取OM工厂,创建request SOAP
        OMFactory fac = OMAbstractFactory.getOMFactory();

        //创建命名空间

        OMNamespace nms = fac.createOMNamespace(nms);

            //设置键值对 参数值

            param.setText(vals[i]);

            //讲方法元素 添加到method方法元素中

            method.addChild(param);

            method.build();

        }

        return method;

    }

    //解析XML,将获取到的数据封装到list
    public static List<String> getResults(OMElement element) {

        if (element == null) {

            return null;

        }

        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();

            while(innerItr.hasNext()){

                OMElement result2 = (OMElement)innerItr.next();

                if(result2!=null){

                    String text = result2.getText();

                    if(text!=null && !("").equals(text)){

                        list.add(text);

                    }
                }
            }
        }
        return list;
    }
}
 
   
       运行结果如下:
    

猜你喜欢

转载自blog.csdn.net/helixue2012/article/details/50578328