JAX-WS возвращает сложный объект?

Я новичок в веб-сервисах Java, но нигде не могу найти хорошего объяснения.

У меня есть 2 веб-проекта Java в NetBeans.
Один как веб-служба и один как клиент этой веб-службы.
Я также создал свой собственный класс под названием "Person", в котором есть то, что вы ожидать: имя, доб и т. д.

Я хотел бы иметь метод веб-службы под названием «ListPeople()», который возвращал бы массив объектов «Person».

Нужно ли мне иметь этот класс в обоих проектах?
Должен ли я сначала сериализовать объект?
Должен ли я использовать JAXB, если да, то с чего начать?

Извините за вопросы n00b, но я запутался.
Каков нормальный способ сделать это?

заранее спасибо


person occhiso    schedule 22.08.2009    source источник


Ответы (1)


  1. Нужно ли мне иметь этот класс в обоих проектах? да.
  2. Должен ли я сначала сериализовать объект? Нет.
  3. Должен ли я использовать JAXB, если да, то с чего начать? Я не стал бы. Я предпочитаю интерфейсы javax.oxm, потому что JAXB меня не интересует, но это личное мнение.

Лично я предпочитаю использовать веб-сервис Spring с. Если вы являетесь пользователем Spring, я думаю, что это лучший способ. Если нет, возможно, документы все же помогут уточнить.

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

Я стараюсь минимизировать зависимости, если могу.

И в этом случае вы можете, если будете отправлять XML туда и обратно. Начните со схемы XSD. Пусть этим занимается клиент и служба, а не Java-объекты. Таким образом, ваш сервис можно будет использовать для клиентов, которые не являются Java.

Если вы выберете этот подход, вам придется беспокоиться только об OXM на стороне сервера. Вы принимаете XML-запрос и маршалируете его в объект Java по вашему выбору и передаете его на уровень вашего сервиса (примечание: НЕ уровень веб-сервиса) для обработки. Превратите объект ответа в поток ответов XML, и Боб станет вашим дядей. Пусть с этим разбирается клиент.

person duffymo    schedule 22.08.2009
comment
Итак, я добавил свой класс в оба проекта, но получаю ошибки несовместимого типа. Попытка назначить service.Person (из порта WS) клиенту. Person Не могли бы вы описать шаги, которые я должен предпринять, учитывая, что у меня есть только веб-сервис, веб-клиент и класс, из которого я хотел бы передавать объекты между сервером и клиент. Извините, но я все еще не понимаю. - person occhiso; 22.08.2009
comment
См. выше. JAXB — это всего лишь один из способов маршалинга и демаршалирования объектов в XML и обратно. - person duffymo; 22.08.2009
comment
Хм, то, что вы говорите, имеет смысл. Хранить класс Java в 2-х местах вообще не очень приятно. Я прочитаю этот материал Spring, но я думаю, что у меня может возникнуть потребность в использовании JAX-WS. Спасибо за информацию. - person occhiso; 22.08.2009
comment
Слишком много плохо написанных стандартов. Скажите людям, которые наложили требование, что это снизит удобство использования и ремонтопригодность вашего сервиса. - person duffymo; 22.08.2009
comment
Как человек с таким же вопросом, спасибо за ваш пост. Я до сих пор не понимаю одного: как ваши XML-кодированные данные передаются в ваш веб-сервис и из него? Должен ли я просто объявить операцию, которая принимает и возвращает строку, и анализировать/конструировать мой XML из/в них? - person Mac; 21.04.2010
comment
Поскольку я использую Spring, я могу использовать их классы инфраструктуры веб-сервисов Spring для обработки всего этого. Реализации интерфейса OXM обрабатывают маршалинг и демаршаллинг между XML и объектами. Интерфейс службы (примечание: НЕ веб-служба) должен иметь типы параметров и возвращаемых значений, соответствующие вашим требованиям Java. Ввод и вывод String обрабатываются слоем OXM. - person duffymo; 21.04.2010
comment
Вы могли бы сделать это примерно за 5 минут, используя jax-ws. Вам не нужен класс Person в обоих проектах только на стороне сервера. У клиента будет класс-заглушка, представляющий Person. Я не могу поверить, что вы рекомендовали Spring, а также заявили, что вам нравится минимизировать зависимости в том же абзаце. - person Justin; 11.11.2010
comment
spring ws генерирует wsdl, который может повторно использоваться клиентами, отличными от Java. и вам не кажется забавным, что вы упрекаете меня за добавление весенней зависимости? разве jax-* не является зависимостью? - person duffymo; 11.11.2010