0
アウトバウンドインターセプタを記述してレスポンスを変更する必要があります。 私はアウトバインドレスポンスのためのインターセプターを書いています。 SENDフェーズでoutStreamが変更できないため、SENDフェーズでインターセプタが追加されました。Apache CXFインターセプタ:Outインターセプタのレスポンスストリームを変更できません
データの新しいバイトでorg.apache.cxf.message.Messageオブジェクトの既存の出力ストリームを変更しようとしましたが、Messageオブジェクトに新しいOutputStreamを追加しようとしました。しかし、誰も働いていませんでした。
誰かが同じものに直面しているかどうか、解決策がある場合は教えてください。
ありがとうございました。
public class SResponseInterceptor2 extends AbstractPhaseInterceptor<Message> {
private static final Logger LOGGER = LogManager.getLogger(SResponseInterceptor2.class.getName());
public SResponseInterceptor2() {
super(Phase.SEND);
addBefore(MessageSenderInterceptor.class.getName());
LOGGER.info(">>>>>>>>>>>>>>>>>>>>>>>>");
}
public void handleMessage(Message message) throws Fault {
OutputStream outputStream = message.getContent(OutputStream.class);
if(outputStream!=null && outputStream instanceof CacheAndWriteOutputStream){
CacheAndWriteOutputStream cachedOutputStream = (CacheAndWriteOutputStream)outputStream;
try{
String inputMessage = new String(cachedOutputStream.getBytes());
cachedOutputStream.flush();
byte[] bytes = changeResponse(inputMessage).getBytes();
cachedOutputStream.write(bytes);
/* Tried adding a new Stream with the updated data too
OutputStream modifiedOutputStream = new ByteArrayOutputStream();
CacheAndWriteOutputStream cWStream = new CacheAndWriteOutputStream(modifiedOutputStream);
cWStream.write(bytes, 0, bytes.length);
message.setContent(OutputStream.class, cWStream);
*/
message.setContent(OutputStream.class, cachedOutputStream);
} catch (IOException ioe) {
LOGGER.error("Error while changing the Response ." + ioe.getMessage());
ioe.printStackTrace();
}finally{
}
private String changeResponse(String responseMessage) {
responseMessage = responseMessage.replaceAll("sResponse", "sResponse??????");
LOGGER.info("After change message is " + responseMessage);
return responseMessage;
}
}
この回答を確認http://stackoverflow.com/a/12948702/6371459私はそうあなた – pedrofb
おかげと同じだと思いますそれは働いた。私はApacheのドキュメンテーションの改善を提案します。 – vinr
こんにちはPedroft ..提案は動作しましたが、CacheOutputStream内にラップされた出力ストリーム(LoadingByteArrayOutputStream)は2046バイトのデータのみを処理するように制限されています。処理するデータが膨大な場合は、出力ストリームにデータがないメッセージが返されます。OutputStreamのサイズ制限を変更しても、それは役に立ちませんでした。 – vinr