JAVA web service --- overview
Webサービスの登場は、Unixに発表するJAVAで開発された有料システムが呼び出したいなど、異なるプラットフォーム上のソフトウェアアプリケーションシステム間の相互通信を解決するためである.Netが開発したNTに公開された在庫システムの機能.以前、このようなニーズはEAI(エンタープライズソフトウェア統合)と呼ばれていました.その後、このような需要が後で現れる以上、なぜ開発時に考慮しないのか、例えば在庫システムを開発する際、ユーザーがGUIで在庫を検索できるほか、他のシステムにプログラムインタフェースを提供していると考えられています.この設計をSOA(サービス向けアーキテクチャ)と呼ぶ.【Webサービスがこのようなニーズを達成できるほか、Messaging、メッセージミドルウェアがよく用いられる】
Webサービスといえば、WSDLとSOAPを言わなければなりません.WSDLは、サービスを提供するやつが何ができるか、SOAPが通信を行き来する内容がどのようなフォーマットであるべきかを説明しています.この2つのものが真っ赤になるのは、巨人XMLの肩、特にWSDLに立っているからだ.
WSDLのフルネームはwebサービスdescription languageで、XML形式で、ルートノードはdefinitionsで、5つのサブノード、types、message、portType、binding、サービスがあります.それらの関係はtypesがmessageに用いられ,messageがportTypeに用いられ,portTypeがbindingに用いられ,bindingがserviceに用いられる.
WSDLファイルを手に入れたら、サービスから見たほうがいいです.
サービス:このサービスの名前、このサービスのアドレス、そしてbinding('bingding=')について説明します.
bingdingは'type='でportTypeに関連付けられ、1つのbindingに複数のoperationがあることができ、operationをこのwebサービスが提供する機能として理解することができ、styleとuseの定義(関数)を含む.
RPC:転送されるrequestは、呼び出すメソッドの説明、メソッド名、パラメータ...
Document:転送されたrequestはtypeでのパラメータの定義に合致する「ドキュメント」であり、方法の説明は必要ない.
useはliteralおよびencdingです.
encoding:転送されるrequestのパラメータはsoapで規定されたタイプであり、各elementには1...
Document:転送されたrequestelementではelementにタイプの説明はなく、受信側はWSDLで定義typeに従ってチェックする.
portType:このサービスがどのような機能を提供できるか、これらの機能と対話するときのメッセージフォーマットについて説明します.
同様に、1つのportTypeに複数のoperationがあり、portTypeをJAVAのインタフェース(Interface)と理解することができ、operationはこれらのインタフェース定義の関数である.
【messageで直接typesを定義しないで、typesが再利用できる】
Envelope要素はSOAPメッセージのルート要素です.
オプションのSOAPヘッダー要素には、認証、支払などのSOAPメッセージに関するアプリケーション固有の情報を含めることができます.ヘッダー要素が提供される場合は、Envelope要素の最初のサブ要素である必要があります.
必要なSOAP Body要素は、メッセージのエンドポイントに送信しようとする実際のSOAPメッセージを含むことができる.
Bodyにはメッセージのメッセージボディ(payload)またはエラー時のSOAP Fault要素が含まれています.Fault要素が提供されている場合は、Body要素のサブ要素でなければなりません.SOAPメッセージでは、Fault要素は一度しか表示されません.
Webサービスといえば、WSDLとSOAPを言わなければなりません.WSDLは、サービスを提供するやつが何ができるか、SOAPが通信を行き来する内容がどのようなフォーマットであるべきかを説明しています.この2つのものが真っ赤になるのは、巨人XMLの肩、特にWSDLに立っているからだ.
WSDLのフルネームはwebサービスdescription languageで、XML形式で、ルートノードはdefinitionsで、5つのサブノード、types、message、portType、binding、サービスがあります.それらの関係はtypesがmessageに用いられ,messageがportTypeに用いられ,portTypeがbindingに用いられ,bindingがserviceに用いられる.
WSDLファイルを手に入れたら、サービスから見たほうがいいです.
サービス:このサービスの名前、このサービスのアドレス、そしてbinding('bingding=')について説明します.
e.g.
<wsdl:service name="WSCXFProviderService">
<wsdl:port name="WSCXFProviderPort"
binding="tns:WSCXFProviderServiceSoapBinding">
<soap:address
location="http://localhost:8080/WSCXFProviderPort" />
</wsdl:port>
</wsdl:service>
binding:webserviceを呼び出すときの通信プロトコルとSOAPパケットの形成のいくつかの詳細を説明する.【transport,style,use】 bingdingは'type='でportTypeに関連付けられ、1つのbindingに複数のoperationがあることができ、operationをこのwebサービスが提供する機能として理解することができ、styleとuseの定義(関数)を含む.
e.g.
<wsdl:binding name="WSCXFProviderServiceSoapBinding"
type="tns:WSCXFProvider">
<soap:binding style="document"
transport="http://schemas.xmlsoap.org/soap/http" />
<wsdl:operation name="testWS">
<soap:operation soapAction="" style="document" />
<wsdl:input name="testWS">
<soap:body use="literal" />
</wsdl:input>
<wsdl:output name="testWSResponse">
<soap:body use="literal" />
</wsdl:output>
<wsdl:fault name="IllegalArgumentException">
<soap:fault name="IllegalArgumentException"
use="literal" />
</wsdl:fault>
</wsdl:operation>
</wsdl:binding>
Styleはdocumentおよびrpcであることができる.RPC:転送されるrequestは、呼び出すメソッドの説明、メソッド名、パラメータ...
Document:転送されたrequestはtypeでのパラメータの定義に合致する「ドキュメント」であり、方法の説明は必要ない.
useはliteralおよびencdingです.
encoding:転送されるrequestのパラメータはsoapで規定されたタイプであり、各elementには1...
Document:転送されたrequestelementではelementにタイプの説明はなく、受信側はWSDLで定義typeに従ってチェックする.
portType:このサービスがどのような機能を提供できるか、これらの機能と対話するときのメッセージフォーマットについて説明します.
同様に、1つのportTypeに複数のoperationがあり、portTypeをJAVAのインタフェース(Interface)と理解することができ、operationはこれらのインタフェース定義の関数である.
e.g.
<wsdl:portType name="WSCXFProvider">
<wsdl:operation name="testWS">
<wsdl:input name="testWS" message="tns:testWS"></wsdl:input>
<wsdl:output name="testWSResponse"
message="tns:testWSResponse">
</wsdl:output>
<wsdl:fault name="IllegalArgumentException"
message="tns:IllegalArgumentException">
</wsdl:fault>
</wsdl:operation>
</wsdl:portType>
message:ある機能を呼び出すときのrequest,response,faltのフォーマットを定義します. e.g.
<wsdl:message name="testWS">
<wsdl:part name="parameters" element="tns:testWS"></wsdl:part>
</wsdl:message>
<wsdl:message name="IllegalArgumentException">
<wsdl:part name="IllegalArgumentException"
element="tns:IllegalArgumentException">
</wsdl:part>
</wsdl:message>
<wsdl:message name="testWSResponse">
<wsdl:part name="parameters" element="tns:testWSResponse">
</wsdl:part>
</wsdl:message>
types:messageでrequest,response,faltの具体的なtypeを定義します.【messageで直接typesを定義しないで、typesが再利用できる】
e.g.
<wsdl:types>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema"
xmlns:tns="http://test.cxf.bt.com/"
attributeFormDefault="unqualified" elementFormDefault="unqualified"
targetNamespace="http://test.cxf.bt.com/">
<xs:element name="testWS" type="tns:testWS" />
<xs:element name="testWSResponse" type="tns:testWSResponse" />
<xs:complexType name="testWS">
<xs:sequence>
<xs:element minOccurs="0" name="arg0"
type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:complexType name="testWSResponse">
<xs:sequence>
<xs:element minOccurs="0" name="return"
type="xs:string" />
</xs:sequence>
</xs:complexType>
<xs:element name="IllegalArgumentException"
type="tns:IllegalArgumentException" />
<xs:complexType name="IllegalArgumentException">
<xs:sequence />
</xs:complexType>
</xs:schema>
</wsdl:types>
SOAP:simple object access protocal、protocalと呼ばれ、通信プロトコルと誤解されることが多いが、実はフォーマットプロトコルであるべきだ.Envelope要素はSOAPメッセージのルート要素です.
オプションのSOAPヘッダー要素には、認証、支払などのSOAPメッセージに関するアプリケーション固有の情報を含めることができます.ヘッダー要素が提供される場合は、Envelope要素の最初のサブ要素である必要があります.
必要なSOAP Body要素は、メッセージのエンドポイントに送信しようとする実際のSOAPメッセージを含むことができる.
Bodyにはメッセージのメッセージボディ(payload)またはエラー時のSOAP Fault要素が含まれています.Fault要素が提供されている場合は、Body要素のサブ要素でなければなりません.SOAPメッセージでは、Fault要素は一度しか表示されません.
e.g. WSDL SOAP request:
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test.cxf.bt.com/">
<soapenv:Header/>
<soapenv:Body>
<test:testWS>
<arg0>message passed in</arg0>
</test:testWS>
</soapenv:Body>
</soapenv:Envelope>
SOAP response:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns2:testWSResponse xmlns:ns2="http://test.cxf.bt.com/">
<return>Returned: message passed in</return>
</ns2:testWSResponse>
</soap:Body>
</soap:Envelope>
fault response:
<soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/">
<soap:Body>
<ns1:Fault xmlns:ns1="http://schemas.xmlsoap.org/soap/envelope/">
<faultcode>ns1:Server</faultcode>
<faultstring>illegal argument.</faultstring>
<detail>
<ns1:IllegalArgumentException xmlns:ns1="http://test.cxf.bt.com/"/>
</detail>
</ns1:Fault>
</soap:Body>
</soap:Envelope>