您好我在更新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 Conflict和xalan and xerces in jboss eap 6.0.1的解决方案,但两者都不适合我。
我还在redhat网站上找到了一些解决方案:https://access.redhat.com/solutions/1410603但没有订阅我没有访问权限...
一个面临同样的问题?也许有一些解决方案可能适用于这种情况?非常感谢提前。
即使对于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);
}