Do niedawna żyłem w błędzie i niewiedzy i twierdziłem że do wystawienia WebService potrzebny jest Server aplikacyjny (Tomcat, JBoss, … ) okazuje się, że jest to nieprawda. Możemy udostępnić usługę WebService korzystając wyłącznie z Java SE 6 JDK6), budując standardową aplikację stand alone. Jaka to zrobić?
Tworzymy prostą klasę implementującą funkcje, które chcemy wystawić:
package ws16;
public class SimpleService {
public double addNumber(Double a,Double b) {
return a+b;
}
public String echo(String message) {
return "This is a echo service:" + message;
}
}
Dodajemy do niej adnotacje, która jest częścią Java SE 6: javax.jws.WebService;
package ws16;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class SimpleService {
public double addNumber(Double a,Double b) {
return a+b;
}
public String echo(String message) {
return "This is a echo service:" + message;
}
}
Piszemy króciutki kod publikujący instancję naszej klasy jako WebService:
Endpoint.publish(
"http://localhost:8080/WebServiceExample/circlefunctions",
new SimpleService());
Takżę ostatecznie mamy jedną klasę:
package ws16;
import javax.jws.WebService;
import javax.xml.ws.Endpoint;
@WebService
public class SimpleService {
public double addNumber(Double a,Double b) {
return a+b;
}
public String echo(String message) {
return "This is a echo service:" + message;
}
public static void main(String[] args) {
Endpoint.publish(
"http://localhost:8080/WebServiceExample/simplefunctions",
new SimpleService());
}
}
Kompilujemy ją a potem wykonujemy z wiersza poleceń magiczne polecenie:
"D:\sun\java\jdk1.6.0_06\bin\wsgen" -cp ws16.CircleFunctions
(Oczywiście każdy wskazuje swoją lokalizację JDK6)
Uruchamiamy naszą aplikacje i odwiedzamy adres:
http://localhost:8080/WebServiceExample/simplefunctions?WSDL
Gdzie obejrzymy WSDL naszej usługi. Gotowe WebService zrobiony.
Wnioski:
-jednak wydanie Java 6 miało jakiś (głębszy) sens ;-)