2017-02-17 89 views
2

在我的网络服务中,当我试图运行带有大量内容的XML时,出现错误。Stackoverflow for large xml

输入是基于SOAP的Web服务。这个错误发生在任何处理开始之前。服务器我正在运行我的应用程序是weblogic 12.1.3. Java版本1.7。

我不知道如何,因为我需要让我的服务以接受大XML内容解决此错误

java.lang.StackOverflowError 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl.scanEntityReference(XMLDocumentFragmentScannerImpl.java:1700) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2908) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2791) 
     at com.sun.xml.stream.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2932) 
+0

什么是在如此巨大的XML?是否有重复标签可以删除以创建较小的XML?这样一个更小的XML会运行吗? – anacron

+0

是的小xml运行。内容是正确的。要求是通过webservice处理大量的xml数据。直到某个阈值服务器能够满足请求。超越它,服务器日志得到充满stackoverflow错误 – noone

+0

您是否尝试增加JVM的最大堆大小,并尝试运行?你能找出xml变得足够大来抛出错误的确切阈值吗? – anacron

回答

0

为stackoverflow错误:这是因为在EAP库中添加了旧的webservice-rt.jar。我错误地看着堆栈跟踪,发现这些类是从它。删除罐子,它解决了它。 for unkonwn JAXBcontent我试过在各种博客上寻找答案,但找不到答案。然后我反编译罐子,发现下面这有助于解决这个错误。由于JDK和weblogic中具有不同版本的类出现错误。

-Djavax.xml.bind.JAXBContext = com.sun.xml.bind.v2.ContextFactory

0

有基于流的XML解析器。如果您可以在您的Web服务(框架)中操作解析,则可以利用它们。

看看StAX