java通过axis2调取webservice接口

来源:互联网 发布:铠龙ni80 发热丝数据 编辑:程序博客网 时间:2024/06/17 09:21

1 首先pom.xml引入axis2 maven配置

        <dependency>            <groupId>org.apache.axis2</groupId>            <artifactId>axis2-kernel</artifactId>            <version>1.6.1</version>        </dependency>        <dependency>            <groupId>org.apache.axis2</groupId>            <artifactId>axis2-codegen</artifactId>            <version>1.6.1</version>        </dependency>        <dependency>            <groupId>org.apache.axis2</groupId>            <artifactId>axis2-adb</artifactId>            <version>1.6.1</version>        </dependency>        <dependency>            <groupId>org.apache.axis2</groupId>            <artifactId>axis2-transport-local</artifactId>            <version>1.6.1</version>        </dependency>        <dependency>            <groupId>org.apache.axis2</groupId>            <artifactId>axis2-transport-http</artifactId>            <version>1.6.1</version>        </dependency>

2 自己写个webservice 服务端接口
比如:http://localhost:8080/webServer/cxf/cxftest?wsdl

3 调用webservice接口
(1)调不带@WebParam参数的方法

    try {            String serviceUrl = "http://192.168.1.235:8080/webServer/cxf/cxftest?wsdl";            String tns = "http://service.fxl.com/";            String methodName = "getPass";            //使用RPC方式调用WebService              RPCServiceClient serviceClient = new RPCServiceClient();              Options options = serviceClient.getOptions();              //设置2秒超时              options.setTimeOutInMilliSeconds(2000L);              //指定调用WebService的URL              EndpointReference targetEPR = new EndpointReference(serviceUrl);              options.setTo(targetEPR);              //指定接口方法的参数值              Object[] opAddEntryArgs = new Object[] {"admin", 1};            //指定方法返回值的数据类型的Class对象              Class[] classes = new Class[] { String.class };              //指定调用的方法及WSDL文件的命名空间  QName("targetNamespace","method Name");              QName qName = new QName(tns, methodName);              //调用getVersioin方法并输出该方法的返回值,              //返回对象是一个Object的数组,拿数组的第一个值,转换强转即可              Object result = serviceClient.invokeBlocking(qName, opAddEntryArgs, classes)[0];            //OMElementImpl ele =  (OMElementImpl) result;            System.out.println("返回值result=" + result.toString());        } catch (Exception e) {            e.printStackTrace();        }

(1)调带@WebParam参数的方法

    try {            String serviceUrl = "http://192.168.1.235:8080/webServer/cxf/cxftest?wsdl";            String tns = "http://service.fxl.com/";            String methodName = "getAuth";            //使用RPC方式调用WebService              RPCServiceClient serviceClient = new RPCServiceClient();              Options options = serviceClient.getOptions();              //设置2秒超时              options.setTimeOutInMilliSeconds(2000L);              //指定调用WebService的URL              EndpointReference targetEPR = new EndpointReference(serviceUrl);              options.setTo(targetEPR);              Map<String, String> params = new HashMap<String, String>();            params.put("userName", "admin");            params.put("password", "123456");            //添加参数并获取方法            OMElement method = getMethod(tns, methodName, params);            OMElement result = serviceClient.sendReceive(method);            //result就是获取的数据,剩下需要自己解析            System.out.println(result.toString());        } catch (Exception e) {            e.printStackTrace();        }
    /**     * 获取请求方法     * @param tns 命名空间     * @param methodName 方法名     * @param params 参数     * @return     */    private static OMElement getMethod(String tns, String methodName, Map<String, String> params){        OMFactory fac = OMAbstractFactory.getOMFactory();        OMNamespace omNs = fac.createOMNamespace(tns, "");        OMElement method = fac.createOMElement(methodName, omNs);        if(params != null) {            for (String key : params.keySet()) {                OMElement param = fac.createOMElement(key, null);                param.addChild(fac.createOMText(param, params.get(key)));                method.addChild(param);            }            method.build();        }        return method;    }