これは古い質問ですが、今同じことに遭遇したので、解決策を投稿します。
SOAP エンベロープを含まないプレーンな XML メッセージを返すプロキシ サービスを用意する必要がありました。application/xml
およびtext/xml
(org.apache.axis2.transport.http.ApplicationXMLFormatter
およびorg.wso2.carbon.relay.ExpandingMessageFormatter
それぞれ) コンテンツ タイプを使用してみましたが、役に立ちませんでした。これらのコンテンツ タイプのいずれも、XML 宣言を含むメッセージを返しませんでした。
解決策は、カスタム メッセージ フォーマッタを作成することです。org.apache.axis2.transport.http.ApplicationXMLFormatter
これは、XML 宣言をメッセージに適切に書き込むように動作する私の実装です。
package com.example.axis2.messageformatter;
import java.io.IOException;
import java.io.OutputStream;
import org.apache.axiom.om.OMOutputFormat;
import org.apache.axis2.AxisFault;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.transport.http.ApplicationXMLFormatter;
public class CustomApplicationXmlFormatter extends ApplicationXMLFormatter {
@Override
public void writeTo(MessageContext context, OMOutputFormat format, OutputStream out, boolean preserve) throws AxisFault {
String xmlHeader = "<?xml version=\"1.0\" encoding=\"" + format.getCharSetEncoding() + "\"?>";
try {
out.write(xmlHeader.getBytes());
} catch (IOException e) {
throw new AxisFault("Unable to write XML declaration to output stream.", e);
}
super.writeTo(context, format, out, preserve);
}
}
jar ファイル内のクラスを にドロップできます<ESB_ROOT>/repository/components/lib
。<ESB_ROOT>/repository/conf/axis2/axis2.xml
さらに、次をファイルのメッセージ フォーマッタ部分に追加して、axis2 構成 ( ) からクラスを参照する必要があります。
<messageFormatter contentType="application/xml" class="com.example.axis2.messageformatter.CustomApplicationXmlFormatter"/>