JAX-RPC Apache Axis через IBM MQ - IllegalArgumentException: noCFName

Я пытаюсь создать клиент JAX-RPC с транспортом JMS / IBM MQ.

В качестве ссылки я использую следующее руководство: https://www.ibm.com/support/knowledgecenter/en/SSFKSJ_7.5.0/com.ibm.mq.dev.doc/q033020_.htm

Я получил wsdl от внешней стороны. Он содержит только привязки http, но мы обязаны использовать транспорт JMS / IBM MQ. Конечной точкой является.NET и IBM MQ 8.

Я использую Axis 1.4 для генерации классов из WSDL. Когда я пытаюсь проверить вызов веб-службы с помощью URL-адреса конечной точки, предоставленной внешней стороной:

public static void main(String[] args) throws MalformedURLException, ServiceException, RemoteException {
    com.ibm.mq.soap.Register.extension();
    Wf1AGwImplLocator locator = new Wf1AGwImplLocator();
    IWf1AGw impl = locator.getBasicHttpBinding_IWf1aGw(
            new URL("jms:/queue?destination=QG.WF1AGW.REQ&amp;connectionFactory=clientChannel(WIP.SVRCONN)clientConnection(<externalIP1>(1414), <externalIP2>(1414))&amp;initialContextFactory=com.ibm.mq.jms.Nojndi&amp;replyDestination=QP.ABBSVC.WF1AGW.RESP&amp;timeToLive=30000&amp;persistence=1"));

    impl.dispatch("", "", "", "", "",false, "", "", 1, Calendar.getInstance(), false, "", "");
}

Я получаю следующую ошибку:

Не удается подключиться; вложенным исключением является::163) в org.apache.axis.client.Transport.setupMessageContext(Transport.java:46) в org.apache.axis.client.Call.invoke(Call.java:2738) в org.apache.axis.client.Call.invoke(Call.java:2443) в org.apache.axis.client.Call.invoke(Call.java:2366) в org.apache.axis.client.Call.invoke(Call.java:1812) в.test.BasicHttpBinding_IWf1AGwStub.dispatch(BasicHttpBinding_IWf1AGwStub.java:201) в com.test.Test.main(Test.java:19) Причина: 
    java.lang.IllegalArgumentException: noCFName в org.apents.j.jpg.getConnectionFactory(JNDIVendorAdapter.java:71) в org.apache.axis.components.jms.JNDIVendorAdapter.getQueueConnectionFactory(JNDIVendorAdapter.java:55) в org.apache.axis.transport.Conis.Jore (JMSConnectorFactory.java:227) в org.apache.axis.transport.jms.JMSConnectorFactory.createClientConnector(JMSConnectorFactory.java:178) в org.apache.axis.transport.jms.JMSConnectorManager.getConnector7) JjConnector

Текст ошибки предполагает, что мне нужно назвать QCF, даже если это nojndi QCF? Как я могу решить это?

1 ответ

Решение

Необходимо добавить client-config.wsdd в мой проект и добавить следующую строку:

<transport name="jms" pivot="java:com.ibm.mq.soap.transport.jms.WMQSender"/>

Переопределить клиентский конфиг в axis.jar. Я думал, что это уже было сделано в этом звонке:

com.ibm.mq.soap.Register.extension();

Он все еще жаловался на фабрику соединений. Видимо, он не понял URL, и мне пришлось заменить все &amp; с & и удалить порты (по умолчанию это 1414 в любом случае..)

РЕДАКТИРОВАТЬ: IllegalArgumentException: noCFName возникает из-за ЗАКАЗА внешних библиотек. Банки в MQ_INSTALLATION_PATH/java/lib должны быть скомпилированы перед банками в MQ_INSTALLATION_PATH/java/lib/soap.

Другие вопросы по тегам