先週は,JAX-WSを使用して簡単なWebサービスを作ってみました。とはいうものの,wsgenやwsimportで生成されたクラスに関しては説明を省略してしまいました。そこで,今週はJAX-WSで生成されるクラスなどについて解説していきます。
サーバサイド
先週のサンプルでは,ほとんどWSDLを意識せずにWebサービスを公開,利用することができました。とはいうものの,WSDLがどうなっているのか,気になるところです。
先週のサンプルでは次のようなWebサービス実装クラスを作成しました。
@WebService public class Hello { @WebMethod public String sayHello(String name) { return "Hello, " + name + "!"; } }
Webサービスはhttp://localhost:8080/helloで公開し,WSDLはhttp://localhost:8080/hello?wsdlでアクセスできます。このWSDLを以下に示します。
<?xml version="1.0" encoding="UTF-8"?> <!-- Published by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --> <!-- Generated by JAX-WS RI at http://jax-ws.dev.java.net. RI's version is JAX-WS RI 2.1.1 in JDK 6. --> <definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://ws.javainthebox.net/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns="http://schemas.xmlsoap.org/wsdl/" targetNamespace="http://ws.javainthebox.net/" name="HelloService"> <types> <xsd:schema> <xsd:import namespace="http://ws.javainthebox.net/" schemaLocation="http://localhost:8080/hello?xsd=1"/> </xsd:schema> </types> <message name="sayHello"> <part name="parameters" element="tns:sayHello"/> </message> <message name="sayHelloResponse"> <part name="parameters" element="tns:sayHelloResponse"/> </message> <portType name="Hello"> <operation name="sayHello"> <input message="tns:sayHello"/> <output message="tns:sayHelloResponse"/> </operation> </portType> <binding name="HelloPortBinding" type="tns:Hello"> <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/> <operation name="sayHello"> <soap:operation soapAction=""/> <input> <soap:body use="literal"/> </input> <output> <soap:body use="literal"/> </output> </operation> </binding> <service name="HelloService"> <port name="HelloPort" binding="tns:HelloPortBinding"> <soap:address location="http://localhost:8080/hello"/> </port> </service> </definitions>