2016-09-08 9 views
1

バネ統合ヘッダーからバネ統合XMLにSOAP-ENVヘッダーを設定する方法はありますか?スプリングインテグレーションヘッダーをスプリング統合(インターセプター/スレッドローカルなし)に設定

Iアプローチの下にしようと、実際の出力は、ヘッダーを持っていないがbIdがSOAPヘッダ

<int:chain id="soapcall" input-channel="soapchannel">  
     <int-xml:header-enricher> 
      <int-xml:header name="bId" expression="headers['bId']"/> 
     </int-xml:header-enricher> 
      <int-ws:outbound-gateway uri="${soap.url}" interceptor="myInterceptor"> 
      </int-ws:outbound-gateway> 
    </int:chain> 

に移入することが期待。下記を参照してください:

私はアウトバウンドゲートウェイを呼び出す前にチェーン内で以下のアプローチを検討しました。このヘッダーは、ヘッダとして石鹸の動作だけを取るように見えます。だから、これは私もthisポストに見えた例外action headers not found

<int-ws:header-enricher > 
      <int-ws:soap-action expression="headers['bId']"/> 
      </int-ws:header-enricher> 

をスローします。しかし、私はこれをチェーンの中でコンパイルすることはできませんでした。

答えて

1

<int-xml:header-enricher>は何か分かりませんが、問題ではありません。

<int-ws:outbound-gateway>に必要なものはheader-mapperです。

そのコードは次のようになります。

だから、
@Override 
protected void populateStandardHeaders(Map<String, Object> headers, SoapMessage target) { 
    String soapAction = getHeaderIfAvailable(headers, WebServiceHeaders.SOAP_ACTION, String.class); 
    if (!StringUtils.hasText(soapAction)) { 
     soapAction = "\"\""; 
    } 
    target.setSoapAction(soapAction); 
} 

@Override 
protected void populateUserDefinedHeader(String headerName, Object headerValue, SoapMessage target) { 
    SoapHeader soapHeader = target.getSoapHeader(); 
    if (headerValue instanceof String) { 
     QName qname = QNameUtils.parseQNameString(headerName); 
     soapHeader.addAttribute(qname, (String) headerValue); 
    } 
} 

、デフォルトでは、標準の一つとしてWebServiceHeaders.SOAP_ACTIONをマッピングし、そして、彼らはStringであり、唯一のターゲットSOAP-ENV:Header要素のattributeようならば、これらすべてのユーザーが定義しました。

これらのユーザ定義のヘッダがでマッピングすることができます:あなたは<SOAP-ENV:Header>にサブ要素を移入する必要がある場合は、あなたがDefaultSoapHeaderMapperを拡張し、そのpopulateUserDefinedHeader()を上書きしない限り選択肢を持っているとSoapHeader.addHeaderElement() APIを使用していない

<xsd:attribute name="mapped-request-headers" type="xsd:string"> 
      <xsd:annotation> 
       <xsd:documentation><![CDATA[ 
Comma-separated list of names of SOAP Headers to be mapped from the SOAP request into the MessageHeaders. 
This can only be provided if the 'header-mapper' reference is not being set directly. The values in 
this list can also be simple patterns to be matched against the header names (e.g. "foo*" or "*foo"). 
         ]]></xsd:documentation> 
      </xsd:annotation> 
     </xsd:attribute> 

Reference Manualもご覧ください。

+0

基本的に私は迎撃器の中にバネの統合ヘッダーの価値を得たいと思っています。私はそれを達成するためにさまざまなアプローチを試みています。私の[元の投稿](http://stackoverflow.com/questions/39382580/pass-parameter-to-spring-soap-interceptor/39391241#39391241) – ViratKohli

+0

???あなたの質問は「インターセプタなし」です。 OTOHはメッセージを変更する傍受責任ではありません。インターセプタはすでにSOAPの一部です。 Spring Integrationについては何もないことは普通です。 –

+0

私はインターセプタの中にsoap request envelopeを記録しようとしています。春のメッセージのヘッダー[bId]はデータベース列で、各SOAP要求を対応するデータベースIDに関連付けるために使用されます。インターセプタはバネ統合メッセージヘッダーにアクセスできません。だから石鹸のヘッダーにbldを加えることでここを回避しようとする – ViratKohli

関連する問題