0
votes

This is my first time to post question on stackoverflow. I tried as much formatting for code/question and try to as much clear as i can do. apologize and explain if there's any err. recorrect in my next question.

I am newbie in try implementing service through soap over jms using websphereMq and spring JMS functionality. I have make sure below things

  • binding file generated without any error encounter
  • Status of queue manager and Queue are up and running.

I encounter below error while try putting message into websphereMQ

  • com.ibm.mq.MQException: JMSCMQ0001: WebSphere MQ call failed with compcode '2' ('MQCC_FAILED') reason '2058' ('MQRC_Q_MGR_NAME_ERROR')

I have done homework regarding this error. This error may occurs due to unavailability of Queue manager but i see QM is up and running. where i am doing wrong? How can i resolved this error to put message successfully to webspherMQ using spring functionlity?

TestClass

public class JmsTransportWebServiceIntegrationTest {

 private static final String expectedResponseContent =  "<tns:placeOrderResponse xmlns:tns=\"http://www.packtpub.com/liverestaurant/OrderService/schema\"><tns:refNumber>order-xxxx_yyyy_1234</tns:refNumber></tns:placeOrderResponse>";

@Autowired
private WebServiceTemplate webServiceTemplate;


public void setWebServiceTemplate(WebServiceTemplate webServiceTemplate) {
    this.webServiceTemplate = webServiceTemplate;
}

@Test
public void testSendReceive() throws Exception {
    InputStream is = new JmsTransportWebServiceIntegrationTest().getClass().getResourceAsStream("placeOrderRequest.xml");
    StreamSource source = new StreamSource(is);
    StringResult result = new StringResult();
    webServiceTemplate.sendSourceAndReceiveToResult(source, result);
    XMLAssert.assertXMLEqual("Invalid content received", expectedResponseContent, result.toString());
}  }

applicationContext.xml

<bean id="jndiTemplate" class="org.springframework.jndi.JndiTemplate">
 <property name="environment">
   <map>
     <entry key="java.naming.factory.initial" 
            value="com.sun.jndi.fscontext.RefFSContextFactory"/>     
          <entry key="java.naming.provider.url"  value="file:C:/JNDI-Directory" />
   </map>
 </property>
</bean>
<bean id="ibm-mq-jms-qcf" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQCF</value>
    </property>
</bean>

<!-- Bean for JMS Destination -->
<bean id="ibm-mq-queue" class= "org.springframework.jndi.JndiObjectFactoryBean">
    <property name="jndiTemplate">
        <ref bean="jndiTemplate"/>
    </property>
    <property name="jndiName">
        <value>jms/mdpSampleQueue</value>
    </property>
</bean>
<bean id="listenerContainer" 
    class="org.springframework.jms.listener.DefaultMessageListenerContainer">
    <property name="concurrentConsumers" value="1" />
    <property name="connectionFactory" ref="ibm-mq-jms-qcf" />
    <property name="destination" ref="ibm-mq-queue" />
    <property name="messageListener">
        <bean class="org.springframework.ws.transport.jms.WebServiceMessageListener">
            <property name="messageFactory" ref="messageFactory"/>
            <property name="messageReceiver" ref="messageDispatcher"/>
        </bean>
    </property>
</bean>
<bean id="messageFactory" class="org.springframework.ws.soap.saaj.SaajSoapMessageFactory"/>

<bean id="webServiceTemplate" class="org.springframework.ws.client.core.WebServiceTemplate">
    <constructor-arg ref="messageFactory"/>
    <property name="messageSender">
        <bean class="org.springframework.ws.transport.jms.JmsMessageSender">
            <property name="connectionFactory" ref="ibm-mq-jms-qcf"/>
        </bean>
    </property>
    <property name="defaultUri" value="jms:mdpSampleQueue?deliveryMode=NON_PERSISTENT"/>
</bean>

<bean id="messageDispatcher" class="org.springframework.ws.soap.server.SoapMessageDispatcher">
    <property name="endpointMappings">
        <bean class="org.springframework.ws.server.endpoint.mapping.PayloadRootQNameEndpointMapping">
            <property name="defaultEndpoint">
                <bean class="com.packtpub.liverestaurant.service.endpoint.SimplePayloadEndpoint">
                <property name="orderService">
                 <bean class="com.packtpub.liverestaurant.service.OrderServiceImpl"/>
                </property>
                </bean>
            </property>
        </bean>
    </property>
</bean
1

1 Answers

0
votes

I know this is quite old question, but maybe my answer will help someone in future.

I'm using WebSphere MQ 7.5 now and in installation there are also some Java classes. One that helped me a lot is called MQIVP.java in my installation in c:\Program Files (x86)\IBM\WebSphere MQ\tools\wmqjava\samples. Very good to test setting with this class first. From source of that class we can find that 2058 stands for:

Reason: 2058 - Queue manager name not valid or not known.

Action: Amend the queue manager name and retry. Simply pressing enter at the queue manager name prompt will connect to the default queue manager.