0

我正在使用使用 camel-cxf 配置的肥皂服务。消息被发送到 IBM MQ。当 JMS 消费者应用程序尝试将响应放入回复队列时,我收到以下异常。

仅在升级到骆驼 3.0.0 后才能看到以下异常

但是,在升级之前我没有看到这个问题,我使用的是 Camel 版本:2.22.0 CXF 版本:3.2.4 IBM MQ 版本:8.0.0.5

升级后 Camel 版本:3.0.0 CXF 版本:3.3.6 IBM MQ 版本:8.0.0.5

IBM MQ Server 版本没有任何变化,保持不变,为 8.0.0.5。

另外,当我检查特定错误时,我了解到此问题发生在低于 7 的 IBM MQ 版本中,并且在 7.5 版中已修复请参阅:PublishJMS 处理器无法将消息写入 IBM Websphere MQ

在我的用例中,当我如上所述降级骆驼版本时,请求-回复流程有效。

我是否应该手动将特定的 JMS 消息头添加到骆驼交换对象作为骆驼 3 的一部分,或者是我缺少的其他一些更改。请指教

异常堆栈

[cxf.services.dummyServiceNamePortType.RESP_OUT(performLogging:76)] RESP_OUT
    Content-Type: text/xml
    Headers: {JMS_IBM_Format=MQSTR   , JMS_IBM_Character_Set=UTF-8, JMS_IBM_PutDate=20200401, JMSXDeliveryCount=1, JMS_IBM_MsgType=1, JMSXUserID=mqclient    , JMS_IBM_Encoding=273, JMS_IBM_PutTime=14472875, JMSMessageType=text, JMS_IBM_PutApplType=28, JMSXAppID=exe                         }
   
WARN  pool-3-thread-2 [apache.cxf.phase.PhaseInterceptorChain(doLog:475)] Interceptor for serviceName has thrown exception, unwinding now
java.lang.RuntimeException: JMSCC0051: The property 'JMS_IBM_MsgType' should be set using type 'java.lang.Integer', not 'java.lang.String'.
  at org.apache.cxf.transport.jms.util.JMSUtil.convertJmsException(JMSUtil.java:98) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.BackChannelConduit.sendExchange(BackChannelConduit.java:123) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.MessageStreamUtil$SendingWriter.close(MessageStreamUtil.java:66) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at java.io.FilterWriter.close(FilterWriter.java:104) ~[?:1.8.0_191]
  at org.apache.cxf.ext.logging.LoggingOutInterceptor$LogEventSendingWriter.close(LoggingOutInterceptor.java:152) ~[cxf-rt-features-logging-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.MessageStreamUtil.closeStreams(MessageStreamUtil.java:89) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.BackChannelConduit.close(BackChannelConduit.java:72) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.interceptor.MessageSenderInterceptor$MessageSenderEndingInterceptor.handleMessage(MessageSenderInterceptor.java:63) ~[cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:90) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.JMSDestination.onMessage(JMSDestination.java:254) [cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller.run(PollingMessageListenerContainer.java:84) [cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]
  at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
Caused by: com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0051: The property 'JMS_IBM_MsgType' should be set using type 'java.lang.Integer', not 'java.lang.String'.
  at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method) ~[?:1.8.0_191]
  at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:62) ~[?:1.8.0_191]
  at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45) ~[?:1.8.0_191]
  at java.lang.reflect.Constructor.newInstance(Constructor.java:423) ~[?:1.8.0_191]
  at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:226) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:126) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at com.ibm.msg.client.jms.internal.JmsMessageImpl.checkSettablePropertyName(JmsMessageImpl.java:2627) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at com.ibm.msg.client.jms.internal.JmsMessageImpl.setStringProperty(JmsMessageImpl.java:1998) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at com.ibm.jms.JMSMessage.setStringProperty(JMSMessage.java:1516) ~[com.ibm.mq.allclient-9.1.4.0.jar:9.1.4.0 - p914-L191119]
  at org.apache.cxf.transport.jms.JMSMessageHeadersType.writeProp(JMSMessageHeadersType.java:390) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.JMSMessageHeadersType.writeTo(JMSMessageHeadersType.java:429) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.JMSMessageUtils.asJMSMessage(JMSMessageUtils.java:266) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.BackChannelConduit.send(BackChannelConduit.java:156) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.BackChannelConduit.sendExchange(BackChannelConduit.java:121) ~[cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  ... 15 more
2020-04-01 16:47:29.407+0200 WARN  pool-3-thread-2 [apache.cxf.phase.PhaseInterceptorChain(doLog:475)] Interceptor for serviceName has thrown exception, unwinding now
org.apache.cxf.binding.soap.SoapFault: Error writing to XMLStreamWriter.
  at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:318) ~[cxf-rt-bindings-soap-3.3.4.jar:3.3.4]
  at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:294) ~[cxf-rt-bindings-soap-3.3.4.jar:3.3.4]
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) ~[cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:112) ~[cxf-core-3.3.4.jar:3.3.4]
  at org.apache.camel.component.cxf.CxfConsumer.lambda$createServer$0(CxfConsumer.java:83) ~[camel-cxf-3.0.0.jar:3.0.0]
  at org.apache.cxf.phase.PhaseInterceptorChain.wrapExceptionAsFault(PhaseInterceptorChain.java:374) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:332) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:90) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:308) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121) [cxf-core-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.JMSDestination.onMessage(JMSDestination.java:254) [cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at org.apache.cxf.transport.jms.util.PollingMessageListenerContainer$Poller.run(PollingMessageListenerContainer.java:84) [cxf-rt-transports-jms-3.3.4.jar:3.3.4]
  at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) [?:1.8.0_191]
  at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) [?:1.8.0_191]
  at java.lang.Thread.run(Thread.java:748) [?:1.8.0_191]
Caused by: javax.xml.stream.XMLStreamException: No open start element, when trying to write end element
  at com.ctc.wstx.sw.BaseStreamWriter.throwOutputError(BaseStreamWriter.java:1584) ~[woodstox-core-5.0.3.jar:5.0.3]
  at com.ctc.wstx.sw.BaseStreamWriter.reportNwfStructure(BaseStreamWriter.java:1613) ~[woodstox-core-5.0.3.jar:5.0.3]
  at com.ctc.wstx.sw.BaseNsStreamWriter.doWriteEndTag(BaseNsStreamWriter.java:664) ~[woodstox-core-5.0.3.jar:5.0.3]
  at com.ctc.wstx.sw.BaseNsStreamWriter.writeEndElement(BaseNsStreamWriter.java:291) ~[woodstox-core-5.0.3.jar:5.0.3]
  at org.apache.cxf.binding.soap.interceptor.SoapOutInterceptor$SoapOutEndingInterceptor.handleMessage(SoapOutInterceptor.java:304) ~[cxf-rt-bindings-soap-3.3.4.jar:3.3.4]
  ... 14 more 

4

0 回答 0