当前位置: 首页 > 知识库问答 >
问题:

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

傅丁雷
2023-03-14

在部署时,我得到了错误:

由:java.lang.IllegalArgumentException:不受支持:http://javax.xml.xmlConstants/property/accessExternalDTD at org.apache.xalan.processor.transformerFactoryImpl.setAttribute(transformerFactoryImpl.setAttribute(transformerFactoryImpl.java:571)at__redirected.__transformerFactory.setAttribute ingframework.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-XML2.4.4版本中,新的TransformerFactoryUtils使用了与Xalan相同包中的TransformerFactory,这导致了ClassLoader的问题。

我试图遵循TransformerFactory和Xalan Dependency Conflict以及jboss EAP6.0.1中的Xalan和xerces的解决方案,但这两种解决方案都不适用于我。

我还在redhat网站上找到了一些解决方案:https://access.redhat.com/solutions/1410603,但如果没有订阅,我就无法访问它...

一个人面临同样的问题?也许在这种情况下有什么解决办法?提前大谢。

共有1个答案

哈泰
2023-03-14

即使对于JBoss EAP7.2,我也有同样的问题

由于JBoss运行在JDK6、7和8上,所以包含的Xalan没有JDK7中添加的access_external_dtd支持。

您可以强制JBoss使用Oracle JDK8中的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);
}
 类似资料:
  • xalan是一套xslt处理器(有C和JAVA语言两种版本),用来将XML文件转换为HTML,TEXT和XML等其他类型文件格式。支持XSLT1.0和XPATH 1.0版。开发人员可以通过命令行方式或在JAVA APPLET和SERVLET中使用,并可以作为自己开发的应用程序的类库使用。xalan-java实现的是transformation API for XML(TRaX)接口,此接口为jaxp1.2标准中的一部分。

  • 我有以下代码: 这正常工作。但是,我还需要将Xalan作为依赖项添加到pom.xml中,当我这样做时,上面的代码会抛出一个错误:

  • 问题内容: 我的教授最近说,尽管并且显然会给出相同的结果,但是在JVM中实现它们的方式有所不同。这是什么意思?编译器是否不像:嘿,我明白了,所以我将其切换到并继续吗? 我怀疑在效率方面是否存在差异,但是如果在这些情况下组装会有所不同,我将感到惊讶… 问题答案: 我的教授最近说,尽管x = x + 1和x ++显然会给出相同的结果 我想你的教授也许是故意 的-after 和will 的价值是相同的

  • 在5.3.X系列的pc门户访问5.2.X系列的pc功能 在UI2下的菜单配置文件中,配置5.2.X的功能树,格式同5.2.X系列的菜单配置,注:device=pc,配置如下: <item label="组织管理" process="/SA/OPM/organization/organizationProcess" activity="mainActivity" u

  • 在OS X El Capitan上安装AndroidStudio 2.0:如果我从http://www.oracle.com/technetwork/java/javase/downloads/jre7-downloads-1880261.html安装JRE 7,我将不会收到公共更新;如果我安装了JRE 8,Android Studio抱怨它无法使用安全连接接收升级: 有没有一种方法可以让我们相信

  • 我不知道为什么我的路径在MAC OS X 10.9.5上哪里可以找到java没有得到尊重。 在四处搜索后,我发现从命令行引用的Java版本位于/usr/bin/Java,而浏览器使用的Oracle工具引用的Java版本在系统首选项中可见 命令行选择1.6.0\u 65,即使它是针对/usr/bin版本,而不是针对/Library/Internet\plugins/JavaAppletPlugin版