Про то как сделать веб сервис на сервере приложений JBoss 4.2

Пример создания веб сервиса, который возвращает числовые, логические, строковые и байтовые данные. В качестве сервера приложений используется JBoss 4.2

Продолжаем исследовать гламурные технологии. На этот раз затронем тему веб сервисов и использования аннотаций. Посмотрим как работает dependency injection на сервере приложений JBoss 4.2.

Итак, для простоты понимания, я разбил свой пример на три проекта. Первый будет содержать сам веб сервис, второй — консольного клиента веб сервиса, третий — простой сервлет для наглядной работы сервиса при передаче байтовых данных. Другими словами сервлет в третьем примере будет обращаться с сервису и выводить картинку.
Все очень просто.

Создание веб сервиса

Создадим новый Java проект в среде разработки Eclipse или любой другой как Вам удобнее. Подключим к проекту библиотеки. Скажу сразу — я буду использовать только те библиотеки что идут в поставке сервера приложений JBoss 4.2 ну и конечно же JRE. У меня версия jre1.5.0_10. Вот список библиотек, которые я использовал:

jboss-jaxws.jar

jboss-system.jar

jboss-ejb3x.jar

wsdl4j.jar

Напишем интерфейс нашего сервиса:

 package service.ejb;

 import javax.ejb.Remote;
 import javax.jws.WebMethod;
 import javax.jws.WebService;
 import javax.jws.WebParam;
 import javax.jws.soap.SOAPBinding;
 import javax.jws.soap.SOAPBinding.Style;

 @Remote
 @WebService(name = "TestService")
 @SOAPBinding(style=Style.DOCUMENT, use=SOAPBinding.Use.LITERAL, 
 parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
 public interface IJBossService {

  @WebMethod
  public String testString( @WebParam(name = "parameter") String parameter);
  
  @WebMethod
  public byte[] blobTest();

  @WebMethod
  public Boolean booleanTest( @WebParam(name = "parameter") boolean  parameter);

  @WebMethod
  public int intTest(
  @WebParam(name = "parameter1") int parameter1,
  @WebParam(name = "parameter2") int parameter2);
 
 }

А вот имплементация сервиса:

 package service.ejb;

 import java.io.File;
 import java.io.FileInputStream;
 import java.io.IOException;
 import java.io.InputStream;
 import javax.ejb.Stateless;
 import javax.jws.WebService;
 import org.jboss.system.server.ServerConfigLocator;

 @Stateless
 @WebService(endpointInterface="service.ejb.IJBossService", serviceName="JBossService")
 public class JBossService implements IJBossService {

  public String testString(String parameter) {}

  public byte[] blobTest() {
   byte[] fileArray = null;

   try {
    File file = new File("c:/image.jpg");
    InputStream is = new FileInputStream(file);
    long length = file.length();
    fileArray = new byte[(int)length];
    int offset = 0;
    int numRead = 0;
    while ((offset < fileArray.length) && ((numRead=is.read(fileArray, offset,fileArray.length-offset)) >= 0)){
     offset += numRead;
    }          
    is.close();
   } catch (IOException e) {
    e.printStackTrace();
   }
   return fileArray;
  }

  public Boolean booleanTest(boolean parameter) {
   return !parameter;
  }

  public int intTest(int parameter1, int parameter2) {
   return parameter1+parameter2;
  }
 }
 

Это все.

Как видим, использование аннотаций, значительно упрощает работу программиста. Но не стоит расслабляться подводные камни появяться когда Вы начнете делать реальное приложение.

Страница: