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

时间:2019-02-22 08:31:48

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

你好,我在更新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上上传我的应用程序的war。 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,但是没有订阅,我就没有访问权限...

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

1 个答案:

答案 0 :(得分:0)

即使对于 JBoss EAP 7.2

,我也遇到相同的问题

由于JBoss在JDK 6、7和8上运行,因此,所包含的 Xalan 不具有import groovy.lang.GroovyObject; import groovy.lang.MetaClass; import java.io.Serializable; import java.util.Set; import javax.persistence.Column; import javax.persistence.Entity; import javax.persistence.GeneratedValue; import javax.persistence.GenerationType; import javax.persistence.Id; import javax.persistence.OneToMany; import org.codehaus.groovy.runtime.callsite.CallSite; import org.codehaus.groovy.runtime.typehandling.DefaultTypeTransformation; import org.codehaus.groovy.runtime.typehandling.ShortTypeHandling; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; import org.hibernate.annotations.Nationalized; @Entity public class Client implements Serializable, GroovyObject { private static final long serialVersionUID = 1L; @Id @GeneratedValue(strategy=GenerationType.IDENTITY) private Long id; @Nationalized @Column(nullable=false, unique=true) private String name; @Column(nullable=false) private boolean active; @Nationalized @Column(nullable=false, unique=true) private String externalId; @Fetch(FetchMode.SELECT) @OneToMany(targetEntity=RuleSet.class, mappedBy="client", cascade={javax.persistence.CascadeType.ALL}) private Set<RuleSet> ruleSets; public Client(String name, boolean active, String externalId) { MetaClass localMetaClass = $getStaticMetaClass();this.metaClass = localMetaClass;String str1 = name;this.name = ((String)ShortTypeHandling.castToString(str1)); boolean bool = active;this.active = DefaultTypeTransformation.booleanUnbox(Boolean.valueOf(bool)); String str2 = externalId;this.externalId = ((String)ShortTypeHandling.castToString(str2)); } } 支持,因为它是在 JDK 7 中添加的。 >。

您可以强制JBoss使用Oracle JDK 8中的 TransformerFactory 。将变量ACCESS_EXTERNAL_DTD设置为transformerFactoryClass。请参见下面的快照。

com.sun.org.apache.xalan.internal.xsltc.trax.TransformerFactoryImpl