spring-ws - как создать java-интерфейс из WSDL?
Я создаю WSDL-первый веб-сервис с Spring-W в Gradle.
Некоторые примеры, которые я просматривал (например, https://spring.io/guides/gs/producing-web-service/), похоже, что они будут генерировать java-классы только из XSD-схемы, но не java-интерфейса (или абстрактный класс) из сервисных операций WSDL?
Кроме того, в документе Spring-WS говорится: "... в Spring-WS написание WSDL вручную не требуется...".
Правильно ли понято, что spring-ws не будет генерировать какой-либо java-интерфейс или класс для самого сервиса?
Можно ли переопределить это поведение по умолчанию и заставить его сделать это?
Я хотел бы убедиться, что полный WSDL правильно и полностью реализован...
3 ответа
С помощью spring-ws вы можете сначала создать контракт WS, хотя вам не нужно создавать WSDL, потому что он может генерировать его динамически.
Для объектов Java Spring-ws позволяет маршалировать / отменять маршаллинг с использованием jaxb2 или аналогичного. Таким образом, вы можете получить классы Java из XSD, но генерация кода выполняется маршаллером.
С серверной точки зрения вы создаете конечные точки WS, которые соответствуют операциям WSDL. Конечные точки аннотированы и привязаны к объектам Java запроса / ответа. Таким образом, Spring может генерировать динамически WSDL, но вы можете использовать свой собственный WSDL.
С клиентской точки зрения вам нужен WSTemplate
это должно получить WSDL (статический или динамический, это не возражает). Используя этот способ, WSTemplate
убедитесь, что вы можете вызывать все конечные точки сервера без реализации клиентских заглушек или сгенерированного кода.
Я предпочитаю использовать статический WSDL, потому что динамическая генерация не может гарантировать, что ваш WSDL изменится, если вы обновите Spring или около того, и это может нарушить совместимость с вашими клиентами.
Однако во время разработки я использую динамический WSDL для простоты. Как только у меня есть сервис, который я хочу, я получаю динамически сгенерированный WSDL (настраиваю, если мне нужно) и использую его как статический. Этот WSDL полон для всех конечных точек.
Надеюсь, поможет!
Если вам нужны только интерфейсы из WSDL, просто используйте команду wsimport. Его часть JDK, так что никаких дополнительных вещей не требуется.
запустите commend: wsimport -keep wsdlUrl, он сгенерирует все интерфейсы и клиентский код (.java, а также.class) для попадания в веб-сервис. просто найдите ваш интерфейс.
Пусть ваш сгенерированный URL-адрес: http://www.host.com/testservice?WSDL
тогда commend будет wsimport -keep http://www.host.com/testservice?WSDL Есть намного больше вариантов использования wsimport commend, как вы хотите. http://docs.oracle.com/javase/7/docs/technotes/tools/share/wsimport.html
ws import генерирует весь код на стороне клиента. и многое другое попробуйте wsimport, wsgen для более подробной информации