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&connectionFactory=clientChannel(WIP.SVRCONN)clientConnection(<externalIP1>(1414), <externalIP2>(1414))&initialContextFactory=com.ibm.mq.jms.Nojndi&replyDestination=QP.ABBSVC.WF1AGW.RESP&timeToLive=30000&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, и мне пришлось заменить все &
с &
и удалить порты (по умолчанию это 1414 в любом случае..)
РЕДАКТИРОВАТЬ: IllegalArgumentException: noCFName возникает из-за ЗАКАЗА внешних библиотек. Банки в MQ_INSTALLATION_PATH/java/lib должны быть скомпилированы перед банками в MQ_INSTALLATION_PATH/java/lib/soap.