Web サービス経由でクライアントに返される SOAPMessage を作成しています。(TCPMon を使用して) ローカライズされたテスト中に、この SOAPMessage が応答として表示されますが、Web サービスに失敗します。
少しの診断に Wireshark を使用したところ、1024 文字目に改行が追加されているため、この応答 xml(SOAPMessage) が破損していることがわかりました。応答が正しく形成されているかどうかはわかりませんが、何らかの理由で Wireshark が改行を追加するか、この応答が本当に破損します。私はトムキャットを使用しています
コードがどのように構成されているかについてのアイデアを与えるには、次のようなものです-
フローのある時点で、次のように設定しました(これらの2行を削除しましたが、結果は同じです)
//httpservletResponse.setContentType("text/html; charset=UTF-8");
//httpservletResponse.setCharacterEncoding("UTF-8");
フローの後半で、次のことを行います
try {
servletOS = httpservletResponse.getOutputStream();
soapMessage.writeTo(servletOS);
servletOS.close();
} finally {
httpservletResponse.flushBuffer();
}
上記のコードは、基本的な理解を提供するためのものです。正常にコンパイルされ、すべてのユーザー定義値が適切に設定されていることを考慮してください。正確な問題がどこにあるのか、実際の SOAPMessage はそのエンコーディングなどのために絞り込むのに苦労していますか? ストリームがフラッシュ/クローズされているなど?クライアント?
より多くの情報を提供できれば幸いです。
また、SAAJ を使用した同様のプロセスは、同じ環境で問題なく機能することにも注意してください。
これが私の応答を構築する方法です-
MessageFactory messageFactory = MessageFactory.newInstance();
SOAPMessage soapMessage = messageFactory.createMessage();
SOAPPart responseSOAPPart = faultMessage.getSOAPPart();
SOAPEnvelope responseEnvelope = responseSOAPPart.getEnvelope();
soapMessage.setProperty(SOAPMessage.CHARACTER_SET_ENCODING, "UTF-8");
soapMessage.setProperty(SOAPMessage.WRITE_XML_DECLARATION, "true");
responseEnvelope.addNamespaceDeclaration("xsd", "http://........");
responseEnvelope.addNamespaceDeclaration("wsa", "http://......");
// and others
SOAPHeader soapHeader = responseEnvelope.getHeader();
// creating various SOAPHeaderElements viz. wsa:To, wsa:Action, wsa:From etc.
// and adding these to the SOAPHeader
// Adding SOAPBody
SOAPBody body = soapMessage.getSOAPBody();
// add body element
soapMessage.saveChanges()