11 января 2008

Создание Web Сервиса на Java с помощью Tomcat и Jwsdp

Написание Веб сервиса - серверной и клиентской части будет состоять из 20 простых шагов. Но для начала необходимо выполнить кое - какую предварительную работу.

Первым делом устанавливаем Web Container, например: Tomcat6.
В переменных окружения создаём: CATALINA_HOME и TOMCAT_HOME, в обеих указываем пути к установленному каталогу.

Устанавливаем JWSDP (Java Web Service Developer Pack) и создаём переменную окружения: JWSDP_HOME.

Замечание! при написании web сервиса использовалось: jdk 1.5, tomcat 6.0, jwsdp 2.0 и дополнительно были обновлены библиотеки: saaj до версии 1.3 ( saaj.dev.java.net) при других версиях программ могут возникать ошибки работы ( о которых вы можете написать в коментариях).

Создаём приложение

В данном примере не будут использоватся никакие среды разработки (IDE), поетому создаём в нашей рабочей папке следующие кататлоги:
WS
- build
- config
- dist
- doc
- src
- web

Написание Серверной части

1. Создаём интерфейс веб сервиса, где объявляем методы, к которым может обращатся клиент

// сохраняем в src/server/wstest.java
package server;
import java.rmi.Remote;
import java.rmi.RemoteException;
import java.lang.*;
public interface wstest extends Remote {
public String getEchoString(String strv) throws RemoteException;
public int getEchoInt(int intv) throws RemoteException;
public int add (int i, int j) throws RemoteException;
public double divide (int i, int j) throws RemoteException;
}

2. Создаём класс где реализуем методы, описанные в интерфейсе
// сохраняем в src/server/wstestImpl.java
package server;
import java.lang.*;
public class wstestImpl implements wstest {
public String getEchoString(String strv) {

return strv;

}

public int getEchoInt(int intv) {

return intv;

}

public int add (int i, int j) {

return i+j;
}

public double divide (int i, int j) {

return (double)i/(double)j;

}
public static void main (String[] args){
wstestImpl wstest = new wstestImpl();

System.out.println(" 5+2 = "+wstest.add(5,2));
System.out.println (" 5/2 = "+wstest.divide(5,2));
}

}

3. Создаём конфигурационный файл веб сервиса
<?xml version="1.0" encoding="UTF-8"?>
<!-- configuration file for JWSDP wsdeploy tool -->
<webServices xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/dd" version="1.0"
targetNamespaceBase="http://peteryeung.homeip.net/targetNamespaceBase/operation/message " typeNamespaceBase="http://peteryeung.homeip.net/typeNamespaceBase/type "> <!-- the endpoint name becomes the service name in the WSDL --> <endpoint name="wstestService" interface="server.wstest" implementation="server.wstestImpl"/> <endpointMapping endpointName="wstestService" urlPattern="/wstestService"/> </webServices>

сохраняем в : config/ jaxrpc-ri.xml

4. Создаем web.xml файл

<?xml version="1.0" encoding="UTF-8"?>
<web-app>
<display-name>SimpleWebService</display-name> <description>First web service by me</description> <session-config> <session-timeout>60</session-timeout> </session-config> </web-app>

сохраняем в config/web.xml

5. Копируем библиотеки в каталог библиотек Tomcat (CATALINA_HOME\Lib) :

%JWSDP_HOME%\jaxrpc\lib
%JWSDP_HOME%\saaj\lib
%JWSDP_HOME%\jwsdp-shared\lib
%JWSDP_HOME%\jaxp\lib\endorsed
%JWSDP_HOME%\sjsxp\lib\
%JWSDP_HOME%\fastinfoset\lib\

Для пунктов 6 - 10 были созданы отдельные bat файлы, которые по очереди запускались

6. Компилируем исходники серверной части

javac -d build src/server/*.java

7. Создаём правильную структуру WAR архива

md web\WEB-INF
md web\WEB-INF\classes
xcopy/S build\server\* web\WEB-INF\classes\server\
copy config\jaxrpc-ri.xml web/WEB-INF
copy config\web.xml web/WEB-INF

8. Создаём WAR файл

jar -cvf build/myWEB-INF.war -C web\ .

9. Переделываем WAR архив специально для Web сервиса
md dist
md build\tmpdir
%JWSDP_HOME%\jaxrpc\bin\wsdeploy.bat -verbose -o dist/myWStest.war build/myWEB-INF.war

10. Загружаем на Tomcat
copy dist\myWStest.war %TOMCAT_HOME%\webapps

11. Перезагружаем Tomcat

12. Проверяем wsdl файл
http://localhost:8080/myWStest/wstestService?WSDL

Если всё ранее выполнено правильно , то откроется настроечный XML файл.

Создание клиенсткой части

13. Определяем для клиента, где находится сервис ( WSDL )

config/wscompile_config.xml

<?xml version="1.0"?>
<configuration xmlns="http://java.sun.com/xml/ns/jax-rpc/ri/config">
<!-- WSDL URL and generated package name --> <wsdl location=" http://localhost:8080/myWStest/wstestService?WSDL" packageName="clientStub"></wsdl> </configuration>

14. Генерируем код заглушки (stub code)
%JWSDP_HOME%\jaxrpc\bin\wscompile -d build -gen:client -keep config/wscompile_config.xml

15. Генерируем документацию (java docs)
javadoc -d doc\clientStub build\clientStub\*.java

16. Создаём Jar
md lib jar -cvf lib/wsstub.jar -C build clientStub/

17. Создаём тестовое клиент приложение
// сохраняем в src/client/wstestclient.java
import clientStub.*;

public class wstestclient {
public static void main (String[] args)
{

WstestService wstestService = new WstestService_Impl();

Wstest wstest=null; try { wstest = wstestService.getWstestPort();
}
catch(javax.xml.rpc.ServiceException e) { e.printStackTrace(System.err);
}
// Invoke the webservices
try {
System.out.println(" wstest.getEchoInt(1) -> "+wstest.getEchoInt(1));
System.out.println(" wstest।getEchoString(\"test\")->"+wstest.getEchoString("test"));
System.out.println(" 5+2 = "+wstest.add(5,2)); System.out.println(" 5/2 = "+wstest.divide(5,2));
}
catch (java.rmi.RemoteException e) {
e.printStackTrace (System.err);
}

}

}


18. Компилируем тестовый пример
javac -g -d build -classpath lib/wsstub.jar;
%JWSDP_HOME%\jaxrpc\lib\jaxrpc-api.jar;
%JWSDP_HOME%\jaxrpc\lib\jaxrpc- spi.jar;
%JWSDP_HOME%\jaxrpc\lib\jaxrpc-impl.jar;
src/client/*.java


19. Запускаем клиент
java -cp lib/wsstub.jar;
%JWSDP_HOME%\jaxrpc\lib\jaxrpc-api.jar;
%JWSDP_HOME%\jaxrpc\lib\jaxrpc- spi.jar;

%JWSDP_HOME%\jaxrpc\lib\jaxrpc-impl.jar;

%JWSDP_HOME%\jwsdp-shared\lib\jax-qname.jar;
%JWSDP_HOME%\jwsdp-shared\lib\activation.jar;
%JWSDP_HOME%\jwsdp-shared\lib\mail.jar;

%JWSDP_HOME%\saaj\lib\saaj- impl.jar;
%JWSDP_HOME%\saaj\lib\saaj-api.jar;
%JWSDP_HOME%\jaxp\lib\endorsed\xercesImpl.jar; %JWSDP_HOME%\fastinfoset\lib\FastInfoset.jar;
%JWSDP_HOME%\sjsxp\lib\jsr173_api.jar;
%JWSDP_HOME%\jaxp\lib\endorsed\dom.jar;
build client.wstestclient pause


20. Результат работы появится в консоли
wstest।getEchoInt(1) -> 1
wstest।getEchoString("test") -> test
5+2 = 7
5/2 = 2.5

создание Web сервиса успешно завершено

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