JAX-WS
A JAX-WS: Java API for XML Web Services a Java programozási nyelv API-ja a Java alapú SOAP protokollt használó webszolgáltatások létrehozására. A Java EE 6 szabványcsaládban lévő JSR 224-es szabvány része. Támogatja a Java SE 5-ben bevezetett annotációk használatát, így leegyszerűsíti a fejlesztés folyamatát. A referencia implementáció a GlassFish alkalmazásszerverhez tartozik, és most a Metro implementáció része. A JAX-WS alapvetően két részből áll. Ezek közül az egyik a szerver oldali kód, amely több osztályt tartalmazhat, és ezeket tudjuk majd használni. A leírónyelve a webszolgáltatás-leíró nyelv. A másik rész a kliens oldali kód, amely a szerver oldali osztályok egy olyan formáját tartalmazza, amelyek meghívják a szolgáltatás megfelelő metódusát, és visszaadják annak a visszatérési értékét. A fejlesztés során a szerver oldali kódot kell nekünk megírni, majd a fejlesztőkörnyezet segítségével kell a klienst elkészíteni.
Példa
A példák az Oracle oktatóanyagainak példái alapján készültek.[1]
Szerver
A szerver oldali példa egy egyszerű osztály, amelynek a sayHello metódusa visszaadja a paraméterben megadott név alapján a "Hello, név." String típusú szöveget.
package helloservice.endpoint;
import javax.jws.WebService;
@WebService() // ezzel az annotációval definiáljuk a webszolgáltatást
public class Hello {
private String message = new String("Hello, ");
public Hello() {}
@WebMethod() // ezzel az annotációval definiáljuk a webszolgáltatás egy távolról hívható metódusát.
public String sayHello(String name) {
return message + name + ".";
}
}
Kliens
package simpleclient;
import javax.xml.ws.WebServiceRef;
import helloservice.endpoint.HelloService;
import helloservice.endpoint.Hello;
public class HelloClient {
// megadjuk a webszolgáltatást leíró állománynak a helyét
@WebServiceRef(wsdlLocation="http://localhost:8080/helloservice/hello?wsdl")
static HelloService service;
public static void main(String[] args) {
try {
HelloClient client = new HelloClient(); //létrehozunk egy új objektumot a kliensből
client.doTest(args); // lefuttatjuk a tesztet
} catch(Exception e) {
e.printStackTrace();
}
}
public void doTest(String[] args) {
try {
System.out.println("Retrieving the port from
the following service: " + service);
Hello port = service.getHelloPort(); // elkérjük a webszolgáltatás által kibocsátott osztály kliens oldali megfelelőjét
System.out.println("Invoking the sayHello operation
on the port.");
String name;
if (args.length > 0) {
name = args[0];
} else {
name = "No Name";
}
// meghívjuk az osztály metódusát, amely hatására a távoli metódus lefut, és visszaadja az eredményt
String response = port.sayHello(name);
System.out.println(response); // a visszakapott választ kiírjuk a konzolra
} catch(Exception e) {
e.printStackTrace();
}
}
}
Implementációk
- Apache Axis2 az Apache Software Foundation fejlesztése.
- Metro a Sun Microsystems (már Oracle) által kifejlesztett webszolgáltatás.
- JBoss WS a JBoss által készített implementáció.