Как использовать специальные веб-сервисы (не-SOAP, XML без схемы)? - PullRequest
2 голосов
/ 19 августа 2011

Мне нужно написать интеграцию для нескольких внешних веб-сервисов.Некоторые из них SOAP (имеют WSDL), некоторые из них в значительной степени ad hoc - HTTP (s), аутентификация либо по базовой аутентификации, либо по параметрам в URL (!), Естественный язык, такой как XML, который не очень хорошо отображается на классы домена..

На данный момент я выполнил интеграцию шипов с помощью Spring Web 3.0 RestTemplate и привязку с помощью JAXB2 (Jaxb2Marshaller).Необходима какая-то привязка, потому что доменные классы должны быть чище, чем XML.

Это работает, но вроде плохо.Очевидно, это отчасти только потому, что службы построены.И еще одна небольшая проблема, которую я имею, это присвоение имен RestTemplate, поскольку сервисы не имеют ничего общего с REST.С этим я могу жить.JAXB2 чувствует себя немного тяжелым, хотя.

Итак, я ищу другие альтернативы.Идеи?Я хотел бы иметь простое решение (так что RestTemplate в порядке), не слишком предприимчивый ..

Ответы [ 2 ]

1 голос
/ 19 августа 2011

Хотя некоторые из ваших служб могут иметь XML без схемы, у них, вероятно, будет хорошо документированный API.Один из методов, которые, по-видимому, применяют разработчики Spring, по крайней мере со стороны сервера веб-службы, - это использовать XPath / XQuery для получения только той информации, которая вам действительно нужна из запроса.Я знаю, что это может в конечном итоге стать частью вашего решения, но я не уверен, что в такой ситуации одна конкретная обязательная структура будет отвечать всем вашим потребностям.

1 голос
/ 19 августа 2011

Если я правильно понимаю, у вас есть 1 приложение, которое должно совершать звонки в различные внешние (веб) службы с использованием различных технологий. Первое, что приходит на ум, - это иметь некоторый промежуточный уровень. Хотя это может быть что-то столь же сложное, как и решение ESB, я думаю, это не то, что вы ищете.

Например, вы могли бы достичь этого промежуточного уровня, имея иерархию классов с интерфейсом «Потребитель». Метод для реализации: doConsume () и т. Д.

Если вы посмотрите на это, у вас, вероятно, будет возможность использовать несколько шаблонов дизайна, таких как Стратегия или Шаблон. Не забывайте проявлять активность и попытаться несколько раз спросить: «Что если ..» (например: что, если им понадобится, чтобы я воспользовался еще одним сервисом? И т. Д.)

Если JAXB чувствует себя слишком тяжело, можно найти другие API:

Это будет зависеть от ситуации, которая будет лучше. Если у вас возникнут проблемы с любым из них, я уверен, что вы сможете найти помощь здесь на SO (и у людей, которые имеют с ними больше практического опыта, чем я; -)

...