пятница, 27 июня 2014 г.

Java Simple WebService

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()); //паблишим сервис по указанному урлу
    }
}
Запусаем main и наш сервис запаблишится на том урле,который мы указали.
Можно перейти на 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".

Вот и все,всем спасибо.

Комментариев нет:

Отправить комментарий