以官方文档上的quickStart为例子,来源http://axis.apache.org/axis2/java/core/docs/quickstartguide.html
准备工作:
1.安装jdk, 设置环境变量path, classpath(我的jdk是1.6,其中JAVA_HOME=D:\software\Java\jdk1.6.0_24 path=;%JAVA_HOME%\bin classpath=.;%JAVA_HOME%\lib )
2.安装tomcat,我的是tomcat6, 安装完成后(端口为8080,用户名密码均为admin),在conf\tomcat-users.xml,中加入
在bin目录下,右击tomcat6.exe->兼容性,勾上以管理员运行此程序,对tomcat6w.exe执行相同的操作。<tomcat-users> <user name="admin" password="admin" roles="admin,manager" /> </tomcat-users>
3.安装ant, 下载apache-ant-1.8.2-bin.zip,解压缩,设置环境变量,ANT_HOME=D:\software\apache-ant-1.8.2-bin\apache-ant-1.8.2, path=;%ANT_HOME%\bin
4.下载axis2, axis2-1.6.0-war.zip, axis2-1.6.0-bin.zip,解压缩,复制axis2.war到tomcat下的webapp下
五种方法来创建服务create service
1. deploying POJOs
a). AXIS2_HOME/samples/quickstart 的目录如下所示:
b).cmd,进入quickstart目录,输入ant generate.sevice, 此时会创建如下结构:- quickstart - README.txt - build.xml - resources - META-INF - services.xml - src - samples - quickstart - service - pojo - StockQuoteService.java
c). 两种方法来发布:一.重命名classes文件名为StockQuoteService, 将其复制到tomcat下的webapps/axis2/WEB-INF/services下,二.直接将build下的StockQuoteService.aar复制到 tomcat下的webapps/axis2/WEB-INF/services下- quickstart/build/classes - META-INF - services.xml - samples - quickstart - service - pojo - StockQuoteService.class
d). 检查是否发布成功:启动tomcat,输入以下URL,看是否有StockQuoteService服务。
http://localhost:8080/axis2/services/listServices输入以下URL看是否能看到wsdl文件
http://localhost:8080/axis2/services/StockQuoteService?wsdl输入以下URL看是否能看到schema
http://localhost:8080/axis2/services/StockQuoteService?xsd如果都成功,再输入以下URL
http://localhost:8080/axis2/services/StockQuoteService/getPrice?symbol=IBM可以得到以下信息:
再输入以下URL,以更新信息<ns:getPriceResponse xmlns:ns="http://pojo.service.quickstart.samples/xsd"><ns:return>42</ns:return></ns:getPriceResponse>
http://localhost:8080/axis2/services/StockQuoteService/update?symbol=IBM&price=100重新输入以下URL,可以发现信息已更新
http://localhost:8080/axis2/services/StockQuoteService/getPrice?symbol=IBM2. Building the Service using AXIOM
cmd 进入quickstartaxiom目录,ant generate.service 生成服务,将build下的*.aar文件复制到tomcat下的webapps/axis2/WEB-INF/services下,启动tomcat即可。检查发布成功,如上所示
注:使用此种方法发布service时,文件结构如下所示/samples/quickstartaxiom:
其中,service.xml与POJO里的不相同,内容如下:- quickstartaxiom - README.txt - build.xml - resources - META-INF - services.xml - StockQuoteService.wsdl - src - samples - quickstart - service - axiom - StockQuoteService.java - clients - AXIOMClient.java
此时,定义了operation name,并且 class为RawXML,,sevice方法如下所示:<service name="StockQuoteService" scope="application"> <description> Stock Quote Service </description> <operation name="getPrice"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOutMessageReceiver"/> </operation> <operation name="update"> <messageReceiver class="org.apache.axis2.receivers.RawXMLINOnlyMessageReceiver"/> </operation> <parameter name="ServiceClass">samples.quickstart.service.axiom.StockQuoteService</parameter> </service>
The StockQuoteService Class usingAXIOM
从代码可以看出,服务器里的方法都以OMElement element为参数,如果服务不是一个"in only"的服务的话,返回的也将是一个OMElement(代表XML element), 该OMElement作为封装SOAP信息的载体,无论是接收信息还是发送信息,都以OMElement的形式。如果要取得信息,就可以一步步的取得element里的节点,既而取得内容,如update代码中红色部分。如果要发送信息,就一步步的将信息放入节点中,最后成为一个OMElement发送,如getPrice()package samples.quickstart.service.axiom; import javax.xml.stream.XMLStreamException; 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 java.util.HashMap; public class StockQuoteService { private HashMap map = new HashMap(); public OMElement getPrice(OMElement element) throws XMLStreamException { element.build(); element.detach(); OMElement symbolElement = element.getFirstElement(); String symbol = symbolElement.getText(); String returnText = "42"; Double price = (Double) map.get(symbol); if(price != null){ returnText = "" + price.doubleValue(); } OMFactory fac = OMAbstractFactory.getOMFactory(); OMNamespace omNs = fac.createOMNamespace("http://axiom.service.quickstart.samples/xsd", "tns"); OMElement method = fac.createOMElement("getPriceResponse", omNs); OMElement value = fac.createOMElement("price", omNs); value.addChild(fac.createOMText(value, returnText)); method.addChild(value); return method; } public void update(OMElement element) throws XMLStreamException { element.build(); element.detach(); OMElement symbolElement = element.getFirstElement(); String symbol = symbolElement.getText(); OMElement priceElement = (OMElement)symbolElement.getNextOMSibling(); String price = priceElement.getText(); map.put(symbol, new Double(price)); } }
3.Generating the Service using ADB
即生成发布服务通过使用AXIS 数据绑定框架(Axis DataBinding Framework)
a),在Axis2_HOME/samples/quickstartadb目录下,输入ant generate.service
b).进入build/service 目录,输入ant jar.server
c).在build/service/build/lib目录下复制*.aar文件到tomcat下的webapps/axis2/WEB-INF/services下,启动tomcat即可。检查发布成功
4.Generating the Service using XMLBeans
a).进入Axis2_HOME/samples/quickstartxmlbeans目录下,输入ant generate.service
b).进入build/service目录,输入ant jar.server
c).在build/service/build/lib目录下复制*.aar文件到tomcat下的webapps/axis2/WEB-INF/services下,启动tomcat即可。检查发布成功
5.Generating the Service using JiBx
a).进入Axis2_HOME/samples/quickstartjibx目录下,输入ant generate.service
b).进入build/service目录,输入ant jar.server
c).在build/service/build/lib目录下复制*.aar文件到tomcat下的webapps/axis2/WEB-INF/services下,启动tomcat即可。检查发布成功