イメージ ホスト サービスの応答のコンテンツ タイプを設定しようとしているので、次のような http:inbound-gateway があります。
<int-http:inbound-gateway request-channel="receiveChannel"
reply-channel="responseChannel"
path="/profile/photo"
mapped-response-headers="Content-Type"
message-mappers="messageConverterList"
supported-methods="GET"/>
... そして、次のようなサービス アクティベーター:
<int:service-activator
input-channel="receiveChannel"
output-channel="imageResponseChannel"
expression="@profileService.getPhoto(payload.userId)"/>
... jpeg 画像データの byte[] を返します。次のようなヘッダーエンリッチャーがあります。
<int:header-enricher
input-channel="imageResponseChannel"
output-channel="responseChannel">
<int:header
name="Content-Type"
expression="'image/jpeg'"/>
</int:header-enricher>
しかし、プロジェクトを実行すると、次のようなヘッダーを含む応答が返されます。
< HTTP/1.1 200 OK
< Set-Cookie: JSESSIONID=9uw5c136fia6s9ivxgivy1yc;Path=/
< Expires: Thu, 01 Jan 1970 00:00:00 GMT
< Content-Type: image/jpeg
< Content-Type: application/octet-stream
< Content-Length: 6563
< Server: Jetty(8.1.3.v20120416)
content-type が繰り返されていることに注意してください。ただし、mapped-response-headers はメッセージからヘッダーを取得する必要があり、ペイロードから判断するのではないと理解しています。
何か案は?前もって感謝します!
*編集: 以下のカスタム メッセージ マッパーを参照するように受信ゲートウェイを変更しましたが、それでも同じ結果が得られます。
<util:list id="messageConverterList">
<bean class="org.springframework.http.converter.ByteArrayHttpMessageConverter">
<property name="supportedMediaTypes">
<list><value>image/jpeg</value></list>
</property>
</bean>
</util:list>
*編集 2: メッセージ コンバーターである必要がありましたが、src ではなくターゲットのファイルを変更したため、エラーは発生しませんでした。私は修正を行い、これは私が得る出力です:
< HTTP/1.1 200 OK
< Content-Type: image/jpeg
< Content-Type: image/jpeg
< Content-Length: 209582
< Server: Jetty(6.1.10)
より良いですが、完璧ではありません。問題の簡単な再現プロジェクトは次のとおりです: http://dl.dropbox.com/u/92800052/http.tar.gz
あなたはそれを実行することができます
mvn package jetty:run
そして出力を見てください
curl -v http://localhost:8080/http/photo > /dev/null