Как предоставить доступ к SOAP Web Service с помощью MarshallingWebServiceInboundGateway (с Spring Integration DSL) - PullRequest
0 голосов
/ 15 мая 2019

Я изо всех сил пытаюсь найти хорошие примеры Spring Integration, используя MarshallingWebServiceInboundGateway

. Я собрал рабочий образец, который использует MarshallingWebServiceInboundGateway, чтобы показать сервис заказа, а при вызове он потребляет заказ.подробный сервис, использующий MarshallingWebServiceOutboundGateway

https://github.com/yortch/spring-integration-demo/blob/outboundgateway/services/order-flow/src/main/java/com/demo/integration/order/OrderEndpoint.java

    @ServiceActivator(inputChannel= ChannelNames.ORDER_INVOCATION, outputChannel = ChannelNames.ORDER_DETAIL_REQUEST_BUILDER)
    OrderRequest getOrder(OrderRequest orderRequest) {
        return orderRequest;
    }

Это как-то работает, однако я ожидаю, что метод, описанный ниже, должен быть подписью метода веб-службы,т.е. вернуть тип OrderResponse.Первоначально у меня это работало так, когда я вручную строил OrderResponse, вызывая другие POJO, однако я не могу понять, как сохранить исходную сигнатуру метода веб-службы и внутренне использовать Spring Integration для реализации, то есть с помощью вызоваканал, чтобы выполнить преобразование, и, в свою очередь, вызвать службу детализации заказа (используя MarshallingWebServiceOutboundGateway).

Если вам известны примеры кода для этого, пожалуйста, поделитесь.Я сталкивался с этим, но это непосредственно строит ответ (без использования каналов Spring Integration): https://bitbucket.org/tomask79/spring-boot-webservice-integration/src/master/

1 Ответ

0 голосов
/ 15 мая 2019

Похоже на недопонимание того, что такое поток интеграции Spring и как работают его конечные точки

  1. Три первоклассника в Spring Integration: Message, Channel, Endpoint
  2. Конечные точки подключены через каналы
  3. Конечные точки принимают сообщения от своихвходные каналы
  4. Конечные точки могут выдавать сообщения в результате их вычисления в выходные каналы.

Итак, в вашем случае вы хотите предоставить сервис SOAP, который будет вызываться внутри системы.другая служба SOAP.

Вы правильно запустили MarshallingWebServiceInboundGateway.Этот, я думаю, производит в свой канал объект OrderRequest.Он ожидает OrderResponse в своем replyChannel (явном или временном в заголовках).Я не уверен, что делает ваш getOrder(), но если еще есть трансформатор и MarshallingWebServiceOutboundGateway, вам нужно подумать о том, чтобы соединить их всех в потоке.Итак, я думаю, что результат вашего сервиса, должен идти на канал, который является входом для трансформатора.Выход этого трансформатора должен идти в MarshallingWebServiceOutboundGateway.И результат этого шлюза может пойти на какой-то другой преобразователь, чтобы построить OrderResponse, который может просто пойти в канал ответа MarshallingWebServiceInboundGateway.

Если это не то, что вы ожидаете в качестве объяснения, тогда я будупрошу перефразировать ваш вопрос ...

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...