我们有一个通过IBM WebSphere MQ发送JMS消息的Java应用程序。消费者应用程序要求将消息内容类型设置为" application / json"。我该怎么做呢?
我已经检查了一些引用,似乎我可以通过方法" setStringProperty(headerKey,headerName)",例如
设置额外的标题Message jmsMsg = session.createTextMessage(msgStr);
jmsMsg.setStringProperty("Content-Type", "application/json");
问题是"内容类型"不是有效的属性键,因为它包含" - "字符。
这可以在代码中完成吗?或者它是否实际配置在队列设置中?
答案 0 :(得分:2)
属性名称“Content-Type”具有“ - ”字符。根据JMS规范,属性名称可以包含Java Character.isJavaIdentifierPart
方法返回true
的任何字符。对于' - '字符isJavaIdentifierPart
方法返回false
。因此,setStringProperty("Content-Type", "application/json")
方法调用失败,但出现以下异常。
com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0049: The property name 'Content-Type' is not a valid Java(tm) identifier.
The supplied property name does not conform to the allowed format described in the JMS specification.
Check the characters used in the property name and modify as necessary.
如果可以更改接收应用程序,您可以选择"Content_Type"
(使用下划线)作为属性名称,而不是"Content-Type"
。
答案 1 :(得分:0)
作为SOAP格式的示例,w3c需要使用名为“SOAPJMS_contentType”(http://www.w3.org/TR/soapjms/)的JMS属性。看起来标准中没有关于JSON格式的内容,但您可以使用这样的名称。 IBM JMS库将正确处理此类名称。