【发布时间】: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