2016-12-16 7 views
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; 
} 

}

+0

この回答を確認http://stackoverflow.com/a/12948702/6371459私はそうあなた – pedrofb

+0

おかげと同じだと思いますそれは働いた。私はApacheのドキュメンテーションの改善を提案します。 – vinr

+0

こんにちはPedroft ..提案は動作しましたが、CacheOutputStream内にラップされた出力ストリーム(LoadingByteArrayOutputStream)は2046バイトのデータのみを処理するように制限されています。処理するデータが膨大な場合は、出力ストリームにデータがないメッセージが返されます。OutputStreamのサイズ制限を変更しても、それは役に立ちませんでした。 – vinr

答えて

0

stackoverflow.com/a/12948702/6371459

関連する問題