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".
Вот и все,всем спасибо.
Комментариев нет:
Отправить комментарий