這是一個古老的問題,但看到我剛剛遇到同樣的事情時,我會發布我的解決方案。
我需要一個代理服務返回一個普通的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
。 另外需要通過添加以下到消息指從Axis2的配置(<ESB_ROOT>/repository/conf/axis2/axis2.xml
)對類格式化的文件的部分:
<messageFormatter contentType="application/xml" class="com.example.axis2.messageformatter.CustomApplicationXmlFormatter"/>
-1。答案並沒有真正回答原來的問題,甚至在與此相同的場地上也沒有答案。 – Kallja