2.4 Apache Axis2 快速学习手册之XMLBeans 构建Web Service

时间:2023-03-09 08:29:16
2.4 Apache Axis2 快速学习手册之XMLBeans 构建Web Service

4. 使用XMLBeans生成服务(通过xml bean 命令将wsdl 文件生成java 代码)

要使用XMLBeans生成服务,请执行以下步骤。

通过在Axis2_HOME / samples / quickstartxmlbeans目录中键入以下内容,使用WSDL2Java实用程序生成框架

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

否则,只需在Axis2_HOME / samples / quickstartxmlbeans目录中键入ant generate.service。

选项-d xmlbeans指定XML Bean数据绑定。-s开关仅指定同步或阻塞调用。-ss开关创建服务器端代码(框架和相关文件)。-sd开关创建服务描述符(services.xml文件)。-ssi开关为服务框架创建一个接口。现在,服务文件应位于构建/服务中。

如果您直接使用WSDL2Java生成代码,接下来您必须修改生成的框架以实现服务(如果您使用“ant generate.service”,则完成的框架将自动复制到生成的框架上)。

接下来打开build / service / src / samples / quickstart / service / xmlbeans / StockQuoteServiceSkeleton.java文件并修改它以将服务的功能添加到生成的方法中(参见代码清单7)。

代码7:定义服务框架

package samples.quickstart.service.xmlbeans;

import samples.quickstart.service.xmlbeans.xsd.GetPriceDocument;
import samples.quickstart.service.xmlbeans.xsd.GetPriceResponseDocument;
import samples.quickstart.service.xmlbeans.xsd.UpdateDocument; import java.util.HashMap; public class StockQuoteServiceSkeleton implements StockQuoteServiceSkeletonInterface { private static HashMap map; static{ map = new HashMap(); } public void update(UpdateDocument param0) {
map.put(param0.getUpdate().getSymbol(), new Double(param0.getUpdate().getPrice()));
} public GetPriceResponseDocument getPrice(GetPriceDocument param1) {
Double price = (Double) map.get(param1.getGetPrice().getSymbol());
double ret = 42;
if(price != null){
ret = price.doubleValue();
}
System.err.println();
GetPriceResponseDocument resDoc =
GetPriceResponseDocument.Factory.newInstance();
GetPriceResponseDocument.GetPriceResponse res =
resDoc.addNewGetPriceResponse();
res.setReturn(ret);
return resDoc;
}
}

通过在build / service目录中键入以下命令来构建项目,该目录包含build.xml文件:

ant jar.server

如果一切顺利,您应该在窗口中看到BUILD SUCCESSFUL消息,并在新创建的build / service / build / lib目录中看到StockQuoteService.aar文件。将此文件复制到servlet引擎的webapps / axis2 / WEB-INF / services目录。

services.xml

<service name="StockQuoteService" scope="application">
<messageReceivers>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"
class="samples.quickstart.service.xmlbeans.StockQuoteServiceMessageReceiverInOut"/>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
class="samples.quickstart.service.xmlbeans.StockQuoteServiceMessageReceiverInOnly"/>
</messageReceivers>
<parameter name="ServiceClass">samples.quickstart.service.xmlbeans.StockQuoteServiceSkeleton
</parameter>
<operation name="update" mep="http://www.w3.org/ns/wsdl/in-only">
<actionMapping>urn:update</actionMapping>
</operation>
<operation name="getPrice" mep="http://www.w3.org/ns/wsdl/in-out">
<actionMapping>urn:getPrice</actionMapping>
<outputActionMapping>http://quickstart.samples/StockQuoteServicePortType/getPriceResponse</outputActionMapping>
</operation>
</service>

注意:

这种方式的services.xml 消息接受处理器也变了

    <messageReceivers>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-out"
class="samples.quickstart.service.xmlbeans.StockQuoteServiceMessageReceiverInOut"/>
<messageReceiver mep="http://www.w3.org/ns/wsdl/in-only"
class="samples.quickstart.service.xmlbeans.StockQuoteServiceMessageReceiverInOnly"/>
</messageReceivers>

您可以通过查看服务列表来检查以确保服务已正确部署,

http://localhost:8080/axis2/services/listServices

您还可以在以下位置检查自定义WSDL:

http://localhost:8080/axis2/services/StockQuoteService?wsdl

schema

http://localhost:8080/axis2/services/StockQuoteService?xsd