我的应用程序支持使用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客户端转义这些字符?
答案 0 :(得分:2)
控制字符为not allowed in XML,因此您的数据不是XML。除了Y 之外,的问题就像X一样,很难定义一个API,其中Y可以是个人认为应该是的。 JAXB不太可能适应您。如果可以接受,您可以使用过滤器去除非法字符;否则,您必须编码或转义合法字符数据中的数据(例如,使用Base64。)
答案 1 :(得分:2)
有问题的字符不是“不可打印的XML字符”。它们是不可打印的非XML字符。