spring-ws возвращают разные типы - PullRequest
1 голос
/ 17 октября 2011

Я использую spring-ws для веб-службы и не могу понять, как вернуть разные ответы на один и тот же начальный запрос. Скажем только, что я получаю определенный тип запроса, мы назовем его FindGasRequest. Теперь у меня уже правильно настроено сопоставление конечных точек, поэтому, когда приходит FindGasRequest, оно сопоставляется с правильной конечной точкой, а затем я выполняю некоторую бизнес-логику и затем возвращаю FindGasResponse.

Вот мой вопрос. Скажем, я получил FindGasRequest, а затем в своей бизнес-логике я определяю, что вместо возврата FindGasResponse я хочу вернуть ListGasStationsResponse. Как бы я это сделал, если мой метод, помеченный @PayloadRoot, ожидает FindGasResponse? Я думаю, как я могу изменить полезную нагрузку на что-то другое?

У меня есть проверка ошибок, настроенная так, что я могу выдать исключение, и оно вернет обработчик FindGasErrorResponse и обработчик исключений. Поэтому моей первой мыслью было сделать что-то похожее, но было бы довольно глупо выдавать исключение, когда не было ошибок.

1 Ответ

2 голосов
/ 19 октября 2011

соус,

Если ваша схема сообщений и контракт с клиентом позволяют возвращать ListGasStationsResponse или FindGasResponse в ответ на FindGasRequest, вам нужно отказаться от конечной точки FindGas на основе аннотаций и вместо этого заставить свою конечную точку расширять AbstractMarshallingPayloadEndpoint.

Затем вы должны переопределить AbstractMarshallingPayloadEndpoint.invokeInternal, чтобы вернуть один из двух различных типов ответов в качестве объекта. Ваш маршаллер (это работает для меня с Jaxb2Marshaller) должен автоматически иметь возможность взять этот объект и создать ответ XML для одного из этих типов.

Обратите внимание, что у вас может быть сочетание конечных точек на основе аннотаций и xml, и в этом случае вы должны следовать приведенным здесь инструкциям, чтобы настроить для них сопоставления: http://forum.springsource.org/showthread.php?78685-Mixing-annotations-with-xml-configuration-of-endpoints.

Этот подход работал для меня в Spring-WS 1.5.

...