我试图通过某些 WSDL 生成的客户机存根将数据发送到 IBM MQ 队列。在存根中,在此调用 _operationsClient(true( 上,它调用覆盖的调用调用,在此调用中与队列管理器建立连接,并将数据发送到 putQueue。 但是当调用结束时,它会使用 stackTrace 抛出异常,如下所示:
org.apache.axis2.AxisFault: The input stream for an incoming message is null.
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:91)
at org.apache.axis2.transport.TransportUtils.createSOAPMessage(TransportUtils.java:66)
at org.apache.axis2.description.OutInAxisOperationClient.handleResponse(OutInAxisOperation.java:347)
at org.apache.axis2.description.OutInAxisOperationClient.send(OutInAxisOperation.java:414)
at org.apache.axis2.description.OutInAxisOperationClient.executeImpl(OutInAxisOperation.java:225)
at org.apache.axis2.client.OperationClient.execute(OperationClient.java:150)
谷歌搜索时对此没有太多罚款。 尝试了这个 axis2 错误:传入消息的输入流为空,但对我不起作用。 我推测标头在更改执行调用标头字段之前和之后设置错误,但是数据如何正确发送。
对于 axis2 服务(从架构(,我们需要设置 2 个传输,TransportSender 和 transportReceiver。如果设置正确,则不会出现此错误。
但是,如果您无法设置它,则有解决方法。 收到响应后,在消息上下文中手动设置输入流。这应该可以解决问题。(在下面找到代码(
String response = "";//your manual response string
byte[] inputBuffer = new byte[4096];
DatagramPacket packet = new DatagramPacket(inputBuffer, inputBuffer.length);
msgContext.setProperty(MessageContext.TRANSPORT_IN, new ByteArrayInputStream(response.getBytes(), 0, response.getBytes().length));