Axis2_1.X学习笔记
????? 最近项目组经常的做SOAP接口,给第三方调用;由于经常改动以及为了让新员工快速开发,自己用bat命令做了一个快速生成客户端与服务端的工具,共享给大家。
?
????? (本文所提到的Axis2_141文件夹与axis2文件夹,请参考附件目录)
?
Axis2根据业务类来发布自己的wsdl服务详解
?
1. 新建自己的web工程,该web应用项目通过下面系列配置,达到向外提供Webservice服务的目的:
???? (1) 在Axis2_141文件夹下新建名为services.xml的文件,内容:
????
?
注意:
1. 执行package_aar.bat时,打开package_aar.bat文件,找到下面这行:
set serviceName="bmeService"? 修改为 set serviceName="你自己的发布服务名称"。?
2 . 附件里面的axis2及axis2-1.1里面的内容已清空,分别是开源的axis2.war与axis2-1.1.zip,请从apache网站下载解压覆盖,才可以用。
?
?
关于Axis2的SOAP头鉴权处理详解
?
在项目中做SOAP接口时,为了安全考虑一般都会对调用方作鉴权,这时需要添加鉴权头报文,你有两种方案:
A、你可以在SOAP消息头中添加,这样在服务端可以通过定义handler来对消息头进行统一处理鉴权。----这样处理起来比较统一,但是业务逻辑里得不到头消息体里的内容。
B、你可以在Body消息体里添加,这个就像普通参数一样,在每个方法的入参参数里加个头消息体,服务端需要在每个方法里取出头消息参数,进行鉴权。------这样比较灵活,可以在业务逻辑里运用头消息里明的参数。
下面介绍A方案的实现
1. 首先需要改写wsdl如下片段:
??????????? Type元素中头类型定义:
??????????? <xsd:element name="MessageHeader">
??? ??? ??? ??? <xsd:complexType>
??? ??? ??? ??? ??? <xsd:sequence>
??? ??? ??? ??? ??? ??? <xsd:element name="msgName" type="xsd:string"
??? ??? ??? ??? ??? ??? ??? maxOccurs="1" minOccurs="1"></xsd:element>
??? ??? ??? ??? ??? ??? <xsd:element name="transactionID" type="xsd:string"
??? ??? ??? ??? ??? ??? ??? maxOccurs="1" minOccurs="1">
??? ??? ??? ??? ??? ??? </xsd:element>
??? ??? ??? ??? ??? ??? <xsd:element name="version" type="xsd:string"
??? ??? ??? ??? ??? ??? ??? maxOccurs="1" minOccurs="1"></xsd:element>
??? ??? ??? ??? ??? ??? <xsd:element name="timeStamp" type="xsd:string"
??? ??? ??? ??? ??? ??? ??? maxOccurs="1" minOccurs="1"></xsd:element>
??? ??? ??? ??? ??? </xsd:sequence>
??? ??? ??? ??? </xsd:complexType>
??? ??? ??? </xsd:element>
???? 头消息:
??? <wsdl:message name="MessageHeader">
??? ??? <wsdl:part element="tns:MessageHeader" name="parameters" ></wsdl:part>
??? </wsdl:message>
??????? 在对应的方法的operation中加入消息头:(一般在入参input中加入)
??? ??? <wsdl:operation name="IndividualSubscribe">
??? ??? ??? <soap:operation
??? ??? ??? ??? soapAction="http://www.example.org/FemtoManagerWS/IndividualSubscribe" />
??? ??? ??? <wsdl:input>
??? ??? ??? ??? <soap:body use="literal" />
??? ??? ??? ??? <soap:header use="literal" part="parameters" message="tns:MessageHeader">??????????????? </soap:header>
??? ??? ??? </wsdl:input>
??? ??? ??? <wsdl:output>
??? ??? ??? ??? <soap:body use="literal" />
??? ??? ??? </wsdl:output>
??? ??? </wsdl:operation>
2. 这时候你可以用改过的wsdl,按照上面步骤部署服务端,然后开始写头消息处理handler,并在axis2.xml里配置:
??? (1)handler处理类:
?????
?
?
?
1 楼 794198795 2011-11-17 突然间发现,我们项目里用的就是这个 2 楼 wdq 2012-03-28 恩,好东西多谢楼主分享!!mark下以后用得着