2017-02-17 3 views
2

In meinem Web-Service, wenn ich versuche, XML mit riesigen Inhalt ausführen, bekomme ich unter Fehler.Stackoverflow für große xml

Eingabe ist SOAP-basierten Web-Service. Dieser Fehler tritt vor Beginn der Verarbeitung auf. Server, den ich meine Anwendung laufen lasse, ist weblogic 12.1.3. Java-Version 1.7.

Ich bin nicht sicher, wie diese Fehler zu beheben, wie ich meinen Dienst aktivieren müssen akzeptieren großen XML Inhalt

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

Was im XML ist, die so groß ist? Gibt es sich wiederholende Tags, die entfernt werden können, um ein kleineres XML zu erstellen? Wird so ein kleinerer XML-Code ausgeführt? – anacron

+0

ja das kleine XML läuft. Inhalt ist korrekt. Voraussetzung ist die Verarbeitung großer XML-Daten über den Webservice. Bis zu einem bestimmten Schwellenwert kann der Server die Anfrage annehmen. Darüber hinaus werden Server-Logs mit stackoverflow error gefüllt. – noone

+0

Haben Sie versucht, die maximale Heap-Größe Ihrer JVM zu erhöhen und zu versuchen, sie auszuführen? Können Sie den genauen Schwellenwert herausfinden, bei dem die XML groß genug wird, um den Fehler zu werfen? – anacron

Antwort

0

für die Stackoverflow-Fehler: Es wurde wegen der alten Webservice-RT.jar in EAP-Lib hinzugefügt. Ich habe mich irrtümlich in den Stack-Trace hineingeschaut und herausgefunden, dass diese Klassen davon stammen. entfernte Gläser und es löste es. für unkonwn JAXBcontent Ich habe versucht auf verschiedenen Blogs nach Antworten zu suchen, konnte aber keine Antwort finden. dann dekompilierte ich Gläser und fand unten heraus, die bei der Lösung dieses Fehlers geholfen haben. Fehler kam wegen Klassen mit verschiedenen Versionen in JDK und Weblogic.

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

0

Es gibt Streaming-basierten XML-Parser. Sie könnten sie nutzen, wenn Sie die Analyse in Ihrem Web-Service (Framework) manipulieren können.

Werfen Sie einen Blick auf StAX.