在 Axis2 中使用 XML 1.1

发布于 2024-07-13 02:24:53 字数 202 浏览 5 评论 0原文

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

I have a web service and client that are passing around strings containing character references such as  (0x1A). These are invalid in XML 1.0 but valid in XML 1.1. Axis's XML parser is throwing exceptions because of these character references. Is there a way to force it to parse the response as XML 1.1, or to insert the XML declaration? (There currently isn't one.) I looked into using handlers, but my understanding is that they get invoked after the XML is already parsed.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

一身软味 2024-07-20 02:24:53

您是否传入 InputStreamReader ? 如果是这样,您可以将源代码包装在另一个类中(例如 BufferedReader 有效),但使用它来删除不必要的字符。

Are you passing in an InputStream or Reader? If so, you could wrap the source in another class (like BufferedReader works) but use it to drop the unnecessary characters.

甜是你 2024-07-20 02:24:53

我想你会经历一段非常艰难的时期。 我的理解是,WSDL 2.0 标准是建立在 XML 1.0 之上的。 那么您要调用哪种服务,它使用 WSDL(假设 XML 1.0)描述自身,然后开始向您发送包含 XML 1.1 字符的消息?

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

I think you're going to have a pretty tough time with this. My understanding is that the WSDL 2.0 standard is built on XML 1.0. So what kind of service are you calling that describes itself with WSDL (assuming XML 1.0) and then starts sending you messages with XML 1.1 characters in it?

When you define an Axis2 service, you can define what handlers it has in the services.xml file. For example on this page they've got a service that used the org.apache.axis2.receivers.RawXMLINOutMessageReceiver...I know that's not what you're trying to do but maybe it's a place to start looking or thinking.

我不是你的备胎 2024-07-20 02:24:53

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

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

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

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

There is one more option - to make the parser treat the input as XML 1.1.
Since Axis2 uses Woodstox parser, you can extend the WstxInputFactory and override method createPrivateConfig():

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

Then use that custom factory via system property: -Djavax.xml.stream.XMLInputFactory=mypackage.MyWstxInputFactory

Note that such workaround is only for cases when you absolutely cannot alter the buggy web service that produces invalid XML. It is possible to encounter side effects.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文