这是一个古老的问题,但看到我刚刚遇到同样的事情时,我会发布我的解决方案。
我需要一个代理服务返回一个普通的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