Axis2的使用

来源:互联网 发布:win8安装ubuntu 编辑:程序博客网 时间:2024/05/18 03:22

java2wsdl.bat的使用
java2wsdl -cp -cn <要暴露的Java类服务> -of <生成的wsdl文件名>

services.xml的定义文件

<service name="StockQuoteService" scope="application">    <description>        Stock Quote Sample Service    </description>    <messageReceivers>        <messageReceiver             mep="http://www.w3.org/2004/08/wsdl/in-only"    class="org.apache.axis2.rpc.receivers.RPCInOnlyMessageReceiver"/>        <messageReceiver            mep="http://www.w3.org/2004/08/wsdl/in-out"    class="org.apache.axis2.rpc.receivers.RPCMessageReceiver"/>    </messageReceivers>    <parameter name="ServiceClass">        samples.quickstart.service.pojo.StockQuoteService    </parameter></service>

根据wsdl生成java文件

使用adb的生成java服务端文件

(Windows)%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.adb -d adb -s -ss -sd -ssi -o build\service(Linux)$AXIS2_HOME/bin/wsdl2java -uri resources/META-INF/StockQuoteService.wsdl -p samples.quickstart.service.adb -d adb -s -ss -sd -ssi -o build/service

使用XMLBeans生成Java服务端文件

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d xmlbeans -s -ss -sd -ssi -o build\service

使用JiBX生成服务端Java文件

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.jibx -d jibx -s -ss -sd -ssi -uw -o build\service

生成调用服务客户端
使用通用的OMElement元素编写客户端代码,把OMElement对照的看成dom4j中的Element即可,也就是一个xml的文档;相关Demo如下

package samples.quickstart.clients;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.Constants;import org.apache.axis2.addressing.EndpointReference;import org.apache.axis2.client.Options;import org.apache.axis2.client.ServiceClient;public class AXIOMClient {    private static EndpointReference targetEPR =         new EndpointReference("http://localhost:8080/axis2/services/StockQuoteService");    public static OMElement getPricePayload(String symbol) {        OMFactory fac = OMAbstractFactory.getOMFactory();        OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");        OMElement method = fac.createOMElement("getPrice", omNs);        OMElement value = fac.createOMElement("symbol", omNs);        value.addChild(fac.createOMText(value, symbol));        method.addChild(value);        return method;    }    public static OMElement updatePayload(String symbol, double price) {        OMFactory fac = OMAbstractFactory.getOMFactory();        OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns");        OMElement method = fac.createOMElement("update", omNs);        OMElement value1 = fac.createOMElement("symbol", omNs);        value1.addChild(fac.createOMText(value1, symbol));        method.addChild(value1);        OMElement value2 = fac.createOMElement("price", omNs);        value2.addChild(fac.createOMText(value2,                                         Double.toString(price)));        method.addChild(value2);        return method;    }    public static void main(String[] args) {        try {            OMElement getPricePayload = getPricePayload("WSO");            OMElement updatePayload = updatePayload("WSO", 123.42);            Options options = new Options();            options.setTo(targetEPR);            options.setTransportInProtocol(Constants.TRANSPORT_HTTP);            ServiceClient sender = new ServiceClient();            sender.setOptions(options);            sender.fireAndForget(updatePayload);            System.err.println("price updated");            OMElement result = sender.sendReceive(getPricePayload);            String response = result.getFirstElement().getText();            System.err.println("Current price of WSO: " + response);        } catch (Exception e) {            e.printStackTrace();        }    }}

使用ADB

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d adb -s -o build\client

ADB形式的调用方法

package samples.quickstart.clients;import samples.quickstart.service.adb.StockQuoteServiceStub;public class ADBClient{    public static void main(java.lang.String args[]){        try{            StockQuoteServiceStub stub =                new StockQuoteServiceStub                ("http://localhost:8080/axis2/services/StockQuoteService");            getPrice(stub);            update(stub);            getPrice(stub);        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* fire and forget */    public static void update(StockQuoteServiceStub stub){        try{            StockQuoteServiceStub.Update req = new StockQuoteServiceStub.Update();            req.setSymbol ("ABC");            req.setPrice (42.35);            stub.update(req);            System.err.println("price updated");        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* two way call/receive */    public static void getPrice(StockQuoteServiceStub stub){        try{            StockQuoteServiceStub.GetPrice req = new StockQuoteServiceStub.GetPrice();            req.setSymbol("ABC");            StockQuoteServiceStub.GetPriceResponse res =                stub.getPrice(req);            System.err.println(res.get_return());        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }}

使用XmlBeans的形式生成调用Java代码

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.service.xmlbeans -d xmlbeans -s -o build\client

客户端调用的Java代码

package samples.quickstart.clients;import samples.quickstart.service.xmlbeans.StockQuoteServiceStub;import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;import samples.quickstart.service.xmlbeans.xsd.UpdateDocument;public class XMLBEANSClient{    public static void main(java.lang.String args[]){        try{            StockQuoteServiceStub stub =                new StockQuoteServiceStub                ("http://localhost:8080/axis2/services/StockQuoteService");            getPrice(stub);            update(stub);            getPrice(stub);        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* fire and forget */    public static void update(StockQuoteServiceStub stub){        try{            UpdateDocument reqDoc = UpdateDocument.Factory.newInstance();            UpdateDocument.Update req = reqDoc.addNewUpdate();            req.setSymbol ("BCD");            req.setPrice (42.32);            stub.update(reqDoc);            System.err.println("price updated");        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* two way call/receive */    public static void getPrice(StockQuoteServiceStub stub){        try{            GetPriceDocument reqDoc = GetPriceDocument.Factory.newInstance();            GetPriceDocument.GetPrice req = reqDoc.addNewGetPrice();            req.setSymbol("BCD");            GetPriceResponseDocument res =                stub.getPrice(reqDoc);            System.err.println(res.getGetPriceResponse().getReturn());        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }}

JiBX方式生成客户端代码

%AXIS2_HOME%\bin\wsdl2java -uri resources\META-INF\StockQuoteService.wsdl -p samples.quickstart.clients -d jibx -s -uw -o build\client

调用的JiBXClient 类

package samples.quickstart.clients;import samples.quickstart.service.jibx.StockQuoteServiceStub;public class JiBXClient{    public static void main(java.lang.String args[]){        try{            StockQuoteServiceStub stub =                new StockQuoteServiceStub                ("http://localhost:8080/axis2/services/StockQuoteService");            getPrice(stub);            update(stub);            getPrice(stub);        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* fire and forget */    public static void update(StockQuoteServiceStub stub){        try{            stub.update("CDE", new Double(42.35));            System.err.println("price updated");        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }    /* two way call/receive */    public static void getPrice(StockQuoteServiceStub stub){        try{            System.err.println(stub.getPrice("CDE"));        } catch(Exception e){            e.printStackTrace();            System.err.println("\n\n\n");        }    }}
0 0