Axis2创建webservice服务的方式之POJO方式
Axis2创建webservice服务的方式又5种,POJO,AXIOM's OMElement,ADB,XMLBeans和
JiBX方式.
由
http://blog.csdn.net/larry_lv/article/details/6637570
五种方式的优缺点:
得知,POJO方式最简单,ADB方式强烈推荐.
下面就分别使用这两种方式创建webservice服务.
1. POJO方式
1.1 准备web工程
http://jackyin5918.iteye.com/blog/1907992 中对Axis2版本中axis2.war的介绍可知,
要创建webservice先要创建一个普通的web工程,然后将axis2.war解压,用解压得到的WEB-INF
替换芯创建普通web工程的WEB-INF即可.axis2.war中的axis2-web不必使用.
所以要先创建一个web工程,然后替换WEB-INF.
这里创建web工程是:TestWebService
1.2 创建一个普通的java类(POJO)
package test.sevices; public class TestService { private String name ="Jack"; public void setName(String newName) { this.name = newName; } public String getName() { return name; } }
1.3 创建services.xml部署服务
根据http://jackyin5918.iteye.com/blog/1907992,部署一个服务,需要先创建一个services.xml文件.
这个文件需要放到classes文件夹下的META-INF目录中,格式一般如下:
<service name="StockQuoteService" scope="application" targetNamespace="http://quickstart.samples/">
<description>
Stock Quote 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>
<schema schemaNamespace="http://quickstart.samples/xsd"/>
<parameter name="ServiceClass">samples.quickstart.service.pojo.StockQuoteService</parameter>
</service>
services.xml个节点含义解释: http://suselinks.us/2011/09/detailed-explanation-for-axis2-web-service-configuration-file
为本例创建的services.xml文件如下:
<service name="TestService" scope="application" targetNamespace="http://quickstart.samples/"> <description> 一个测试服务 </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> <schema schemaNamespace="http://quickstart.samples/xsd"/> <parameter name="ServiceClass">test.sevices.TestService</parameter> </service>
1.4 创建一个符合发布服务要求的目录结构
参考:
- StockQuoteService
- META-INF
- services.xml
- lib
- samples
- quickstart
- service
- pojo
- StockQuoteService.class
创建的目录结构为:
- TestService
- META-INF
- services.xml
- lib
- test
- services
- TestService.class
2. 将上面的TestService文件夹复制到 \WEB-INF\services\下
然后启动tomcat,开始测试:
(1) 查看wsdl文件:
http://localhost:8080/TestWebService/services/TestService?wsdl
得到的wsdl文件如下:
<?xml version="1.0" encoding="UTF-8" ?> - <wsdl:definitions xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:ns="http://quickstart.samples/xsd" xmlns:wsaw="http://www.w3.org/2006/05/addressing/wsdl" xmlns:tns="http://quickstart.samples/" xmlns:http="http://schemas.xmlsoap.org/wsdl/http/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:mime="http://schemas.xmlsoap.org/wsdl/mime/" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:soap12="http://schemas.xmlsoap.org/wsdl/soap12/" targetNamespace="http://quickstart.samples/"> <wsdl:documentation>TestService</wsdl:documentation> - <wsdl:types> - <xs:schema attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://quickstart.samples/xsd"> - <xs:element name="setName"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="newName" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getName"> - <xs:complexType> <xs:sequence /> </xs:complexType> </xs:element> - <xs:element name="getNameResponse"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema> </wsdl:types> - <wsdl:message name="getNameRequest"> <wsdl:part name="parameters" element="ns:getName" /> </wsdl:message> - <wsdl:message name="getNameResponse"> <wsdl:part name="parameters" element="ns:getNameResponse" /> </wsdl:message> - <wsdl:message name="setNameRequest"> <wsdl:part name="parameters" element="ns:setName" /> </wsdl:message> - <wsdl:portType name="TestServicePortType"> - <wsdl:operation name="getName"> <wsdl:input message="tns:getNameRequest" wsaw:Action="urn:getName" /> <wsdl:output message="tns:getNameResponse" wsaw:Action="urn:getNameResponse" /> </wsdl:operation> - <wsdl:operation name="setName"> <wsdl:input message="tns:setNameRequest" wsaw:Action="urn:setName" /> </wsdl:operation> </wsdl:portType> - <wsdl:binding name="TestServiceSoap11Binding" type="tns:TestServicePortType"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="getName"> <soap:operation soapAction="urn:getName" style="document" /> - <wsdl:input> <soap:body use="literal" /> </wsdl:input> - <wsdl:output> <soap:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="setName"> <soap:operation soapAction="urn:setName" style="document" /> - <wsdl:input> <soap:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> - <wsdl:binding name="TestServiceSoap12Binding" type="tns:TestServicePortType"> <soap12:binding transport="http://schemas.xmlsoap.org/soap/http" style="document" /> - <wsdl:operation name="getName"> <soap12:operation soapAction="urn:getName" style="document" /> - <wsdl:input> <soap12:body use="literal" /> </wsdl:input> - <wsdl:output> <soap12:body use="literal" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="setName"> <soap12:operation soapAction="urn:setName" style="document" /> - <wsdl:input> <soap12:body use="literal" /> </wsdl:input> </wsdl:operation> </wsdl:binding> - <wsdl:binding name="TestServiceHttpBinding" type="tns:TestServicePortType"> <http:binding verb="POST" /> - <wsdl:operation name="getName"> <http:operation location="getName" /> - <wsdl:input> <mime:content type="application/xml" part="parameters" /> </wsdl:input> - <wsdl:output> <mime:content type="application/xml" part="parameters" /> </wsdl:output> </wsdl:operation> - <wsdl:operation name="setName"> <http:operation location="setName" /> - <wsdl:input> <mime:content type="application/xml" part="parameters" /> </wsdl:input> </wsdl:operation> </wsdl:binding> - <wsdl:service name="TestService"> - <wsdl:port name="TestServiceHttpSoap11Endpoint" binding="tns:TestServiceSoap11Binding"> <soap:address location="http://localhost:8080/TestWebService/services/TestService.TestServiceHttpSoap11Endpoint/" /> </wsdl:port> - <wsdl:port name="TestServiceHttpSoap12Endpoint" binding="tns:TestServiceSoap12Binding"> <soap12:address location="http://localhost:8080/TestWebService/services/TestService.TestServiceHttpSoap12Endpoint/" /> </wsdl:port> - <wsdl:port name="TestServiceHttpEndpoint" binding="tns:TestServiceHttpBinding"> <http:address location="http://localhost:8080/TestWebService/services/TestService.TestServiceHttpEndpoint/" /> </wsdl:port> </wsdl:service> </wsdl:definitions>
(2)查看schema
http://localhost:8080/TestWebService/services/TestService?xsd - <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:ns="http://quickstart.samples/xsd" xmlns:ns1="http://org.apache.axis2/xsd" xmlns:tns="http://quickstart.samples/" attributeFormDefault="qualified" elementFormDefault="qualified" targetNamespace="http://quickstart.samples/xsd"> - <xs:element name="setName"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="newName" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> - <xs:element name="getName"> - <xs:complexType> <xs:sequence /> </xs:complexType> </xs:element> - <xs:element name="getNameResponse"> - <xs:complexType> - <xs:sequence> <xs:element minOccurs="0" name="return" nillable="true" type="xs:string" /> </xs:sequence> </xs:complexType> </xs:element> </xs:schema>
(3) 调用服务查看:
http://localhost:8080/TestWebService/services/TestService/getName
输出:
- <ns:getNameResponse xmlns:ns="http://quickstart.samples/xsd"> <ns:return>Jack</ns:return> </ns:getNameResponse>
http://localhost:8080/TestWebService/services/TestService/setName?newName=Frank 设置新name(newName是setName方法的参数名)
再次调用
http://localhost:8080/TestWebService/services/TestService/getName
输出:
- <ns:getNameResponse xmlns:ns="http://quickstart.samples/xsd"> <ns:return>Frank</ns:return> </ns:getNameResponse>
参考:
http://danlley.iteye.com/blog/102163
附件为 工程文件,因为文件大小原因,删除了lib里面的jar包,使用的时候需要吧Axis2 1.6.2版本中的lib文件夹里的所有jar包拷贝到TestWebService\WebRoot\WEB-INF\lib
相关推荐
Axis2 提供了多种方式来编写和发布 WebService,下面介绍使用 POJO 形式发布 WebService。 使用 POJO 形式发布 WebService 在 Axis2 中,不需要进行任何的配置,就可以直接将一个简单的 POJO 发布成 WebService。...
Axis2是Apache软件基金会的一个用于构建和部署WebService的引擎,它基于Apache Axis项目,并且是Apache Web服务堆栈的最新版本。Axis2支持SOAP和REST风格的WebService,并且能够以最小的资源消耗和高性能来处理SOAP...
在描述中,“WebService大讲堂之Axis2(1):用POJO实现0配置的WebService”表明该文档系列首先介绍了如何使用Plain Old Java Objects (POJOs)来创建无配置的Web服务。POJO是一种简单的Java类,没有特定的框架约束,...
Apache Axis2是Java平台上一个高效且灵活的Web服务框架,它允许开发者用多种方式创建和消费Web服务。本篇将深入探讨使用Axis2实现Web服务的五种主要方法:POJO、AXIOM、ADB、XMLBeans和JIBX,并涵盖客户端和服务器端...
Axis2还支持使用services.xml文件发布WebService,这是一种更加灵活的发布方式,允许开发者通过XML配置文件自定义服务的部署和运行参数。在二进制文件传输方面,Axis2提供了一个模块化的架构,使得开发者可以轻松地...
### WebService大讲堂之Axis2:深入了解零配置的WebService开发 #### 一、Axis2简介及下载安装 Axis2是Apache软件基金会提供的一款高性能、轻量级的WebService引擎,它是在Axis1.x的基础上重新设计的产物,不仅...
4. **启动服务**:通过命令行或其他方式启动Axis2服务。 5. **验证**:通过调用WebService接口验证服务是否正常运行。 #### 四、注意事项 - **端口冲突**:确保所使用的端口未被其他服务占用。 - **安全设置**:...
通过AXIS2,开发者可以轻松地创建和发布WebService,同时AXIS2提供了丰富的功能,如WS-Security、MTOM和SwA等,以支持复杂的Web服务交互场景。学习AXIS2有助于深入理解WebService开发,并能快速构建实际应用。
Axis2 WebService不仅提供了基础的Web服务实现能力,还集成了高级特性如异步处理、会话管理和模块化扩展,为开发者构建高性能、可维护的Web服务提供了强大支持。掌握这些知识,有助于深入理解和高效运用Axis2进行...
1. **多种方式编写和发布Web服务**:Axis2支持JAX-RPC和JAX-WS规范,允许开发者选择适合他们项目的API来创建Web服务。同时,它还提供了RESTful Web服务的支持,与SOAP相比,REST更简洁,更适合轻量级的交互。 2. **...
### WebService之Axis2经典教程 #### 一、概述 随着信息技术的发展,Web Service作为一种重要的分布式计算模式,已经成为实现服务导向架构(SOA)的关键技术之一。Axis2作为一款流行的Web Service引擎,不仅具备高...