"JMSException: Invalid character 'n' in value part of property"



我正在尝试连接到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);

最后一行抛出"Invalid character JMSException"

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


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

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

在我的团队的帮助下,我发现了导致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>,程序就会正常工作。

最新更新