wsdl中添加soap:header元素

我们在开发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节点元素,应该很简单。

 

你可能感兴趣的:(CXF,soapheader)