当前位置: 代码迷 >> java >> Jboss EAP 6.x上的org.springframework.ws和Xalan问题
  详细解决方案

Jboss EAP 6.x上的org.springframework.ws和Xalan问题

热度:86   发布时间:2023-08-02 11:08:31.0

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

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

部署时出现错误:

造成原因:java.lang.IllegalArgumentException:不支持:org.apache.xalan.processor.TransformerFactoryImpl.setAttribute(TransformerFactoryImpl.java:571)上的 (__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.org.springframework.xml.transform.TransformerFactoryUtils.newInstance(TransformerFactoryUtils.java:32)的[RELEASE.jar:] [org.springframework.ws.server.endpoint的spring-xml-2.4.4.RELEASE.jar:]。 .mapping.PayloadRootAnnotationMethodEndpointMapping。(PayloadRootAnnotationMethodEndpointMapping.java:58)[spring-ws-core-2.4.4.RELEASE.jar:] ...还有31个

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

我尝试遵循 以及解决方案,但是这两种方法都不适合我。

我还在redhat网站上找到了一些解决方案: : 但没有订阅,我没有访问权限...

和一个面临同样的问题? 在这种情况下也许有一些可行的解决方案? 预先感谢。

即使对于JBoss EAP 7.2我也有同样的问题

由于JBoss可以在JDK 6、7和8上运行,因此,所包含的Xalan不支持ACCESS_EXTERNAL_DTD因为它是在JDK 7中添加的。

您可以强制的JBoss使用的TransformerFactory从Oracle JDK 8设置变量transformerFactoryClasscom.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);
}
  相关解决方案