先週は,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>