Рубрики
Без рубрики

Развертывание веб-службы JAX-WS на сервере tomcat, развертывание контейнера сервлетов веб-службы SOAP, sun-jaxws.xml, конечная точка, URL-адрес WSDL, пример клиентской программы.

Развертывание веб-службы JAX-WS на сервере tomcat, развертывание контейнера сервлетов веб-службы SOAP, sun-jaxws.xml, конечная точка, URL-адрес WSDL, пример клиентской программы.

Автор оригинала: Pankaj Kumar.

Мы узнали, как использовать JAX-WS для создания веб-служб SOAP и публиковать их с помощью javax.xml.ws.Endpoint но в большинстве случаев мы хотим развернуть наши службы в контейнере сервлетов. Итак, сегодня мы узнаем, как создать веб-службу и развернуть ее на сервере Apache Tomcat, а затем протестировать ее с помощью клиентского приложения.

Для этого нашим первым шагом является создание динамического веб-проекта для написания нашей бизнес-логики. Наш окончательный проект будет выглядеть так, как показано на рисунке ниже.

Для развертывания веб-службы JAX-WS в контейнере сервлетов нам необходимо добавить в него несколько файлов jar. Есть два способа сделать это.

  1. Загрузите файлы jar с https://jax-ws.java.net/ и включить его в динамический веб-проект.
  2. Преобразуйте динамический веб-проект в Maven и добавьте приведенные ниже зависимости.

    Это автоматически загрузит все необходимые файлы jar в виде зависимостей maven, показанных на рисунке ниже. Мне нравится этот подход, потому что я могу легко обновить версии, а также убедиться, что ни одна из банок не пропущена.

Теперь давайте рассмотрим бизнес – логику. Во-первых, мы создадим класс компонентов модели.

package com.journaldev.jaxws.beans;

import java.io.Serializable;

public class Person implements Serializable{

	private static final long serialVersionUID = -5577579081118070434L;
	
	private String name;
	private int age;
	private int id;

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public int getAge() {
		return age;
	}

	public void setAge(int age) {
		this.age = age;
	}

	public int getId() {
		return id;
	}

	public void setId(int id) {
		this.id = id;
	}
	
	@Override
	public String toString(){
		return id+"::"+name+"::"+age;
	}

}

Теперь мы создадим наш интерфейс сервиса и классы реализации.

package com.journaldev.jaxws.service;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;

import com.journaldev.jaxws.beans.Person;

@WebService
@SOAPBinding(style = SOAPBinding.Style.RPC)
public interface PersonService {

	@WebMethod
	public boolean addPerson(Person p);
	
	@WebMethod
	public boolean deletePerson(int id);
	
	@WebMethod
	public Person getPerson(int id);
	
	@WebMethod
	public Person[] getAllPersons();
}
package com.journaldev.jaxws.service;


import java.util.HashMap;
import java.util.Map;
import java.util.Set;

import javax.jws.WebService;

import com.journaldev.jaxws.beans.Person;

@WebService(endpointInterface = "com.journaldev.jaxws.service.PersonService")  
public class PersonServiceImpl implements PersonService {

	private static Map persons = new HashMap();
	
	@Override
	public boolean addPerson(Person p) {
		if(persons.get(p.getId()) != null) return false;
		persons.put(p.getId(), p);
		return true;
	}

	@Override
	public boolean deletePerson(int id) {
		if(persons.get(id) == null) return false;
		persons.remove(id);
		return true;
	}

	@Override
	public Person getPerson(int id) {
		return persons.get(id);
	}

	@Override
	public Person[] getAllPersons() {
		Set ids = persons.keySet();
		Person[] p = new Person[ids.size()];
		int i=0;
		for(Integer id : ids){
			p[i] = persons.get(id);
			i++;
		}
		return p;
	}

}

Наш код веб-службы готов, необходимы следующие шаги для его создания в виде веб-архива, который мы можем развернуть в контейнере сервлетов.



	JAXWS-Tomcat

	
		
			com.sun.xml.ws.transport.http.servlet.WSServletContextListener
	
	
	
		JAXWSServlet
		com.sun.xml.ws.transport.http.servlet.WSServlet
		1
	
	
		JAXWSServlet
		/personWS
	
	
		30
	
	

В этом нет ничего специфичного для проекта, это общие изменения для добавления класса прослушивателя и класса frontserv для веб-службы.

Следующий шаг-создать sun-jaxws.xml файл внутри каталога WEB-INF, в котором мы предоставим сведения о конечной точке. URL-шаблон должен быть таким же, как определено в web.xml файл.

Следующий шаг-создать || sun-jaxws.xml || файл внутри каталога WEB-INF, в котором мы предоставим сведения о конечной точке. URL-шаблон должен быть таким же, как определено в web.xml файл.



  
 

Вот и все, мы закончили. Просто экспортируйте проект в виде файла WAR и разверните его в контейнере tomcat. Перейдите по URL-адресу веб-службы, как показано на рисунке ниже.

Перейдите по URL-адресу WSDL и обратите внимание на атрибуты targetNamespace и имя , мы будем использовать их в программе на стороне клиента.

Ниже приведена простая тестовая программа для использования нашего веб-сервиса и выполнения некоторых тестов.

package com.journaldev.jaxws.test;

import java.net.MalformedURLException;
import java.net.URL;
import java.util.Arrays;

import javax.xml.namespace.QName;
import javax.xml.ws.Service;

import com.journaldev.jaxws.beans.Person;
import com.journaldev.jaxws.service.PersonService;

public class SOAPPublisherClient {

	public static void main(String[] args) throws MalformedURLException {
		URL wsdlURL = new URL("https://localhost:8080/JAXWS-Tomcat/personWS?wsdl");
		//check above URL in browser, you should see WSDL file
		
		//creating QName using targetNamespace and name
		QName qname = new QName("https://service.jaxws.journaldev.com/", "PersonServiceImplService"); 
		
		Service service = Service.create(wsdlURL, qname);  
		
		//We need to pass interface and model beans to client
		PersonService ps = service.getPort(PersonService.class);
		
		Person p1 = new Person(); p1.setName("Pankaj"); p1.setId(1); p1.setAge(30);
		Person p2 = new Person(); p2.setName("Meghna"); p2.setId(2); p2.setAge(25);
		
		//add person
		System.out.println("Add Person Status="+ps.addPerson(p1));
		System.out.println("Add Person Status="+ps.addPerson(p2));
		
		//get person
		System.out.println(ps.getPerson(1));
		
		//get all persons
		System.out.println(Arrays.asList(ps.getAllPersons()));
		
		//delete person
		System.out.println("Delete Person Status="+ps.deletePerson(2));
		
		//get all persons
		System.out.println(Arrays.asList(ps.getAllPersons()));
		
	}

}

Как объяснено в предыдущем уроке , мы можем использовать утилиту wsimport для создания заглушек клиентов и использования ее. Когда мы запускаем вышеуказанную программу, мы получаем результат, как показано на рисунке ниже.

На данный момент это все, я надеюсь, что вам понравился учебник, и он поможет вам в развертывании веб-служб в контейнере Tomcat.