ActiveMQ Artemis生产者无法发送文件问题求助
ActiveMQ Artemis Producer CLI 使用
--data 参数报错 NoSuchElementException 问题场景
在Windows命令行执行以下Artemis生产者命令时:
artemis producer --message-count 1 --user xxx --password yyy --data /path/to/file
抛出如下异常:
Error occurred during import. Rolling back. java.util.NoSuchElementException: END_DOCUMENT reached: no more elements on the stream. at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.next(XMLStreamReaderImpl.java:593) at java.xml/com.sun.org.apache.xerces.internal.impl.XMLStreamReaderImpl.nextTag(XMLStreamReaderImpl.java:1346) at org.apache.activemq.artemis.cli.factory.serialize.XMLMessageSerializer.read(XMLMessageSerializer.java:52) at org.apache.activemq.artemis.cli.commands.messages.Producer.execute(Producer.java:175) at org.apache.activemq.artemis.cli.Artemis.internalExecute(Artemis.java:212) at org.apache.activemq.artemis.cli.Artemis.execute(Artemis.java:162) at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104) at java.base/java.lang.reflect.Method.invoke(Method.java:578) at org.apache.activemq.artemis.boot.Artemis.execute(Artemis.java:144) at org.apache.activemq.artemis.boot.Artemis.main(Artemis.java:61)
但改用--message参数直接传递消息内容时,命令可正常执行。
原因分析
从异常栈可见,CLI会通过XMLMessageSerializer解析指定文件的内容,这说明--data参数的设计用途是接收XML格式的结构化消息定义(包含消息体、属性等信息),而非普通文件路径。你的目标文件要么为空,要么内容不符合Artemis要求的XML消息格式,导致XML解析器读取到流末尾时抛出异常。
解决方案
根据实际需求选择以下任意一种方式:
- 发送普通文件内容作为消息体:将
--data替换为--file参数,该参数专门用于读取文件内容作为消息体发送,命令示例:artemis producer --message-count 1 --user xxx --password yyy --file /path/to/file - 使用XML格式消息定义:如果确实需要使用
--data参数,确保目标文件内容符合Artemis的XML消息格式,示例格式如下:<message> <body>你的消息内容</body> <!-- 可按需添加消息属性 --> <property key="key1" value="value1"/> </message>
内容的提问来源于stack exchange,提问作者Marco Sulla
相关产品推荐
相关产品推荐

