Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/370.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 在Jetty上生成XML中的独立参数,但在JBOSS上不生成_Java_Xml_Xslt_Jetty - Fatal编程技术网

Java 在Jetty上生成XML中的独立参数,但在JBOSS上不生成

Java 在Jetty上生成XML中的独立参数,但在JBOSS上不生成,java,xml,xslt,jetty,Java,Xml,Xslt,Jetty,下面是我用Java生成XML的代码片段。我正在使用jdk1.8.0_152,下面的示例用于构造XML元素 DocumentBuilder dBuilder= DocumentBuilderFactory.newInstance().newDocumentBuilder(); Document doc = dBuilder.parse(new InputSource(new StringReader(xmlString))); doc.getDocumentElement().normalize(

下面是我用Java生成XML的代码片段。我正在使用jdk1.8.0_152,下面的示例用于构造XML元素

DocumentBuilder dBuilder= DocumentBuilderFactory.newInstance().newDocumentBuilder();
Document doc = dBuilder.parse(new InputSource(new StringReader(xmlString)));
doc.getDocumentElement().normalize();
Transformer transformer = TransformerFactory.newInstance().newTransformer();
StringWriter writer = new StringWriter();
transformer.transform(new DOMSource(doc), new StreamResult(writer));
returnXML = writer.toString();
上面的代码返回

<?xml version="1.0" encoding="UTF-8"?><TYPE>star</TYPE>
star
在JBossAS[6.1.0]上,当它返回

  <?xml version="1.0" encoding="UTF-8" standalone="no"?><TYPE>star</TYPE>
star
在码头9.1。
不确定我遗漏了什么。文档类和底层TransformerFactory应该是相同的,因为我们对两者都使用相同的Java1.8。

在某些情况下,jaxp API将在类路径中搜索“提供者”。当它在类路径上找到最高优先级的提供程序时,它使用该实现。如果在类路径上找不到提供程序,它将默认使用JVM提供的实现(系统默认)

有关此过程的更多信息,请参阅

以下是您提到的两个容器的区别(开箱即用):

JBoss AS 6.1-JBoss附带Xerces 2.9.1,它是jaxp服务提供商

Jetty-Jetty没有打包任何jaxp服务提供商,因此jaxp默认为JVM提供的实现

在这个特定的例子中,JVM提供的实现添加了您所指的
独立的
属性。

@rmlan 感谢您提供上述详细信息。 在仔细调试之后,我看到JBOSS和Jetty采用了不同的TransformerFactoryImpl

JBOSS使用的TransformerFactoryImpl来自
org.apache.xalan.processor(xalan2.7.1.jar)

Jetty使用来自
com.sun.org.apache.xalan.internal.xsltc.trax(rt.jar)

我试图通过将其加载到Jetty类路径,迫使Jetty使用apache中的XalanJAR。
在我的情况下,将xalan jar添加到Jetty_HOME/lib(并重新启动应用程序)似乎不起作用。

只是为了确认@rmlan,Jetty不包括XML提供程序(并且使用JVM默认值来实现自己的XML使用)。对,这就是我的意思“这将被选择在系统默认实现之上,这是Jetty的情况下所选择的。”我将澄清另一行提到Jetty提供商的内容。只是确认您的“猜测”,就这样。我之所以将其保留为“猜测”,是因为不知道OP可能在Jetty或JBoss的lib目录中放了什么(人们用webapp类加载做疯狂的事情)。