【问题标题】:org.springframework.ws and Xalan problem on Jboss EAP 6.xJboss EAP 6.x 上的 org.springframework.ws 和 Xalan 问题
【发布时间】:2019-07-16 07:18:09
【问题描述】:

您好,我在更新 org.springframework.ws - spring-xml 后遇到了 Jboss EAP 6.x 的问题

在我的项目中,我在 2.7.2 版本中使用了 Xalan,现在我想将 org.springframework.ws - spring-xml 从 2.4.0 版本更新到 2.4.4 并在 Jboss EAP 6 上上传我的应用程序的战争。 x

部署时出现错误:

导致 作者:java.lang.IllegalArgumentException:不支持: http://javax.xml.XMLConstants/property/accessExternalDTD 在 org.apache.xalan.processor.TransformerFactoryImpl.setAttribute(TransformerFactoryImpl.java:571) 在 __redirected.__TransformerFactory.setAttribute(__TransformerFactory.java:169) [jboss-modules.jar:1.3.5.Final-redhat-1] 在 org.springframework.xml.transform.TransformerFactoryUtils.defaultSettings(TransformerFactoryUtils.java:56) [spring-xml-2.4.4.RELEASE.jar:] 在 org.springframework.xml.transform.TransformerFactoryUtils.newInstance(TransformerFactoryUtils.java:32) [spring-xml-2.4.4.RELEASE.jar:] 在 org.springframework.ws.server.endpoint.mapping.PayloadRootAnnotationMethodEndpointMapping.(PayloadRootAnnotationMethodEndpointMapping.java:58) [spring-ws-core-2.4.4.RELEASE.jar:] ... 31 更多

经过快速调查,我发现在 spring-xml 版本 2.4.4 中它是新的 TransformerFactoryUtils ,它使用与 Xalan 相同的包中的 TransformerFactory ,这会导致类加载器出现问题。

我尝试遵循TransformerFactory and Xalan Dependency Conflictxalan and xerces in jboss eap 6.0.1 的解决方案 但两者都不适合我。

我还在 redhat 网站上找到了一些解决方案:https://access.redhat.com/solutions/1410603 但没有订阅我无法访问它...

还有一个人面临同样的问题?也许有一些可能在这种情况下有效的解决方案?非常感谢。

【问题讨论】:

  • 我也遇到同样的问题

标签: java spring jboss jboss-eap-6 xalan


【解决方案1】:

即使对于 JBoss EAP 7.2

,我也有同样的问题

由于 JBoss 在 JDK 6、7 和 8 上运行,这就是为什么包含的 Xalan 没有 ACCESS_EXTERNAL_DTD 支持,因为它是在 JDK 7 中添加的。

您可以强制 JBoss 使用 Oracle JDK 8 中的 TransformerFactory。将变量 transformerFactoryClass 设置为 com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl。请参阅下面的快照。

final Jaxb2Marshaller marshaller = new Jaxb2Marshaller();

final WebServiceTemplate webServiceTemplate = new WebServiceTemplate();
webServiceTemplate.setDefaultUri(uri);
webServiceTemplate.setMarshaller(marshaller);
webServiceTemplate.setUnmarshaller(marshaller);

try {
    logger.debug("Getting class for name: {}", transformerFactoryClass);
    final Class<?> clazz = Class.forName(transformerFactoryClass);
    Assert.isAssignable(TransformerFactory.class, clazz, "Must be instance of Class<? extends TransformerFactory>");
    webServiceTemplate.setTransformerFactoryClass((Class<? extends TransformerFactory>) clazz);
} catch (ClassNotFoundException e) {
    logger.error("Unable to get class for name: {}", transformerFactoryClass);
    throw new IllegalArgumentException(e);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-10-04
    • 1970-01-01
    • 2015-07-23
    • 2015-05-05
    • 2011-05-04
    • 1970-01-01
    • 2019-06-01
    相关资源
    最近更新 更多