在Axis2中使用XML1.1

在Axis2中使用XML1.1,xml,web-services,axis2,xml-1.1,Xml,Web Services,Axis2,Xml 1.1,我有一个web服务和客户端,它们传递包含字符引用的字符串,如;(0x1A)。这些在XML 1.0中无效,但在XML 1.1中有效。Axis的XML解析器由于这些字符引用而引发异常。有没有办法强迫它将响应解析为XML1.1,或者插入XML声明?(目前还没有。)我研究了如何使用处理程序,但我的理解是,它们是在XML已经被解析后被调用的。我想这将是一个非常艰难的过程。我的理解是,WSDL2.0标准是基于XML1.0构建的。那么,您正在调用哪种服务,它使用WSDL(假设为XML 1.0)描述自己

我有一个web服务和客户端,它们传递包含字符引用的字符串,如;(0x1A)。这些在XML 1.0中无效,但在XML 1.1中有效。Axis的XML解析器由于这些字符引用而引发异常。有没有办法强迫它将响应解析为XML1.1,或者插入XML声明?(目前还没有。)我研究了如何使用处理程序,但我的理解是,它们是在XML已经被解析后被调用的。

我想这将是一个非常艰难的过程。我的理解是,WSDL2.0标准是基于XML1.0构建的。那么,您正在调用哪种服务,它使用WSDL(假设为XML 1.0)描述自己,然后开始向您发送包含XML 1.1字符的消息


定义Axis2服务时,可以在services.xml文件中定义该服务的处理程序。例如,他们有一个使用org.apache.axis2.receivers.RawXMLINOutMessageReceiver的服务……我知道这不是你想要做的,但也许这是一个开始寻找或思考的地方。

你是在传递
输入流
还是
阅读器
?如果是这样,您可以将源代码包装到另一个类中(如
BufferedReader
works),但可以使用它删除不必要的字符。

还有一个选项-使解析器将输入视为XML 1.1。 由于Axis2使用Woodstox解析器,因此可以扩展
WstxInputFactory
并重写方法
createPrivateConfig()

然后通过系统属性使用该自定义工厂:-Djavax.xml.stream.XMLInputFactory=mypackage.MyWstxInputFactory


请注意,这种解决方法仅适用于绝对无法更改产生无效XML的错误web服务的情况。可能会遇到副作用。

有一大堆问题。基本上,这可以归结为一个事实,即微软的Word“智能报价”和EBCDIC并没有混合使用。抖动它不应该返回0x1A字符,但它是。我们应该能够通过一个有趣的角色而不是完全死去来更优雅地处理它。
@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}