Про то как сделать веб сервис на сервере приложений 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; } }
Это все.
Как видим, использование аннотаций, значительно упрощает работу программиста. Но не стоит расслабляться подводные камни появяться когда Вы начнете делать реальное приложение.