java - 通过 IBM MQ 的 Apache Axis JAX-RPC - IllegalArgumentException : noCFName

标签 java ibm-mq axis jax-rpc

我正在尝试使用 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 绑定(bind),但我们需要使用 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&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, "", "");
}

我收到以下错误:

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?我该如何解决这个问题?

最佳答案

需要将 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 中的 jar 必须在 MQ_INSTALLATION_PATH/java/lib/soap 中的 jar 之前编译。

关于java - 通过 IBM MQ 的 Apache Axis JAX-RPC - IllegalArgumentException : noCFName,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46522307/

相关文章:

java - 在没有用户输入的情况下停止 Java Swing 执行

java - 替换 IBM MQ 消息有效负载并使用 Java 中的相同消息进行回复(不带 JMS)

ibm-mq - 如何确定是否需要在 MQ 中保持命令服务器开启?

javascript - Threejs 围绕 3d 矩阵 Axis 中的另一个对象旋转一个对象

java - 尝试使用 java 中的循环在数组中创建 100 个对象

java - spring mvc REST 服务中的问题

javascript - Chart.js - X Axis 刻度

highcharts - Highcharts - 如何从图表开头删除组填充

java - 无法定位元素消息

java - 尝试使用 Apache-Camel 读取文件时未找到文件异常