【问题标题】:Can Apache Wink ignore unprintable xml characters?Apache Wink 可以忽略不可打印的 xml 字符吗?
【发布时间】:2012-12-21 06:46:48
【问题描述】:

我的应用程序使用 Wink 和 JDK (1.6) 中内置的 JAXB 提供程序支持 REST API。 有时我会收到包含控制字符的 PUT 请求。

就我的应用程序而言,控制字符构成有效且有意义的输入。 但是,应用程序抛出了一个臭名昭著的异常,说它无法消化这些字符:

Message: An invalid XML character (Unicode: 0x13) was found in the element content of the document.]
at org.apache.wink.common.internal.providers.entity.xml.JAXBXmlProvider.readFrom(JAXBXmlProvider.java:107)
at org.apache.wink.server.internal.registry.ServerInjectableFactory$EntityParam.getValue(ServerInjectableFactory.java:190)
at org.apache.wink.common.internal.registry.InjectableFactory.instantiate(InjectableFactory.java:67)
at org.apache.wink.server.internal.handlers.CreateInvocationParametersHandler.handleRequest

可能没有办法告诉 JAXB 提供者忽略这些字符(因为在某些时候我将不得不解析 Xml,而非法就是非法..)。 我怎样才能使这项工作?有没有办法指示 Rest 客户端在发送这些字符之前对其进行转义?

【问题讨论】:

  • 控制字符为not allowed in XML,因此您的数据不是 XML。尝试定义 它就像 X 除了 Y 的麻烦在于,很难定义一个 API,其中 Y 可以是个人认为应该是的任何东西。 JAXB 不太可能容纳您。如果可以接受,您可以使用过滤器去除非法字符;否则,您将不得不对合法字符数据中的数据进行编码或转义(例如使用 Base64。)
  • @McDowell 请作为答案发布,我会接受。谢谢。
  • @McDowell 可以在 JSON 中使用吗?
  • 唉,不——不能按照the specification将控制字符编码为JSON字符串

标签: xml jaxb control-characters apache-wink


【解决方案1】:

控制字符是not allowed in XML,因此您的数据不是 XML。 它就像 X 除了 Y 的问题在于,很难定义一个 API,其中 Y 可以是个人认为应该是的任何东西。 JAXB 不太可能容纳您。如果可以接受,您可以使用过滤器去除非法字符;否则您将不得不对合法字符数据中的数据进行编码或转义(例如使用Base64。)

【讨论】:

  • 我会写一个过滤器。给定编码和 ServletInputStream,有没有一种简单的方法可以确定我刚刚读取的 char 是否是控制字符?
  • 您需要从declaration 确定文档编码(另请参见appendix F)并对其进行解码以确定是否支持code point。您可以针对 XML 规范中的 character ranges 进行测试。然后将您自己的流提供给前向链。
  • 假设我确定编码是 UTF8。我看到 Character 类包含一个方法 isISOControl,它有一个输入 Unicode 代码点的版本。它会起作用还是我需要再次转换?
  • Character.isISOControl('\n'); 计算结果为真,所以这不是您想要的。之前已经提出过这个问题 - 例如,请参阅 removing invalid XML characters from a string in java。在 servlet 过滤器中从类似 XML 的数据中过滤无效字符范围的问题可能值得提出自己的问题(尽管如果回答者质疑为什么要将无效数据发送到此类服务而不是使用更合适的格式,请不要感到惊讶。 )
【解决方案2】:

有问题的字符不是“不可打印的 XML 字符”。它们是不可打印的非 XML 字符。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多