Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/wcf/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 什么';在读取my Storm集群中的AWS SQS队列时导致这些ParseError异常的_Java_Amazon Web Services_Amazon Sqs_Apache Storm_Jaxp - Fatal编程技术网

Java 什么';在读取my Storm集群中的AWS SQS队列时导致这些ParseError异常的

Java 什么';在读取my Storm集群中的AWS SQS队列时导致这些ParseError异常的,java,amazon-web-services,amazon-sqs,apache-storm,jaxp,Java,Amazon Web Services,Amazon Sqs,Apache Storm,Jaxp,我使用Storm 0.8.1从Amazon SQS队列中读取传入消息,并在执行此操作时获得一致的异常: 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

我使用Storm 0.8.1从Amazon SQS队列中读取传入消息,并在执行此操作时获得一致的异常:

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
2013-12-02:21:38执行器[错误]
java.lang.RuntimeException:com.amazonaws.AmazonClientException:无法解组响应(解析错误位于[行,列]:[1,1]
消息:JAXP0010001:解析器在此文档中遇到了超过“64000”个实体扩展;这是JDK施加的限制。)
位于编校的.spouts.sqsquespout.handleNextTuple(sqsquespout.java:219)
位于redated.spouts.sqsquespout.nextTuple(sqsquespout.java:88)
在backtype.storm.daemon.executor$fn\uuuu3976$fn\uuuu4017$fn\uuuuu4018.invoke(executor.clj:447)
在backtype.storm.util$async\u循环$fn\uu 465.invoke处(util.clj:377)
在clojure.lang.AFn.run(AFn.java:24)
运行(Thread.java:701)
由以下原因引起:com.amazonaws.AmazonClientException:无法解组响应[行,列]处的ParseError:[1,1]
消息:JAXP0010001:解析器在此文档中遇到了超过“64000”个实体扩展;这是JDK施加的限制。)
位于com.amazonaws.http.AmazonHttpClient.handleResponse(AmazonHttpClient.java:524)
在com.amazonaws.http.AmazonHttpClient.executeHelper(AmazonHttpClient.java:298)
在com.amazonaws.http.AmazonHttpClient.execute上(AmazonHttpClient.java:167)
位于com.amazonaws.services.sqs.AmazonSQSClient.invoke(AmazonSQSClient.java:812)
位于com.amazonaws.services.sqs.AmazonSQSClient.receiveMessage(AmazonSQSClient.java:575)
位于编校的.spouts.sqsquespout.handleNextTuple(sqsquespout.java:191)
... 还有5个
原因:javax.xml.stream.XMLStreamException:ParseError位于[row,col]:[1,1]
消息:JAXP0010001:解析器在此文档中遇到了超过“64000”个实体扩展;这是JDK施加的限制。
在com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.setInputSource(XMLStreamReaderImpl.java:219)
位于com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.(XMLStreamReaderImpl.java:189)
位于com.sun.xml.internal.stream.XMLInputFactoryImpl.getXMLStreamReaderImpl(XMLInputFactoryImpl.java:277)
位于com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLStreamReader(XMLInputFactoryImpl.java:129)
位于com.sun.xml.internal.stream.XMLInputFactoryImpl.createXMLEventReader(XMLInputFactoryImpl.java:78)
位于com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:85)
位于com.amazonaws.http.StaxResponseHandler.handle(StaxResponseHandler.java:41)
在com.amazonaws.http.AmazonHttpClient.handleResponse(AmazonHttpClient.java:503)
... 10多

我已经调试了队列上的数据,一切看起来都很好。我不明白为什么API的XML响应会导致这些问题。有什么想法吗?

在这里回答我自己的问题

Oracle和OpenJDK的Java中目前存在一个XML扩展限制处理错误,导致在解析多个XML文档时共享计数器达到默认上限

  • 虽然我认为我们的版本(6b27-1.12.6-1ubuntu0.12.04.4)没有受到影响,但运行OpenJDK错误报告中给出的示例代码确实验证了我们易受错误影响

    为了解决这个问题,我需要将
    jdk.xml.entityExpansionLimit=0
    传递给Storm workers。通过在集群中将以下内容添加到
    storm.yaml
    ,我能够缓解这个问题

    supervisor.childopts: "-Djdk.xml.entityExpansionLimit=0"
    worker.childopts: "-Djdk.xml.entityExpansionLimit=0"
    

    我应该注意到,从技术上讲,这会使您面临拒绝服务攻击,但由于我们的XML文档仅来自SQS,因此我不担心有人伪造恶意XML杀死我们的员工。

    这可能还有更多。我在使用Java6时也遇到了同样的错误。我的机器上没有安装Java7。顺便说一句,这是一篇优秀的文章,没关系。发现这也会影响Java5、6、7和8的特定版本。请参阅本文了解详细信息嗨,我只需添加一行“System.setProperty”(“jdk.xml.entityExpansionLimit”,“0”);,就解决了这个问题我的节目。奇怪的是,当使用从命令行传递给程序的参数作为参数时,问题仍然存在。根据java文档,将“jdk.xml.entityExpansionLimit”属性的值设置为“0”没有限制。应使用负值禁用实体扩展。