Was verursacht diese ParseError-Ausnahmen beim Lesen einer AWS SQS-Warteschlange in meinem Storm-Cluster?
Ich bin mit Sturm 0.8.1 zu Lesen eingehende Nachrichten aus einer Amazon SQS-Warteschlange und bin immer im Einklang Ausnahmen dabei:
2013-12-02 02:21:38 executor [ERROR]
java.lang.RuntimeException: com.amazonaws.AmazonClientException: Unable to unmarshall response (ParseError at [row,col]:[1,1]
Message: JAXP00010001: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.)
at REDACTED.spouts.SqsQueueSpout.handleNextTuple(SqsQueueSpout.java:219)
at REDACTED.spouts.SqsQueueSpout.nextTuple(SqsQueueSpout.java:88)
at backtype.storm.daemon.executor$fn__3976$fn__4017$fn__4018.invoke(executor.clj:447)
at backtype.storm.util$async_loop$fn__465.invoke(util.clj:377)
at clojure.lang.AFn.run(AFn.java:24)
at java.lang.Thread.run(Thread.java:701)
Caused by: com.amazonaws.AmazonClientException: Unable to unmarshall response (ParseError at [row,col]:[1,1]
Message: JAXP00010001: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.)
at com.amazonaws.http.AmazonHttpClient.handleResponse(AmazonHttpClient.java:524)
at com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:298)
at com.amazonaws.http.AmazonHttpClient.execute(AmazonHttpClient.java:167)
at com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:812)
at com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:575)
at REDACTED.spouts.SqsQueueSpout.handleNextTuple(SqsQueueSpout.java:191)
... 5 more
Caused by: javax.xml.stream.XMLStreamException: ParseError at [row,col]:[1,1]
Message: JAXP00010001: The parser has encountered more than "64000" entity expansions in this document; this is the limit imposed by the JDK.
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:219)
at com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.<init>(XMLStreamReaderImpl.java:189)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:277)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:129)
at com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLEventReader(XMLInputFactoryImpl.java:78)
at com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:85)
at com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:41)
at com.amazonaws.http.AmazonHttpClient.handleResponse(AmazonHttpClient.java:503)
... 10 more
Habe ich debuggt werden die Daten in die Warteschlange und alles sieht gut aus. Ich kann nicht herausfinden, warum die API die XML-Antwort sein würde, verursachen diese Probleme. Irgendwelche Ideen?
InformationsquelleAutor der Frage Joel Rosenberg | 2013-12-09
Du musst angemeldet sein, um einen Kommentar abzugeben.
Antwort auf meine eigene Frage hier für die Ewigkeit.
Gibt es derzeit eine XML-Erweiterung begrenzen Verarbeitung Fehler in Oracle und das OpenJDK Java, die Ergebnisse in einem gemeinsamen Zähler zu schlagen der Standardwert Obere Grenze bei der Analyse mehrerer XML-Dokumente.
Obwohl ich dachte, dass unsere version (6b27-1.12.6-1ubuntu0.12.04.4) war nicht betroffen, durch ausführen des Beispielcodes in die OpenJDK-bug-report in der Tat stellen Sie sicher, dass wir anfällig für den Fehler.
Um das Problem zu umgehen musste ich mich übergeben
jdk.xml.entityExpansionLimit=0
zu den Sturm-Arbeiter. Durch das hinzufügen folgenderstorm.yaml
auf meinen cluster, ich war in der Lage, diese zu mildern problem.Sollte ich beachten, dass dies technisch öffnet Sie bis zu einem Denial-of-Service-Angriff, aber da unser XML-Dokumente sind nur aus SQS, ich bin nicht besorgt über jemand Schmieden bösartigen XML töten unsere Mitarbeiter.
InformationsquelleAutor der Antwort Joel Rosenberg