Java Simple WebService
Решил для себя описать(чтобы не забыть и все такое) создание простейшего вебсервиса на Java.
С использованием технологии JAX-WS.Будет 2 примера,каждый мне в чем то нравится.
Для начала,что такое JAX-WS?
JAX-WS - это технология, разработанная для упрощения создания Web-сервисов и клиентов Web-сервисов на языке Java. Она предоставляет полный стек Web-сервисов, облегчающий разработку и развертывание Web-сервисов. JAX-WS поддерживает WS-I Basic Profile 1.1. Это гарантирует, что Web-сервисы, разработанные с использованием стека JAX-WS, могут потребляться любыми клиентами, разработанными на любом языке программирования и удовлетворяющими стандарту WS-I Basic Profile.
Более того, JAX-WS ускоряет разработку Web-сервисов, предоставляя библиотеку аннотаций для преобразования POJO-классов (plain old Java object – традиционные Java-объекты) в Web-сервисы. Она также определяет детализированное отображение сервисов, определенных на языке WSDL (Web Services Description Language), в Java-классы, реализующие эти сервисы. Все сложные типы, определенные в WSDL, отображаются в Java-классы согласно отображению, определенному спецификацией JAXB. JAX-WS ранее поставлялась с платформой Java Platform, Enterprise Edition (Java EE) 5. Спецификация JAX-WS 2.0 разрабатывается под эгидой JSR 224 Java Community Process (JCP).
Для начала у нас будет просто WebService(как в большинстве примерах)
@WebService public class HelloService { private String message = "Hello, "; @WebMethod//единственный вебметод нашего сервиса public String sayHello(String name) { return message + name + "."; } public static void main(String[] args) { Endpoint.publish("http://localhost:8080/WS/Greeting",new HelloService()); //паблишим сервис по указанному урлу } }
Можно перейти на http://localhost:8080/WS/Greeting?wsdl ,чтобы проверить его доступность.
Дальше нам нужен клиент для работы с сервисом и отладки.
1й способ.
Выполнить из папки проекта командуwsimport -keep -p com.client http://localhost:8080/WS/Greeting?wsdl
Параметр
-keep
указывает, что сгенерированные файлы сохраняются, а параметр -p
указывает название пакета, в который должны генерироваться артефакты. http://localhost:8080/WS/Greeting?wsdl указывает месторасположение WSDL-файла. wsimport поставляется вместе с jdk,так что переживать по её поводу не нужно.
После этого у нас будет несколько сгенеренных классов для работы с сервисом и клиент будет выглядеть примерно так:
public class Client { @WebServiceRef(wsdlLocation = "http://localhost:8080/WS/Greeting?wsdl") HelloServiceService service=new HelloServiceService(); public static void main(String[] args) { try { String response = service.getHelloServicePort().sayHello("Robert"); System.out.println(response); } catch (Exception e) { e.printStackTrace(); } } }В ответ вы должны получить "Hello Robert."
Способ 2
2й способ без генерации вспомогаемых классов утилитой wsimport.
Нам понадобится интерфейс нашего веб сервиса.
@WebService public interface IService { @WebMethod public String sayHello(String name); }
@WebService(endpointInterface = "com.main.IService") public class HelloService implements IService{ private String message = "Hello, "; @WebMethod public String sayHello(String name) { return message + name + "."; } public static void main(String[] args) { Endpoint.publish("http://localhost:8080/ws/Greeting",new HelloService()); } }И пишем сам клиент.
public class Client { public static void main(String[] args) throws MalformedURLException { URL url = new URL("http://localhost:8080/ws/Greeting?wsdl"); QName qname = new QName("http://main.com/", "HelloServiceService"); Service service = Service.create(url, qname); IService hello = service.getPort(IService.class); System.out.println(hello.sayHello("Cool guy")); } }
Ответ должен быть "Hello,Cool guy".
Вот и все,всем спасибо.
Комментариев нет:
Отправить комментарий