IBM MQ 上的 Apache Axis JAX-RPC - IllegalArgumentException:noCFName
Apache Axis JAX-RPC over IBM MQ - IllegalArgumentException: noCFName
我正在尝试使用 JMS/IBM MQ 传输创建 JAX-RPC 客户端。
我使用以下指南作为参考: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 测试 Web 服务调用时:
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, "", "");
}
我收到以下错误:
cannotConnect; nested exception is:
java.lang.IllegalArgumentException: noCFName
at org.apache.axis.transport.jms.JMSConnectorManager.getConnector(JMSConnectorManager.java:122)
at org.apache.axis.transport.jms.JMSTransport.setupMessageContextImpl(JMSTransport.java:163)
at org.apache.axis.client.Transport.setupMessageContext(Transport.java:46)
at org.apache.axis.client.Call.invoke(Call.java:2738)
at org.apache.axis.client.Call.invoke(Call.java:2443)
at org.apache.axis.client.Call.invoke(Call.java:2366)
at org.apache.axis.client.Call.invoke(Call.java:1812)
at com.test.BasicHttpBinding_IWf1AGwStub.dispatch(BasicHttpBinding_IWf1AGwStub.java:201)
at com.test.Test.main(Test.java:19)
Caused by: java.lang.IllegalArgumentException: noCFName
at org.apache.axis.components.jms.JNDIVendorAdapter.getConnectionFactory(JNDIVendorAdapter.java:71)
at org.apache.axis.components.jms.JNDIVendorAdapter.getQueueConnectionFactory(JNDIVendorAdapter.java:55)
at org.apache.axis.transport.jms.JMSConnectorFactory.createConnector(JMSConnectorFactory.java:227)
at org.apache.axis.transport.jms.JMSConnectorFactory.createClientConnector(JMSConnectorFactory.java:178)
at org.apache.axis.transport.jms.JMSConnectorManager.getConnector(JMSConnectorManager.java:107)
错误文本提示我需要命名 QCF,即使这是一个 nojndi QCF?我该如何解决?
需要在我的项目中添加一个客户端-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 由于外部库的 ORDER 而发生。 MQ_INSTALLATION_PATH/java/lib 中的 jars 必须在 MQ_INSTALLATION_PATH/java/lib/soap.
中的 jars 之前编译
我正在尝试使用 JMS/IBM MQ 传输创建 JAX-RPC 客户端。
我使用以下指南作为参考: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 测试 Web 服务调用时:
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, "", "");
}
我收到以下错误:
cannotConnect; nested exception is: java.lang.IllegalArgumentException: noCFName at org.apache.axis.transport.jms.JMSConnectorManager.getConnector(JMSConnectorManager.java:122) at org.apache.axis.transport.jms.JMSTransport.setupMessageContextImpl(JMSTransport.java:163) at org.apache.axis.client.Transport.setupMessageContext(Transport.java:46) at org.apache.axis.client.Call.invoke(Call.java:2738) at org.apache.axis.client.Call.invoke(Call.java:2443) at org.apache.axis.client.Call.invoke(Call.java:2366) at org.apache.axis.client.Call.invoke(Call.java:1812) at com.test.BasicHttpBinding_IWf1AGwStub.dispatch(BasicHttpBinding_IWf1AGwStub.java:201) at com.test.Test.main(Test.java:19) Caused by: java.lang.IllegalArgumentException: noCFName at org.apache.axis.components.jms.JNDIVendorAdapter.getConnectionFactory(JNDIVendorAdapter.java:71) at org.apache.axis.components.jms.JNDIVendorAdapter.getQueueConnectionFactory(JNDIVendorAdapter.java:55) at org.apache.axis.transport.jms.JMSConnectorFactory.createConnector(JMSConnectorFactory.java:227) at org.apache.axis.transport.jms.JMSConnectorFactory.createClientConnector(JMSConnectorFactory.java:178) at org.apache.axis.transport.jms.JMSConnectorManager.getConnector(JMSConnectorManager.java:107)
错误文本提示我需要命名 QCF,即使这是一个 nojndi QCF?我该如何解决?
需要在我的项目中添加一个客户端-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 由于外部库的 ORDER 而发生。 MQ_INSTALLATION_PATH/java/lib 中的 jars 必须在 MQ_INSTALLATION_PATH/java/lib/soap.
中的 jars 之前编译