代码之家  ›  专栏  ›  技术社区  ›  Adam Crume

在Axis2中使用XML 1.1

  •  3
  • Adam Crume  · 技术社区  · 17 年前

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

    3 回复  |  直到 14 年前
        1
  •  1
  •   lavinio    17 年前

    你通过一个 InputStream 或 Reader ?如果是这样,您可以将源代码包装在另一个类中(例如 BufferedReader 工作),但使用它来删除不必要的字符。

        2
  •  1
  •   Michael Sharek    17 年前

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

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

        3
  •  0
  •   Dimitar II    8 年前

    还有一个选项——让解析器将输入视为XML1.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服务的情况。可能会出现副作用。