Java XSL FO在JBOSS AS 7中的XSLT转换失败
我有以下代码Java XSL FO在JBOSS AS 7中的XSLT转换失败,java,xslt,jboss7.x,xsl-fo,Java,Xslt,Jboss7.x,Xsl Fo,我有以下代码 SAXTransformerFactory stfactory; stfactory = (SAXTransformerFactory) TransformerFactory.newInstance(); /// ClassLoaderUriResolver is another class. stfactory.setURIResolver(new ClassLoaderUriResolver()); InputStream is = this.getClass().g
SAXTransformerFactory stfactory;
stfactory = (SAXTransformerFactory) TransformerFactory.newInstance();
/// ClassLoaderUriResolver is another class.
stfactory.setURIResolver(new ClassLoaderUriResolver());
InputStream is = this.getClass().getClassLoader().getResourceAsStream("xsl/Hello.xsl");
StreamSource streamSource = new StreamSource(is);
mergeHandler = stfactory.newTransformerHandler(streamSource);
XMLReader xmlReader = XMLReaderFactory.createXMLReader();
还有一些代码
问题就在眼前
mergeHandler=stfactory.newTransformerHandler(streamSource)强>
当我在JBossIDE中以独立JAVA程序的形式使用相同的JAR集运行此程序时
- xalan-2.7.0.jar
- xercesImpl-2.7.1.jar
- xml-api-1.3.04.jar
- xml-api-ext-1.3.04.jar
org.apache.xalan.transformer.TransformerHandlerImpl 而我的XLST翻译作为一个简单的java程序运行良好 其中,当它作为7容器在Jboss上运行时,它的代码是相同的 我看到调用stfactory.newTransformerHandler(streamSource) 返回值
org.apache.xalan.transformer.TransformerIdentityImpl(不是TransformerHandlerImpl) 因此,当我作为Web应用程序的一部分在Jboss As 7容器上运行时,XSLT转换没有发生,我没有看到任何错误。我的XLS FO文档未翻译 如何强制代码使用org.apache.xalan.transformer.TransformerHandlerImpl 在jboss中,除了我们可以排除的模块之外,还有一个jar位于根C:\jboss-eap-6.0\jboss-modules.jar。在这个jar中有一个名为“\uuuuRedirected”的文件夹,其中包含一个类\uuuTransformerFactory.class,该类包含以下代码
Class clazz = __RedirectedUtils.loadProvider(id, javax/xml/transform/TransformerFactory, loader);
这将强制从C:\jboss-eap-6.0/jboss-modules.jar加载“org.apache.xalan.processor.TransformerFactoryImpl”
但是,这不是一个模块,因此我不能使用jboss-deployment-structure.xml排除它,尽管我已经排除了以下针对Xalan、Xercel和XMLAPI的jboss模块。因为我们在EAR库中有一个特定的JAR来满足这个需求
jboss-deployment-structure.xml
<jboss-deployment-structure xmlns:p="urn:jboss:deployment-structure:1.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<deployment>
<exclusions>
<module name="org.apache.xerces" />
<module name="org.apache.xalan" />
<module name="org.apache.xml-resolver" />
</exclusions>
</deployment>
并补充说
Class clazz = Class.forName("org.apache.xalan.processor.TransformerFactoryImpl");
stfactory = (SAXTransformerFactory) clazz.newInstance();
现在我明白了
- org.apache.xalan.processor.TransformerFactoryImpl正在从C:/jboss-eap-6.0/standalone/deployments/TST.ear/lib/xalan-2.7.0.jar加载
- 调用stfactory.newTransformerHandler(streamSource)返回“org.apache.xalan.transformer.TransformerHandlerImpl”,而不是“org.apache.xalan.transformer.TransformerIdentityImpl”
但无论如何,当前的修复解决了这个问题,它只发生在JBossApplicationServer7上。在Websphere 7.0中,以及在我作为独立java程序运行它时,代码都可以正常工作。我猜是一个java问题。在执行时,这两个类的类路径是什么?基于这个答案,我假设您不理解自己在做什么。这个问题很简单,任何懂Java的人都知道答案。再试一次。。。我问“这两个的类路径是什么”,我没有问你使用的是什么版本的Java。下面是我的类路径中JAR的完整列表。version.JAXP=1.1或更高版本java.ext.dirs=C:\java\jdk1.7.0_25\jre\lib\ext version.xerces2=Xerces-J 2.7.1 version.xerces1=不存在版本。xalan2_2=Xalan java 2.7.0 java.version=1.7.0_25 version.DOM=2.0 version.SAX=2.0 version.xalan2x=Xalan-java 2.7.0 java.class.path=C:\lib\Xalan-2.7.0.0.jar;C:\lib\batik-util-1.7.jar;C:\lib\avalon-framework-impl-4.3.1.jar;C:\lib\fop-0.95.jar;C:\lib\xercesImpl-2.7.1.jar;C:\lib\xml-api-1.3.04.jar;C:\lib\xml-api-ext-1.3.04.jar C:\lib\xmlgraphics-commons-1.3.1.jarKevin,谢谢。我在班级道路上挖了更多的东西,我让它工作起来了。请看下面的答案。再次感谢。
Class clazz = Class.forName("org.apache.xalan.processor.TransformerFactoryImpl");
stfactory = (SAXTransformerFactory) clazz.newInstance();