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

有帮助吗?

解决方案

您传递的是基因编码标签还是基因编码标签?如果是这样,您可以将源代码包装在另一个类中(例如InputStream起作用),但可以使用它来删除不必要的字符。

其他提示

我认为您将为此度过一段艰难的时光。我的理解是WSDL 2.0标准是建立在XML 1.0之上的。那么,您要调用哪种服务以WSDL(假设XML 1.0)描述自己,然后开始向您发送包含XML 1.1字符的消息?

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

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

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

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

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top