有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何在导入连接到JMS MQ的SOAP项目时在java项目中手动创建Hermes会话

我创建了一个SoapUI项目,该项目与一个消息队列连接并向其发送JMS消息。为了连接MQ,我使用了SoapUI提供的HERMES工具。目前我使用的是爱马仕v1。十四,

我已经在Hermes端创建了所需的会话和相应的队列,并按照如下步骤发送JMS消息:https://www.soapui.org/documentation/jms/config.htmlhttps://www.soapui.org/jms/working-with-jms-messages.html

这一切都很好

现在,我正试图将这个SOAPUI项目合并到一个Java项目中,在该项目中,我将提供项目XML并运行所有必需的测试用例。我无法通过Java代码创建HERMES会话和队列等。下面是该类的一些代码片段。我走对了吗?正在寻找一些帮助来配置此

TestRunner runner = null;
SoapUI.setSoapUICore(new StandaloneSoapUICore(true));
WsdlProject project = new WsdlProject("C:\\My Directory\\CustomerTest-soapui-project.xml");
List<TestSuite> suiteList = project.getTestSuiteList();

String defaultHermesJMSPath= HermesUtils.defaultHermesJMSPath();
System.out.println("defaultHermesJMSPath- "+defaultHermesJMSPath);

String soapUiHome = System.getProperty("soapui.home");
System.out.println("soapUiHome - "+soapUiHome);

//System.setProperty("soapui.home", "C:\\Program Files\\SmartBear\\SoapUI-5.2.1\\bin");

TestRunner runner = project.getTestSuiteByName("Private Individual").getTestCaseByName(
"TEST CASE CONTAINING GROOVY SCRIPT TEST STEPTHAT CONNECTS TO HERMES").run
(new PropertiesMap(), false);

输出:

defaultHermesJMSPath - null
soapuiHome - null

另外,我已经为这包括了一些罐子,它们是:

enter image description here

任何帮助都将不胜感激


共 (2) 个答案

  1. # 1 楼答案

    很简单,唯一的问题是你应该创建临时队列来获得响应

        import javax.jms.*;
        import java.util.Enumeration;
    
        public class JMSExample5 {
    
    protected static final String SERVICE_QUEUE = "QUEUE_NAME_THAT_IS_CREDTED_IN_SERVER_FOR_ACCEPTING";
    static String serverUrl = "tcp://10.xxx.xxx.xxx:xxxxx";
    static String userName = "UR_UserID";
    static String password = "UR_Pass";
    
    public static void sendTopicMessage(String topicName, String messageStr) {
    
        Connection connection = null;
        Session session = null;
        MessageProducer msgProducer = null;
        Destination destination = null;
    
        try {
            TextMessage msg;
            System.out.println("Publishing to destination '" + topicName
                    + "'\n");
            ConnectionFactory factory = new com.tibco.tibjms.TibjmsConnectionFactory(serverUrl);
            connection = factory.createConnection(userName, password);
            connection.start();
            session = connection
                    .createSession(false,javax.jms.Session.AUTO_ACKNOWLEDGE);
            TemporaryQueue tempQueue = session.createTemporaryQueue();
    
            TextMessage message_t = session.createTextMessage(messageStr);
            //This step is compulsory to get the reply from JMS server
            message_t.setJMSReplyTo(tempQueue);
            MessageProducer producer = session.createProducer(session.createQueue(SERVICE_QUEUE));
            producer.send(message_t);
    
            System.out.println("INFO::  The producer has sent the message"+message_t);
            Destination dest = tempQueue;
    
            MessageConsumer consumer = session.createConsumer(dest);
            Message replyMsg = consumer.receive();
            TextMessage tm = (TextMessage) replyMsg;
            System.out.println("INFO The response is "+ replyMsg);
            consumer.close();
            producer.close();
            session.close();
            connection.close();
    
        } catch (JMSException e) {
             System.out.println("Error :: there was exception"+e);
            e.printStackTrace();
        }
    }
    
    /*                                   -
     * main
     *                                   */
    public static void main(String[] args) {
        JMSExample5.sendTopicMessage(SERVICE_QUEUE,
                "<?xml version = \"1.0\" encoding = \"UTF-8\"?>\n" +
                        "<MYServices>\n" +
                        " <header>\n" +
                        "  <Version>1.0</Version>\n" +
                        "  <SrvType>OML</SrvType>\n" +
                        "  <SrvName>REQ_BALANCE_ENQUIRY</SrvName>\n" +
                        "  <SrcApp>BNK</SrcApp>\n" +
                        "  <OrgId>BLA</OrgId>\n" +
                        " </header>\n" +
                        " <body>\n" +
                        "  <srv_req>\n" +
                        "   <req_credit_card_balance_enquiry>\n" +
                        "    <card_no>12345678</card_no>\n" +
                        "   </req_credit_card_balance_enquiry>\n" +
                        "  </srv_req>\n" +
                        " </body>\n" +
                        "</MYServices>\n");
    }
    

    }

  2. # 2 楼答案

    这个问题的主要关注点是创建一个最终独立于HERMES GUI的SOAP项目,以便配置会话、队列等。我最终为MQQueueConnectionFactory、QueueConnection、QueueSession、MQQueue、MQQueueSender、,JMSTextMessage,并将JMS消息发送到队列。因此,无需打开Hermes UI并在那里进行配置。下面是可以遵循的示例代码

      def stringBuilder=context.expand('${CustomerXmlsAndCdbs#MasterXmlPrivateIndividual}');
      MQQueueConnectionFactory cf = new MQQueueConnectionFactory()
      cf.setHostName(context.expand('${#Project#HostName}'));
      cf.setPort(Integer.parseInt(context.expand('${#Project#Port}')))
      cf.setQueueManager(context.expand('${#Project#QueueManager}'))
      cf.setTransportType(Integer.parseInt(context.expand('${#Project#TransportType}')))
      QueueConnection queueConn = cf.createQueueConnection("retapp","retapp")
      QueueSession queueSession = queueConn.createQueueSession(false, Session.AUTO_ACKNOWLEDGE)
    
      MQQueue queue = (MQQueue) queueSession.createQueue(context.expand('${#Project#QueueName}').toString())
    
      MQQueueSender sender = (MQQueueSender) queueSession.createSender(queue)
      JMSTextMessage message = (JMSTextMessage) queueSession.createTextMessage(stringBuilder.toString())
      sender.send(message)
      sender.close()
      queueSession.close()
      queueConn.close()
    

    以下依赖项必须已经存在于SoapUI库中(\SoapUI-5.2.1\Lib)&Hermes-Lib文件夹\SoapUI-5.2.1\hermesJMS\Lib):

    com。国际商用机器公司dhbcore。jar,com。国际商用机器公司mq。jar,com。国际商用机器公司mq。pcf。jar,com。国际商用机器公司mqjms。罐子,连接器。jar,javax。交易罐子