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