operationsClient.execute (true) правильно отправляет данные в очередь IBM MQ, но выдает исключение axis2 - PullRequest
0 голосов
/ 03 октября 2018

Я пытаюсь отправить данные в очередь IBM MQ через некоторую заглушку, сгенерированную WSDL.В заглушке при этом вызове _operationsClient (true) он вызывает переопределение вызова invoke, в этом соединении устанавливается соединение с администратором очередей, а данные отправляются в 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)

При поиске в Google ничего не может с этим поделать.Попробовал это axis2 Fault: входной поток для входящего сообщения нулевой , но у меня он не работал.Я предполагаю, что заголовок установлен неправильно, как до и после того, как поля заголовка вызова выполнения изменены, но тогда как данные отправляются правильно.

1 Ответ

0 голосов
/ 12 октября 2018

Для услуг axis2 (из архитектуры) нам нужно установить 2 транспорта, TransportSender и transportReceiver.Если он установлен правильно, то эта ошибка не появится.

Но если вы не можете установить его, есть обходной путь.После получения ответа вручную установите входной поток в messageContext.Это должно решить проблему. (Найдите код ниже)

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));
...