“JMSException:属性”

时间:2016-09-08 19:07:32

标签: java jms invalid-characters

我正在尝试连接到JMS服务器并将消息发布到队列。当我运行创建一个简单的MapMessage并将其插入队列的Java程序时,我得到了这个例外:

javax.jms.JMSException: Invalid character '\n' in value part of property

我不知道它所指的是什么“属性”,因为没有任何配置文件的任何值都有'\ n'。

导致此异常的代码块是:

InitialContext ctx = new InitialContext();
Queue queue = (Queue)ctx.lookup("MyQueue");
ConnectionFactory factory = (ConnectionFactory)ctx.lookup("ConnectionFactory");
Connection connection = factory.createConnection();
Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);

最后一行抛出“无效字符JMSException”。

2 个答案:

答案 0 :(得分:0)

MapMessage基本上包含键/值(或属性名称/值)对格式的数据。看起来ActiveMQ JMS客户端不喜欢该属性的值,因此它会抛出异常。示例代码会有所帮助。您需要进一步调试并隔离导致此问题的代码行。

UPDATE 其他人也遇到过类似的问题 - https://stackoverflow.com/questions/35650656/invocation-of-init-method-failed-nested-exception-is-javax-jms-jmsexception-in

我怀疑问题在于JNDI解析代码Java 1.8。

答案 1 :(得分:0)

在我的团队的帮助下,我发现了导致JMSException的原因。每个系统上的ActiveMQ日志文件包含具有代理属性的行。

服务器上的代理属性(Java 1.5)如下所示:

ActiveMQ Broker (localhost, ID:<hostname>) started

服务器上不起作用的代理属性(Java 1.8)如下所示:

ActiveMQ Broker (localhost, ID:<hostname a>
<hostname b>) started

在后一种系统中,'\ n'介于<hostname a>,正确的部分和<hostname b>之间,不正确的部分。

这意味着服务器ID属性已损坏,因此这只是系统管理员可以解决的问题。将服务器属性重置为仅<hostname a>,而不是<hostname b>后,程序就会正常工作。