Java weblogic中的NullPointerException';在Tomcat下解析XML文档时使用的DOMFactoryProperties

Java weblogic中的NullPointerException';在Tomcat下解析XML文档时使用的DOMFactoryProperties,java,xml,tomcat,jaxb,weblogic,Java,Xml,Tomcat,Jaxb,Weblogic,我试图解析一个XML,得到了一个我见过的最奇怪的NullPointerException。以下是堆栈跟踪: java.lang.NullPointerException at java.util.Hashtable.put(Hashtable.java:399) at weblogic.xml.jaxp.DOMFactoryProperties.<init>(DOMFactoryProperties.java:44) at weblogic.xml.jaxp.

我试图解析一个XML,得到了一个我见过的最奇怪的
NullPointerException
。以下是堆栈跟踪:

java.lang.NullPointerException
    at java.util.Hashtable.put(Hashtable.java:399)
    at weblogic.xml.jaxp.DOMFactoryProperties.<init>(DOMFactoryProperties.java:44)
    at weblogic.xml.jaxp.DOMFactoryProperties.clone(DOMFactoryProperties.java:114)
    at weblogic.xml.jaxp.RegistryDocumentBuilderFactory.newDocumentBuilder(RegistryDocumentBuilderFactory.java:140)
    at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.createDocument(SAX2DOM.java:324)
    at com.sun.org.apache.xalan.internal.xsltc.trax.SAX2DOM.<init>(SAX2DOM.java:84)
    at com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:187)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputHandler(TransformerImpl.java:392)
    at com.sun.org.apache.xalan.internal.xsltc.trax.TransformerHandlerImpl.setResult(TransformerHandlerImpl.java:137)
    at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader$State.<init>(DomLoader.java:74)
    at com.sun.xml.bind.v2.runtime.unmarshaller.DomLoader.startElement(DomLoader.java:113)
    at com.sun.xml.bind.v2.runtime.unmarshaller.ProxyLoader.startElement(ProxyLoader.java:55)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:455)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:433)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:137)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:501)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:400)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2755)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:648)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:140)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:511)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:808)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:737)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:119)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1205)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:522)
    at weblogic.xml.jaxp.WebLogicXMLReader.parse(WebLogicXMLReader.java:133)
    at weblogic.xml.jaxp.RegistryXMLReader.parse(RegistryXMLReader.java:173)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:137)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:105)
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:584)
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.unmarshal(Jaxb2Marshaller.java:571)
它在
this.factoryProperties.put(COALESCING,Boolean.FALSE)行失败。唯一的原因可能是
合并
中的
null
值,但除非其他类将其设置为
null
(因为某种原因,它是
公共静态
),否则我不明白为什么它可以是
null

有什么想法吗

有没有办法告诉Spring的
Jaxb2Marshaller
不要使用weblogic的XML阅读器

更新:更糟糕的是,对于同一个XML,在Tomcat下这甚至不总是可复制的。有时有效,有时无效

UPDATE2:调试显示
weblogic.xml.jaxp.DOMFactoryProperties.COALESCING
确实是
null
。但是为什么呢


UPDATE3:通过将
javax.xml.parsers.SAXParserFactory
系统属性设置为
com.sun.org.apache.xerces.internal.jaxp.saxparserfactorympl
(平台默认值),我似乎可以判断要使用的是
SAXParserFactory
。另一个问题仍然存在。

我们曾经有过类似的问题,也只发生在Tomcat上。正如我所看到的,您的应用程序使用ApacheXalan(查看堆栈跟踪)。我们的深入调查证明,这是由解析器工厂的不适当实例化(如我所记得的)造成的——可能是库之间的一些奇怪冲突。在我们的例子中,将XalanJAR添加到ProjectMaven依赖项(它应该在您的webapp的
lib
目录中提供)解决了这个问题。我的意思是-我们必须明确添加此依赖项,即使项目在没有它的情况下成功构建。

非常感谢@Piotr De

我有一个例外:

java.lang.NullPointerException 位于com.sun.org.apache.xalan.internal.xsltc.runtime.output.TransletOutputHandlerFactory.getSerializationHandler(TransletOutputHandlerFactory.java:186) 位于com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.getOutputhHandler(TransformerImpl.java:453) 位于com.sun.org.apache.xalan.internal.xsltc.trax.TransformerImpl.transform(TransformerImpl.java:336) 位于com.xml.fda.sciencepapers.service.impl.DisplayServiceImpl.generateHTML(DisplayServiceImpl.java:114)

DisplayServiceImpl中的第114行调用
javax.xml.transform.Transformer的
transform
方法

我通过将xalan依赖项添加到pom中解决了此问题,如下所示:

    <!-- https://mvnrepository.com/artifact/xalan/xalan -->
    <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.2</version>
    </dependency>

沙兰

注意:我自己创建了lib文件夹,将其放在resources文件夹中,并将jar放在其中


编辑:浏览上面的文本,因为我将JAR从本地文件夹获取的位置更改为maven存储库。

只需在
合并
变量声明行上放置一个断点,即可调试访问和修改。一旦尝试将其修改为
null
,只需读取调用它的堆栈(跟踪)。BalusC
DOMFactoryProperties
来自weblogic jar。我能够对其进行反编译并查看源代码,我还能够将断点放入
哈希表
和查找
weblogic.xml.jaxp.DOMFactoryProperties.COALESCING
。不过,我认为不可能调试
DOMFactoryProperties
类中字段的访问和修改。如果你知道怎么做,请告诉我。
    <!-- https://mvnrepository.com/artifact/xalan/xalan -->
    <dependency>
        <groupId>xalan</groupId>
        <artifactId>xalan</artifactId>
        <version>2.7.2</version>
    </dependency>
<!-- https://mvnrepository.com/artifact/xalan/serializer -->
    <dependency>
        <groupId>xalan</groupId>
        <artifactId>serializer</artifactId>
        <version>2.7.2</version>
    </dependency>