3

我有一个 Web 服务和客户端,它们正在传递包含字符引用的字符串,例如  (0x1A)。这些在 XML 1.0 中无效,但在 XML 1.1 中有效。由于这些字符引用,Axis 的 XML 解析器会抛出异常。有没有办法强制它将响应解析为 XML 1.1,或者插入 XML 声明?(目前没有。)我研究过使用处理程序,但我的理解是它们在 XML 已经被解析之后被调用。

4

3 回答 3

1

我想你会在这方面度过一段艰难的时光。我的理解是 WSDL 2.0 标准是建立在 XML 1.0 之上的。那么,您调用的是哪种服务,它使用 WSDL(假设 XML 1.0)来描述自己,然后开始向您发送包含 XML 1.1 字符的消息?

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

于 2009-01-21T20:26:38.690 回答
1

你是在传递一个InputStreamorReader吗?如果是这样,您可以将源代码包装在另一个类中(如BufferedReader作品),但使用它来删除不必要的字符。

于 2009-10-01T12:57:06.437 回答
0

还有另一种选择 - 让解析器将输入视为 XML 1.1。由于 Axis2 使用 Woodstox 解析器,您可以扩展WstxInputFactoryand override 方法createPrivateConfig()

@Override
public ReaderConfig createPrivateConfig() {
    ReaderConfig config = super.createPrivateConfig();
    config.enableXml11(true);
    return config;
}

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

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

于 2018-03-20T13:58:13.587 回答