我们在开发webservice的时候,经常会看到有些生成的wsdl文件中包含了<soap:header>节点元素,那么怎样在wsdl
文件中添加<soap:header>节点元素。
我们知道开发webservice服务其实有两种方式cxf发布有两种方式,一种Object first,也就是普通的方式,还有一种是
WSDLfirst,就是你自己编写WSDL文档然后发布。如果需要在生成的wsdl文件中包含soap:header元素,那么我们只
能采用第二种方式来开发webservice服务。
我将采用的是http://liuwuhen.iteye.com/blog/1666189 该博客中所产生的wsdl文件的基础,进行soap:header元
素。
具体实现的步骤如下:
1.声明元素。
<xsd:element name="header" type="tns:headertype"/>
<xsd:complexType name="headertype">
<xsd:sequence>
<xsd:element name="spPassword" type="xsd:string" />
<xsd:element name="spId" type="xsd:int" />
</xsd:sequence>
</xsd:complexType>
我们可以这样理解,其实xsd:element就相当于我们一个类中所对应的属性, xsd:complexType 可以理解为属性所对应
类型。
2. 在message节点处引用该头部元素
<wsdl:message name="sayHello">
<wsdl:part element="tns:sayHello" name="parameters"/>
<wsdl:part element="tns:header" name="header_info"/>
</wsdl:message>
其中 element="tns:header"引用的是上面声明的元素。
3.在wsdl:binding中的wsdl:operation处添加<soap:header>元素
<wsdl:operation name="sayHello">
<soap:operation soapAction="" style="document" />
<wsdl:input name="sayHello">
<soap:header message="tns:sayHello"
part="header_info" use="literal" wsdl:required="true"/>
<soap:body use="literal" parts="sayHello"/>
</wsdl:input>
<wsdl:output name="sayHelloResponse">
<soap:body use="literal" />
</wsdl:output>
</wsdl:operation>
其中part引用是message部分声明的节点名称,use=literal表示的是编码的方式.
4.修改发布服务的cxf配置文件。
<jaxws:endpoint id="helloWorld" implementor="com.liuwuhen.cxf.IHelloWorldImpl"
address="/sayHello" wsdlLocation="WEB-INF/HelloWorld.wsdl">
wsdlLocation :即指定wsdl文件所在的路径。
通上述的三个步骤即可完成wsdl文件中添加soap:header节点元素,应该很简单。