2016-07-06 5 views
0

多くの要素を定義するWSDLファイルを作成しています。このような何か:同一のSOAPヘッダーを使用してWSDL操作で自分自身を繰り返さないようにする方法

<wsdl:operation name="MyOperationName"> 
    <soap:operation soapAction="http://www.domain.dk/myschema#MyService" style="document"/> 
    <wsdl:input name="MyServiceRequest"> 
      <soap:header use="literal" part="SecurityHeader" message="tns:SecurityHeader"/> 
      <soap:header use="literal" part="SomethingElseHeader" message="tns:SomethingElseHeader"/> 
      <soap:header use="literal" part="WhitelistingHeader" message="tns:WhitelistingHeader" wsdl:required="true"/> 
      <soap:body use="literal"/> 
    </wsdl:input> 
    <wsdl:output name="MyServiceResponse"> 
     <soap:body use="literal"/> 
    </wsdl:output> 
    <wsdl:fault name="MyFault"> 
     <soap:fault name="MyFault" use="literal"/> 
    </wsdl:fault> 
</wsdl:operation> 

私は、WSDL操作の多くを持っており、それらはすべての石鹸の同じ同じリストを共有:ヘッダ要素:

  <soap:header use="literal" part="SecurityHeader" message="tns:SecurityHeader"/> 
      <soap:header use="literal" part="SomethingElseHeader" message="tns:SomethingElseHeader"/> 
      <soap:header use="literal" part="WhitelistingHeader" message="tns:WhitelistingHeader" wsdl:required="true"/> 

を一度だけして、これを定義するためのいくつかの方法がありますどういうわけかwsdl操作に何らかのリファレンスとして「追加」しますか?この方法では、ヘッダーが変更された場合や、新しいヘッダーを追加する必要がある場合に、何かを変更する必要があります。

私はこれのようなwsdl:input要素を拡張しようとしていましたが(下記参照)、ここではxml/wsdl wiseの深さからわかりません。しかし、これは私が探しているものを示しています。

<xs:complexType name="StandardHeaders"> 
    <xs:simpleContent> 
     <xs:extension base="wsdl:operation"> 
      <soap:header use="literal" part="SecurityHeader" message="tns:SecurityHeader"/> 
      <soap:header use="literal" part="SomethingElseHeader" message="tns:SomethingElseHeader"/> 
      <soap:header use="literal" part="WhitelistingHeader" message="tns:WhitelistingHeader" wsdl:required="true"/> 
     </xs:extension>xx 
    </xs:simpleContent> 
</xs:complexType> 
... 
<wsdl:input name="MyServiceRequest"> 
    <tns:StandardHeaders /> 

答えて

0

私はこの問題を掘り下げて解決策を見つけました。 Axis2を使ったWSDL以外の構文解析やXSLTの前処理を実行できるなど、他の方法ではうまくいくかもしれませんが、XML ENTITYの定義は私にとってはうまくいきました。例:

<?xml version="1.0" encoding="UTF-8"?> 
<!DOCTYPE definitions [ 
<!ENTITY myStandardSOAPRequestHeaders " 
      <soap:header use='literal' part='Header1Part' message='tns:header1' /> 
      <soap:header use='literal' part='Header2Part' message='tns:header2' /> 
"> 
<!ENTITY myStandardSOAPResponseHeaders " 
      <soap:header use='literal' part='RespHeader1' message='tns:resp1'/> 
      <soap:header use='literal' part='RespHeader2' message='tns:resp2'/> 
"> 
]> 
<wsdl:definitions xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" 
       xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" 
.... 
&myStandardSOAPRequestHeaders; 

基本的には、再利用するXMLを含むENTITY定義を含めてから、&entityNameを使用してそのXMLを参照してください。私の場合は

私は(属性値内のXMLを持つ)を見てとてもきれいではありませんインラインENTITY定義を使用していますが、同様の外部ファイルを参照することができ、このように:

<!ENTITY myHeader PUBLIC "path/to/external.xml"> 

数がありますこれについて議論する有用なサイトがあります。私はこの1つが有用であることが判明:

https://www.liquid-technologies.com/XML/EntityRefs.aspx

(私は彼らと提携していないよGoogleだけでそれらを発見した)

関連する問題