你好,我在更新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 Conflict和xalan and xerces in jboss eap 6.0.1的解决方案 但两者都不适合我。
我还在redhat网站上找到了一些解决方案:https://access.redhat.com/solutions/1410603,但是没有订阅,我就没有访问权限...
一个人面临同样的问题吗?在这种情况下也许有一些可行的解决方案?预先感谢。
答案 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