array(2) { ["docs"]=> array(10) { [0]=> array(10) { ["id"]=> string(3) "428" ["text"]=> string(77) "Visual Studio 2017 单独启动MSDN帮助(Microsoft Help Viewer)的方法" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(8) "DonetRen" ["tagsname"]=> string(55) "Visual Studio 2017|MSDN帮助|C#程序|.NET|Help Viewer" ["tagsid"]=> string(23) "[401,402,403,"300",404]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400964" ["_id"]=> string(3) "428" } [1]=> array(10) { ["id"]=> string(3) "427" ["text"]=> string(42) "npm -v;报错 cannot find module "wrapp"" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "zzty" ["tagsname"]=> string(50) "node.js|npm|cannot find module "wrapp“|node" ["tagsid"]=> string(19) "[398,"239",399,400]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400760" ["_id"]=> string(3) "427" } [2]=> array(10) { ["id"]=> string(3) "426" ["text"]=> string(54) "说说css中pt、px、em、rem都扮演了什么角色" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(12) "zhengqiaoyin" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511400640" ["_id"]=> string(3) "426" } [3]=> array(10) { ["id"]=> string(3) "425" ["text"]=> string(83) "深入学习JS执行--创建执行上下文(变量对象,作用域链,this)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "Ry-yuan" ["tagsname"]=> string(33) "Javascript|Javascript执行过程" ["tagsid"]=> string(13) "["169","191"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511399901" ["_id"]=> string(3) "425" } [4]=> array(10) { ["id"]=> string(3) "424" ["text"]=> string(30) "C# 排序技术研究与对比" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "vveiliang" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(8) ".Net Dev" ["catesid"]=> string(5) "[199]" ["createtime"]=> string(10) "1511399150" ["_id"]=> string(3) "424" } [5]=> array(10) { ["id"]=> string(3) "423" ["text"]=> string(72) "【算法】小白的算法笔记:快速排序算法的编码和优化" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(9) "penghuwan" ["tagsname"]=> string(6) "算法" ["tagsid"]=> string(7) "["344"]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511398109" ["_id"]=> string(3) "423" } [6]=> array(10) { ["id"]=> string(3) "422" ["text"]=> string(64) "JavaScript数据可视化编程学习(二)Flotr2,雷达图" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "chengxs" ["tagsname"]=> string(28) "数据可视化|前端学习" ["tagsid"]=> string(9) "[396,397]" ["catesname"]=> string(18) "前端基本知识" ["catesid"]=> string(5) "[198]" ["createtime"]=> string(10) "1511397800" ["_id"]=> string(3) "422" } [7]=> array(10) { ["id"]=> string(3) "421" ["text"]=> string(36) "C#表达式目录树(Expression)" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(4) "wwym" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(4) ".NET" ["catesid"]=> string(7) "["119"]" ["createtime"]=> string(10) "1511397474" ["_id"]=> string(3) "421" } [8]=> array(10) { ["id"]=> string(3) "420" ["text"]=> string(47) "数据结构 队列_队列实例:事件处理" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(7) "idreamo" ["tagsname"]=> string(40) "C语言|数据结构|队列|事件处理" ["tagsid"]=> string(23) "["246","247","248",395]" ["catesname"]=> string(12) "数据结构" ["catesid"]=> string(7) "["133"]" ["createtime"]=> string(10) "1511397279" ["_id"]=> string(3) "420" } [9]=> array(10) { ["id"]=> string(3) "419" ["text"]=> string(47) "久等了,博客园官方Android客户端发布" ["intro"]=> string(288) "目录 ECharts 异步加载 ECharts 数据可视化在过去几年中取得了巨大进展。开发人员对可视化产品的期望不再是简单的图表创建工具,而是在交互、性能、数据处理等方面有更高的要求。 chart.setOption({ color: [ " ["username"]=> string(3) "cmt" ["tagsname"]=> string(0) "" ["tagsid"]=> string(2) "[]" ["catesname"]=> string(0) "" ["catesid"]=> string(2) "[]" ["createtime"]=> string(10) "1511396549" ["_id"]=> string(3) "419" } } ["count"]=> int(200) } 222 Java调用WebService方法总结(5)--Axis2调用WebService - 爱码网

Axis2是新一点Axis,基于新的体系结构进行了全新编写,有更强的灵活性并可扩展到新的体系结构。文中demo所使用到的软件版本:Java 1.8.0_191、Axis2 1.7.9。

1、准备

参考Java调用WebService方法总结(1)--准备工作

2、调用

2.1、AXIOM方式

AXIOM即AXis对象模型(AXis Object Model)是Apache Axis2的XML对象模型,可以大幅提升Axis2的性能。

/**
 * axiom方式
 * @param param
 */
public static void axiom(String param) {
    try {
        ServiceClient client = new ServiceClient();
        Options options = client.getOptions();
        EndpointReference endpointReference = new EndpointReference(url);
        options.setTo(endpointReference);
        // 设置SOAPAction
        options.setAction("http://webxml.com.cn/toTraditionalChinese");
        // 设置soap版本
        options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
        //options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);

        OMFactory factory = OMAbstractFactory.getOMFactory();
        OMNamespace namespace = factory.createOMNamespace(targetNamespace, "");
        OMElement method = factory.createOMElement("toTraditionalChinese", namespace);
        OMElement value = factory.createOMElement("sText", namespace);
        value.addChild(factory.createOMText(value, param));
        method.addChild(value);
        method.build();

        OMElement result = client.sendReceive(method);
        System.out.println(result);
        System.out.println(result.getFirstElement().getText());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

5.2、ADB方式

 ADB即Axis Data Binding,Axis2自己的数据绑定方法。

2.2.1、用wsdl2java生成代码

%AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.adb -d adb -s -o temp

-d 指定数据绑定方式

-p 指定包名

-o 指定代码生成的目录,指定的目录就生成在当前目录下,windows下指定绝对路径不生效(如:d:/temp)

命令会生成一个java文件:

Java调用WebService方法总结(5)--Axis2调用WebService

2.2.2、生成代码调用WebService

/**
 * adb方式
 * @param param
 */
public static void adb(String param) {
    try {
        com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub();
        com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese request = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese();
        request.setSText(param);
        com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChineseResponse response = stub.toTraditionalChinese(request);
        System.out.println("adb结果:" + response.getToTraditionalChineseResult());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.3、XMLBeans方式

使用XML Beans数据绑定方式。

2.3.1、用wsdl2java生成代码

%AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.xmlbeans -d xmlbeans -s -o temp

与adb方式相比只有-d参数的值不同。

这种方式会生成好多文件,src下有三个文件目录,里面有好多文件就不一一展开了:

Java调用WebService方法总结(5)--Axis2调用WebService

 resources目录下有:

Java调用WebService方法总结(5)--Axis2调用WebService

注:需把schemaorg_apache_xmlbeans放到classpath中否则会报错误:找不到相关类。

2.3.2、生成代码调用WebService

/**
 * xmlbeans方式
 * @param param
 */
public static void xmlbeans(String param) {
    try {
        com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub();
        ToTraditionalChineseDocument document = ToTraditionalChineseDocument.Factory.newInstance();
        ToTraditionalChineseDocument.ToTraditionalChinese request = document.addNewToTraditionalChinese();
        request.setSText(param);
        ToTraditionalChineseResponseDocument response = stub.toTraditionalChinese(document);
        System.out.println("xmlbeans:" + response.getToTraditionalChineseResponse().getToTraditionalChineseResult());
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.4、JiBX方式

 使用JiBX数据绑定方式。

2.4.1、用wsdl2java生成代码

%AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.jibx -d jibx -s -uw -o temp

与adb方式相比除了-d参数值不同,还需增加-uw参数。

命令会生成两个文件:

Java调用WebService方法总结(5)--Axis2调用WebService

2.4.2、生成代码调用WebService

/**
 * jibx方式
 * @param param
 */
public static void jibx(String param) {
    try {
        com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub();
        String result = stub.toTraditionalChinese(param);
        System.out.println("jibx结果:" + result);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.5、JAXBRI方式

 使用JAXBRI数据绑定方式。

2.5.1、用wsdl2java生成代码

%AXIS2_HOME%\bin\wsdl2java.bat -uri http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl -p com.inspur.ws.axis2.jaxbri -d jaxbri -s -o temp

与adb方式相比只有-d参数值不同。

命令会生成两个目录,一个值以命名空间生成的目录cn.com.webxml,一个是指定的包名com.inspur.ws.axis2.jaxbri。

Java调用WebService方法总结(5)--Axis2调用WebService

2.5.2、生成代码调用WebService

/**
 * jaxbri方式
 * @param param
 */
public static void jaxbri(String param) {
    try {
        com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub();
        cn.com.webxml.ToTraditionalChinese toTraditionalChinese = new cn.com.webxml.ToTraditionalChinese();
        toTraditionalChinese.setSText(param);
        String result = stub.toTraditionalChinese(toTraditionalChinese).getToTraditionalChineseResult();
        System.out.println("jaxbri结果:" + result);
    } catch (Exception e) {
        e.printStackTrace();
    }
}

2.6、小结

AXIOM方式不需要生成额外代码,ADB和JiBX方式生成的代码较少,JAXBRI生成代码较多,XMLBeans生成的代码最多比较啰嗦;生成代码是还可以用-t参数来生成测试用例。ADB、XMLBeans、JiBXJAXBRI方式生成的代码默认使用Soap1.2协议,没有生成两个版本。程序中所使用的jar包在%AXIS2_HOME%/lib中都可以找到,可以根据需要添加。下面是完整的demo,要测试某一个方法可以把其他的先注释掉。

package com.inspur.ws;


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.axiom.soap.SOAP11Constants;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;

/**
 * 
 * Axis2调用WebService
 *
 */
public class Axis2 {
    private static String url = "http://www.webxml.com.cn/WebServices/TraditionalSimplifiedWebService.asmx?wsdl";
    private static String targetNamespace = "http://webxml.com.cn/";

    /**
     * axiom方式
     * @param param
     */
    public static void axiom(String param) {
        try {
            ServiceClient client = new ServiceClient();
            Options options = client.getOptions();
            EndpointReference endpointReference = new EndpointReference(url);
            options.setTo(endpointReference);
            // 设置SOAPAction
            options.setAction("http://webxml.com.cn/toTraditionalChinese");
            // 设置soap版本
            options.setSoapVersionURI(SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
            //options.setSoapVersionURI(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);

            OMFactory factory = OMAbstractFactory.getOMFactory();
            OMNamespace namespace = factory.createOMNamespace(targetNamespace, "");
            OMElement method = factory.createOMElement("toTraditionalChinese", namespace);
            OMElement value = factory.createOMElement("sText", namespace);
            value.addChild(factory.createOMText(value, param));
            method.addChild(value);
            method.build();

            OMElement result = client.sendReceive(method);
            System.out.println(result);
            System.out.println("axiom结果:" + result.getFirstElement().getText());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * adb方式
     * @param param
     */
    public static void adb(String param) {
        try {
            com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub();
            com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese request = new com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChinese();
            request.setSText(param);
            com.inspur.ws.axis2.adb.TraditionalSimplifiedWebServiceStub.ToTraditionalChineseResponse response = stub.toTraditionalChinese(request);
            System.out.println("adb结果:" + response.getToTraditionalChineseResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * xmlbeans方式
     * @param param
     */
    public static void xmlbeans(String param) {
        try {
            com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.xmlbeans.TraditionalSimplifiedWebServiceStub();
            cn.com.webxml.ToTraditionalChineseDocument document = cn.com.webxml.ToTraditionalChineseDocument.Factory.newInstance();
            cn.com.webxml.ToTraditionalChineseDocument.ToTraditionalChinese request = document.addNewToTraditionalChinese();
            request.setSText(param);
            cn.com.webxml.ToTraditionalChineseResponseDocument response = stub.toTraditionalChinese(document);
            System.out.println("xmlbeans结果:" + response.getToTraditionalChineseResponse().getToTraditionalChineseResult());
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * jibx方式
     * @param param
     */
    public static void jibx(String param) {
        try {
            com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jibx.TraditionalSimplifiedWebServiceStub();
            String result = stub.toTraditionalChinese(param);
            System.out.println("jibx结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    /**
     * jaxbri方式
     * @param param
     */
    public static void jaxbri(String param) {
        try {
            com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub stub = new com.inspur.ws.axis2.jaxbri.TraditionalSimplifiedWebServiceStub();
            cn.com.webxml.ToTraditionalChinese toTraditionalChinese = new cn.com.webxml.ToTraditionalChinese();
            toTraditionalChinese.setSText(param);
            String result = stub.toTraditionalChinese(toTraditionalChinese).getToTraditionalChineseResult();
            System.out.println("jaxbri结果:" + result);
        } catch (Exception e) {
            e.printStackTrace();
        }
    }
    
    public static void main(String[] args) {
        axiom("小学");
        adb("大学");
        xmlbeans("小学");
        jibx("大学");
        jaxbri("大学");
    }
}
View Code

相关文章: