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

问题描述 投票:0回答:1

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

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

部署时出现错误:

引起:java.lang.IllegalArgumentException:不支持:位于__redirected的org.apache.xalan.processor.TransformerFactoryImpl.setAttribute(TransformerFactoryImpl.java:571)的http://javax.xml.XMLConstants/property/accessExternalDTD .__ TransformerFactory.setAttribute(__ TransformerFactory.java:169)[jboss-modules。 jar:1.3.5.Final-redhat-1]在org.springframework的org.springframework.xml.transform.TransformerFactoryUtils.defaultSettings(TransformerFactoryUtils.java:56)[spring-xml-2.4.4.RELEASE.jar:]。 xml.transform.TransformerFactoryUtils.newInstance(TransformerFactoryUtils.java:32)[spring-xml-2.4.4.RELEASE.jar:] at 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个回答
0
投票

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

由于JBoss运行在JDK 6,7和8上,这就是为什么包含的Xalan没有像JDK 7中那样添加ACCESS_EXTERNAL_DTD的原因。

您可以强制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);
}
© www.soinside.com 2019 - 2024. All rights reserved.