Какой стек веб-сервисов позволяет связать первый веб-сервис wsdl с существующими классами в Java? - PullRequest
1 голос
/ 20 августа 2010

Привет, у меня сложный сценарий, чтобы справиться.У меня есть файл wsdl, который использует определенную схему XML.Схема XML на самом деле является реализацией спецификации, созданной вручную.Существует также реализация той же спецификации на основе Java.Таким образом, XSD, используемый в рассматриваемых классах WSDL и Java, довольно похож, но не совсем одинаков.Почти все стеки веб-сервисов позволяют создавать классы из WSDL или создавать WSDL из аннотаций классов Java.Что я хочу сделать, это использовать WSDL и связать XSD, используемый в wsdl, с существующими классами Java.Должен ли я сделать это, вручную заменив сгенерированные классы Java на существующие?Это вопрос изменения имен типов в конфигурационных файлах и перемещения аннотаций привязки в существующие классы?Если вы знаете какие-либо передовые практики или стеки Java-сервисов, которые поддерживают этот вид, если гибкость практична, ваш ответ был бы очень признателен.

С наилучшими пожеланиями Seref

Ответы [ 2 ]

3 голосов
/ 20 августа 2010

Я предлагаю модуль веб-служб Spring , который не требует генерации кода, но обеспечивает четкое разделение задач.Различные проблемы легко решаются, позволяя вам предоставить WSDL и существующие схемы с одной стороны ( контракт сначала ), существующую модель домена на основе Java с другой, и способподключить в выбранной вами технологии OXM (Object-XML Mapping).

Поскольку у вас есть созданные вручную WSDL / схема и классы Java, созданные вручную, реальная работа будет заключаться в настройке вашего OXM.Я предпочитаю JiBX, поскольку он разделяет проблемы (без мусора XML-аннотаций, смешанного с вашим доменом) с JAXB в качестве резервной копии, если кривая обучения выглядит слишком крутой.Spring Web Services поддерживает несколько других OXM-сред, и вы даже можете использовать несколько разных одновременно.

Что касается передового опыта, то я считаю, что созданный вручную код является наилучшей практикой, хотя я могу быть в меньшинстве,Если вы генерируете классы из XML, вы в конечном итоге получаете классы, которые являются простыми контейнерами данных без какого-либо поведения (при условии, что вы хотите создавать их заново при каждом изменении WSDL / XSD).Это плохо, если вы предпочитаете объектно-ориентированную парадигму, потому что вам приходится размещать свою «бизнес-логику» в утилитах / помощниках / службах и т. Д., А не в доменных объектах, которым она действительно принадлежит.Это одна из причин, почему я предпочитаю JiBX.Я могу создавать очень хорошие объекты OO с поведением, хорошей чистой схемой, которая не обязательно соответствует объектам, и могу управлять изменениями в любую сторону с помощью файла сопоставления, аналогично тому, как это делает hibernate для ORM (Object-Relational Mapping).Вы можете сделать то же самое с JAXB, но это требует встраивания структуры XML в вашу объектную модель и привязки к ней одного представления XML (тогда как с JiBX их может быть много).

1 голос
/ 20 августа 2010

MOXY (я технический руководитель) был разработан для случаев, когда у вас есть существующая XML-схема и обширная объектная модель. Это достигается с помощью сопоставления на основе XPath и может обрабатывать случаи, когда модели не похожи:

MOXy также имеет внешний файл привязки:

MOXy - это реализация JAXB с расширениями (пара из которых упомянута выше). Если вы продолжаете использовать Spring, MOXy настраивается как реализация JAXB, и вам необходимо добавить файл jaxb.properties в классы вашей модели со следующей записью:

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...