2017-02-17 87 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