首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >WSO2 Axis2 JMS传输无法在Websphere MQ队列上设置JMS_DESTINATION

WSO2 Axis2 JMS传输无法在Websphere MQ队列上设置JMS_DESTINATION
EN

Stack Overflow用户
提问于 2013-03-15 08:45:47
回答 1查看 1.6K关注 0票数 1

我有一个简单的Websphere ESB Axis2 JMS传输,它从ActiveMQ队列中拉出一条消息并将其推送到Websphere MQ队列。

当消息被发送时,我得到以下错误

代码语言:javascript
运行
复制
com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0050: The property name 'JMS_DESTINATION' is reserved and cannot be set

我没有显式设置任何属性,但我想知道这是否是Websphere ESB Axis2传输向Websphere MQ发送消息的方式?

这可以通过Websphere MQ到ActiveMQ的另一种方式很好地工作。

我在JNDI Websphere MQ连接工厂上使用Client Mode,并通过LDAP服务器连接到它,也使用默认的SYSTEM.DEF.SVRCONN通道。

这可能是Websphere MQ中的权限问题吗?

我运行了ALTER QMGR CHLAUTH(DISABLED)来排除任何权限问题(我希望如此)。

代理服务

代码语言:javascript
运行
复制
<proxy xmlns="http://ws.apache.org/ns/synapse" name="ACTIVETOIBM" transports="jms" statistics="enable" trace="enable" startOnLoad="true">
   <target>
      <inSequence>
         <log level="full" separator=","/>
         <property name="OUT_ONLY" value="true" scope="default" type="STRING"/>
         <send>
            <endpoint>
               <address uri="jms:/cn=QUEUE.OUT?transport.jms.ConnectionFactory=ibmMQQueueConnectionFactory&transport.jms.Destination=cn=QUEUE.OUT">
                  <markForSuspension>
                     <retryDelay>5</retryDelay>
                  </markForSuspension>
               </address>
            </endpoint>
         </send>
      </inSequence>
      <outSequence/>
      <faultSequence>
         <log level="full" category="ERROR" separator=","/>
      </faultSequence>
   </target>
   <parameter name="transport.jms.ConnectionFactory">activeMQQueueConnectionFactory</parameter>
   <parameter name="transport.jms.Destination">QUEUE.IN</parameter>
   <description></description>
</proxy>

axis2 jms transportReceiver配置

代码语言:javascript
运行
复制
    <transportReceiver name="jms" class="org.apache.axis2.transport.jms.JMSListener">
        <parameter name="activeMQQueueConnectionFactory" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>

        <parameter name="ibmMQQueueConnectionFactory" locked="false">
            <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter>
            <parameter name="java.naming.provider.url" locked="false">ldap://localhost:7777/dc=example,dc=com</parameter>
            <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=ConnectionFactoryLdap</parameter>
            <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
        </parameter>
    </transportReceiver>

axis2 jms transportSender配置

代码语言:javascript
运行
复制
 <transportSender name="jms" class="org.apache.axis2.transport.jms.JMSSender">
     <parameter name="activeMQQueueConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">org.apache.activemq.jndi.ActiveMQInitialContextFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">tcp://localhost:61616</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">QueueConnectionFactory</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
    </parameter>

    <parameter name="ibmMQQueueConnectionFactory" locked="false">
        <parameter name="java.naming.factory.initial" locked="false">com.sun.jndi.ldap.LdapCtxFactory</parameter>
        <parameter name="java.naming.provider.url" locked="false">ldap://localhost:7777/dc=example,dc=com</parameter>
        <parameter name="transport.jms.ConnectionFactoryJNDIName" locked="false">cn=ConnectionFactoryLdapCM</parameter>
        <parameter name="transport.jms.ConnectionFactoryType" locked="false">queue</parameter>
    </parameter>        
 </transportSender>

完整堆栈跟踪

代码语言:javascript
运行
复制
com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0050: The property name 'JMS_DESTINATION' is reserved and cannot be set.
The supplied property name begins with the JMS prefix, but is not one of the supported, settable properties.
Check the property name and correct errors.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
        at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:233)
        at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:109)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.checkSettablePropertyName(JmsMessageImpl.java:2125)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.setStringProperty(JmsMessageImpl.java:1560)
        at com.ibm.jms.JMSMessage.setStringProperty(JMSMessage.java:1496)
        at org.apache.axis2.transport.jms.JMSUtils.setTransportHeaders(JMSUtils.java:278)
        at org.apache.axis2.transport.jms.JMSSender.createJMSMessage(JMSSender.java:441)
        at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:172)
        at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:154)
        at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
        at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:626)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
[2013-03-15 10:25:35,306] ERROR - AsyncCallback Error creating a JMS message from the message context
org.apache.axis2.AxisFault: Error creating a JMS message from the message context
        at org.apache.axis2.transport.base.AbstractTransportSender.handleException(AbstractTransportSender.java:226)
        at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:174)
        at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:154)
        at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
        at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:626)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0050: The property name 'JMS_DESTINATION' is reserved and cannot be set.
The supplied property name begins with the JMS prefix, but is not one of the supported, settable properties.
Check the property name and correct errors.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
        at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:233)
        at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:109)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.checkSettablePropertyName(JmsMessageImpl.java:2125)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.setStringProperty(JmsMessageImpl.java:1560)
        at com.ibm.jms.JMSMessage.setStringProperty(JMSMessage.java:1496)
        at org.apache.axis2.transport.jms.JMSUtils.setTransportHeaders(JMSUtils.java:278)
        at org.apache.axis2.transport.jms.JMSSender.createJMSMessage(JMSSender.java:441)
        at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:172)
        ... 6 more
[2013-03-15 10:25:35,310]  WARN - AsyncCallback Executing fault handler due to exception encountered
[2013-03-15 10:25:35,311]  WARN - FaultHandler ERROR_CODE : 0
[2013-03-15 10:25:35,311]  WARN - FaultHandler ERROR_MESSAGE : Error creating a JMS message from the message context
[2013-03-15 10:25:35,311]  WARN - FaultHandler ERROR_DETAIL : org.apache.synapse.SynapseException: Error creating a JMS message from the message context
        at org.apache.synapse.core.axis2.AsyncCallback.onError(AsyncCallback.java:67)
        at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:643)
        at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
        at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
        at java.lang.Thread.run(Thread.java:662)
Caused by: org.apache.axis2.AxisFault: Error creating a JMS message from the message context
        at org.apache.axis2.transport.base.AbstractTransportSender.handleException(AbstractTransportSender.java:226)
        at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:174)
        at org.apache.axis2.transport.jms.JMSSender.sendMessage(JMSSender.java:154)
        at org.apache.axis2.transport.base.AbstractTransportSender.invoke(AbstractTransportSender.java:112)
        at org.apache.axis2.engine.AxisEngine$TransportNonBlockingInvocationWorker.run(AxisEngine.java:626)
        ... 3 more
Caused by: com.ibm.msg.client.jms.DetailedMessageFormatException: JMSCC0050: The property name 'JMS_DESTINATION' is reserved and cannot be set.
The supplied property name begins with the JMS prefix, but is not one of the supported, settable properties.
Check the property name and correct errors.
        at sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
        at sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:39)
        at sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:27)
        at java.lang.reflect.Constructor.newInstance(Constructor.java:513)
        at com.ibm.msg.client.commonservices.j2se.NLSServices.createException(NLSServices.java:319)
        at com.ibm.msg.client.commonservices.nls.NLSServices.createException(NLSServices.java:233)
        at com.ibm.msg.client.jms.internal.JmsErrorUtils.createException(JmsErrorUtils.java:109)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.checkSettablePropertyName(JmsMessageImpl.java:2125)
        at com.ibm.msg.client.jms.internal.JmsMessageImpl.setStringProperty(JmsMessageImpl.java:1560)
        at com.ibm.jms.JMSMessage.setStringProperty(JMSMessage.java:1496)
        at org.apache.axis2.transport.jms.JMSUtils.setTransportHeaders(JMSUtils.java:278)
        at org.apache.axis2.transport.jms.JMSSender.createJMSMessage(JMSSender.java:441)
        at org.apache.axis2.transport.jms.JMSSender.sendOverJMS(JMSSender.java:172)
        ... 6 more

[2013-03-15 10:25:35,313]  WARN - FaultHandler ERROR_EXCEPTION : org.apache.synapse.SynapseException: Error creating a JMS message from the message context

干杯史蒂夫

EN

回答 1

Stack Overflow用户

发布于 2013-03-15 11:49:42

WebSphere MQ JMS库不允许设置大多数传输范围属性。

因此,在发送到JMS队列之前,您必须删除它们。

在此之前我们需要添加以下属性。

代码语言:javascript
运行
复制
<property name="JMS_DESTINATION" scope="transport" action="remove"/>
<property name="JMS_REDELIVERED" scope="transport" action="remove" />
<property name="JMS_TYPE" scope="transport" action="remove" /> 
<property name="Accept-Encoding" scope="transport" action="remove"/>
<property name="Content-Length" scope="transport" action="remove"/>
<property name="Content-Type" scope="transport" action="remove"/>
<property name="User-Agent" scope="transport" action="remove"/>
<property name="Transfer-Encoding" scope="transport" action="remove"/>
<property name="X-Forwarded-For" scope="transport" action="remove"/>
<property name="X-Forwarded-Host" scope="transport" action="remove"/>
<property name="X-Forwarded-Server" scope="transport" action="remove"/>

但我猜你已经找到解决方案了!:)

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/15422830

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档