Я относительно новичок в мире веб-сервисов, и мои исследования, похоже, смутили меня больше, чем просветили, моя проблема в том, что мне дали библиотеку (банку), которую я должен расширить с помощью некоторых функций веб-сервисов.
Эта библиотека будет доступна другим разработчикам, а среди классов в банке будут классы, у которых есть метод, вызывающий веб-сервис (который, по сути, устанавливает атрибут класса, выполняет некоторую бизнес-логику, например, сохраняет объект в базе данных, и т.д. и отправляет обратно объект с этими изменениями). Я хочу сделать вызов этой службы как можно более простым, надеюсь, настолько простым, чтобы разработчику, использующему класс, оставалось только это сделать.
Car c = new Car("Blue");
c.webmethod();
Я изучал JAX-WS для использования на сервере, но мне кажется, что мне не нужно создавать ни wsimport
на сервере, ни wsimport
на клиенте, так как я знаю, что у обоих есть классы, мне просто нужно некоторое взаимодействие между классами совместно используется как сервером, так и клиентом. Как вы думаете, имеет ли смысл выполнять веб-сервис и вызов в классе?
Ответы:
Я понимаю, что ваша проблема сводится к тому, как вызвать веб-службу SOAP (JAX-WS) из Java и получить возвращаемый объект . В этом случае у вас есть два возможных подхода:
wsimport
и используйте их; илиО первом подходе (использовании
wsimport
):Я вижу, что у вас уже есть бизнес-классы служб (сущностей или других), и факт, что они
wsimport
генерируют целый новый набор классов (которые каким-то образом дублируют классы, которые у вас уже есть).Боюсь, что в этом сценарии вы можете только:
wsimport
сгенерированный код, чтобы он использовал ваши бизнес-классы (это сложно и почему-то того не стоит - имейте в виду, что каждый раз при изменении WSDL вам придется восстанавливать и повторно адаптировать код); илиwsimport
сгенерированные классы. (В этом решении ваш бизнес-код может «использовать» сгенерированные классы как службу из другого архитектурного уровня.)О втором подходе (создайте собственный клиент SOAP):
Чтобы реализовать второй подход, вам необходимо:
java.net.HttpUrlconnection
(и некоторуюjava.io
обработку).Создание клиента SOAP с использованием классической
java.net.HttpUrlConnection
версии не так сложно (но и не так просто), и вы можете найти по этой ссылке очень хороший стартовый код.Я рекомендую вам использовать фреймворк SAAJ:
См. Ниже рабочий пример (запустите!) Вызова веб-службы SOAP с использованием SAAJ. Он вызывает эту веб-службу .
Что касается использования JAXB для сериализации / десериализации, информацию об этом очень легко найти. Вы можете начать здесь: http://www.mkyong.com/java/jaxb-hello-world-example/ .
источник
<xsd:element name="Incident_Number" type="xsd:string"/>
. Как видите, элемент закрыт, и никакой информации из WS не генерируется.GetInfoByCity
Это503Service Unavailable
, она seeems. :(Или просто используйте wsdl2java Apache CXF для создания объектов, которые вы можете использовать.
Он включен в двоичный пакет, который вы можете скачать с их веб-сайта. Вы можете просто запустить такую команду:
Он использует wsdl для создания объектов, которые вы можете использовать как образом (имена объектов также берутся из wsdl, поэтому ваше имя будет немного другим):
Есть даже плагин Maven, который генерирует исходники: https://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html
Примечание. Если вы создаете источники с использованием CXF и IDEA, вы можете посмотреть на это: https://stackoverflow.com/a/46812593/840315
источник
Я нашел гораздо более простой альтернативный способ создания мыльного сообщения. Учитывая объект Person:
Ниже представлен простой генератор сообщений мыла:
Вы можете использовать:
источник