2013年9月22日下午5:15:00 org.glassfish.jersey.message.internal.SecureSaxParserFactory
WARNING: JAXP feature XMLConstants.FEATURE_SECURE_PROCESSING cannot be set on a SAXParserFactory. External general entity processing is disabled but other potential security related features will not be enabled.
org.xml.sax.SAXNotRecognizedException: Feature 'http://javax.xml.XMLConstants/feature/secure-processing' is not recognized.
at org.apache.xerces.parsers.AbstractSAXParser.setFeature(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.setFeatures(Unknown Source)
at org.apache.xerces.jaxp.SAXParserImpl.<init>(Unknown Source)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.newSAXParserImpl(Unknown Source)
at org.apache.xerces.jaxp.SAXParserFactoryImpl.setFeature(Unknown Source)
at org.glassfish.jersey.message.internal.SecureSaxParserFactory.<init>(SecureSaxParserFactory.java:107)...
我可以用
config.getFeatures().put(FeaturesAndProperties.FEATURE_DISABLE_XML_SECURITY, true);
要在 Jersey1.x 上避免此警告消息,但是当我迁移到 Jersey2.x 时,没有此功能设置。 我怎么能在Jersey2.x上再次避免它呢? 谢谢!
答案 0 :(得分:3)
在JAXP 1.3中,它与Java 1.5捆绑在一起并作为选项提供 在早期版本中,您可以限制所有这些潜在的溢出 设置SAX功能 http://javax.xml.XMLConstants/feature/secure-processing (XMLConstants.FEATURE_SECURE_PROCESSING)。一旦你设定了那个 功能,任何过长的结构 - 是否太多 元素中的属性或元素名称中的字符太多 - 将被视为良好的形成错误。这意味着你可能会结束 拒绝一些真正完善的文件;但是,默认 值非常大,可以处理大多数现实文档。
在Jersey2.x中,要检查是否禁用此功能: org.glassfish.jersey.message.internal.AbstractXmlFactory boolean isXmlSecurityDisabled(){ 返回PropertiesHelper.isProperty(config.getProperty(MessageProperties.XML_SECURITY_DISABLE)); } 我们可以发现Jersey使用MessageProperties.XML_SECURITY_DISABLE参数来检查此设置。
所以,我们可以单独设置它: 服务器:
@ApplicationPath("/*")
public class XXXResourceConfig extends ResourceConfig {
public XXXResourceConfig() {
packages("xxx.yyy.zzz");
property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE);
}
}
客户端:
ClientConfig config = new ClientConfig();
...
config.property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE);
答案 1 :(得分:1)
feuyeux的代码工作正常。感谢。
JAX-RS客户端代码:
Client client = ClientBuilder.newClient();
client.property(MessageProperties.XML_SECURITY_DISABLE, Boolean.TRUE);
client.target("http://localhost:7101/helloword/rest").path("dummy").request(MediaType.APPLICATION_JSON).get(String.class);
答案 2 :(得分:0)
我确信在这种情况下上述答案非常好。但为了完整起见,我添加了我在调查时发现的内容。根据{{3}},xerces
的旧版本可能会导致问题。它可以被其他依赖项隐式添加,并且需要在这些情况下被排除。