0

http アウトバウンド ゲートウェイのリクエストにカスタム ヘッダーとして渡したい Java オブジェクトがあります。以下はスニペットです

<int:gateway id="service" service-interface="MyService" default-request-channel="requestChannel" default-reply-channel="replyChannel">
    <int:method name="doSomething" payload-expression="#args[0] + ',' + #args[1]">
        <int:header name="method_name" value="login"/>
        <int:header name="service_identifier" value="myService"/>
        </int:method>                
</int:gateway>

<int:header-enricher input-channel="requestChannel" output-channel="gatewayChannel">
       <int:header name="user_context" expression="T(UserContextHolder).getContext()"/>
</int:header-enricher>

<int-http:outbound-gateway request-channel="gatewayChannel" url="myURL" mapped-request-headers="user_context, service_identifier, method_name, HTTP_REQUEST_HEADERS"
          http-method="POST" reply-channel="replyChannel"/>

UserContext が Java オブジェクトになる場所

UserContext implements Serializable {
    String userId;
    RequestParameters params;
    ScopeEnum scope;
    ....
}

私が抱えている問題は、ヘッダー user_context がヘッダーにマップされていないことです。ログから、DefaultHttpHeaderMapper が Converter または ConversionService を要求していることがわかります。下記参照 -

09:54:59,488 - WARN main      org.springframework.integration.http.support.DefaultHttpHeaderMapper - Header 'X-    user_context' with value 'UserContextImpl@5e3ca754' will not be set since it is not a String     and no Converter is available. Consider registering a Converter with ConversionService     (e.g., <int:converter>)

どうすればいいですか?

ありがとう!

4

1 に答える 1

0

標準の HTTP ヘッダーは key:value 形式で、キーと値の両方が文字列です。オブジェクトを HTTP ヘッダー値として送信しようとしますが、これはあまり賢明ではありません (ヘッダーのサイズにいくつかの制限がある可能性があるため、ほとんど不可能です。たとえば、8KB Apache のデフォルト制限)。

次の 3 つのオプションがあります。

  1. HTTP 送信ゲートウェイを使用せず、代わりに JMS を使用することを検討してください (私の意見では最良のものです)。

  2. UserContextシリアル化するトランスフォーマーを追加しますString(比較的短い文字列であれば問題ありませんが、それ以外の場合はお勧めしません)

  3. Datatype Channel ConfigurationSpringリファレンス ドキュメントの セクションで説明されているように、カスタム コンバーター UserContext->String を実装します: http://static.springsource.org/spring-integration/reference/htmlsingle/#channel-configuration
于 2011-10-27T21:48:43.320 に答える