펌: http://daddycat.blogspot.kr/2011/05/chapter-3-wsdlweb-service-description.html
Chapter 3 WSDL(Web Service Description Language)
WSDL 문서의 루트 엘리먼트이다. 일반적으로 WDSL 문서 내에서 사용되는 대부분의 네임스페이스들을 선언한다. tarrgetNamespace는 현재 WSDL 문서에서 작성될 내용에 대한 네임스페이스 이름을 기술해 준다. WSDL 문서에서 정의되는 원격 프로시저는 이 네임스페이스 이름을 갖는다. 그리고 웹 서비스 클라이언트는 원격 프로시저를 호출할 때 반드시 이 네임스페이스 이름을 이용해서 QName 형태로 원격 프로시저명을 기술해야 한다.
<definitions name="StockQuote"
targetNamespace="http://example.com/stockquote.wsdl"
xmlns:tns="http://example.com/stockquote.wsdl"
xmlns:xsd1="http://example.com/stockquote.xsd"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns="http://schemas.xmlsoap.org/wsdl/">
… </definitions> |
WSDL 문서에서 관례적으로 많이 사용되는 네임스페이스 선언
접두사 |
이름 공간 URI |
정의 |
wsdl |
http://schemas.xmlsoap.org/wsdl/ | WSDL 프레임워크에 대한 WSDL 이름 공간. |
soap |
http://schemas.xmlsoap.org/wsdl/soap/ | WSDL SOAP 바인딩에 대한 WSDL 이름 공간. |
http |
http://schemas.xmlsoap.org/wsdl/http/ | HTTP GET & POST 바인딩에 대한 WSDL 이름 공간. |
mime |
http://schemas.xmlsoap.org/wsdl/mime/ | MIME 바인딩에 대한 WSDL 이름 공간. |
soapenc |
http://schemas.xmlsoap.org/soap/encoding/ | SOAP 1.1에 의해 정의된 인스턴스 이름 공간. |
soapenv |
http://schemas.xmlsoap.org/soap/envelope/ | SOAP 1.1에 의해 정의된 인스턴스 이름 공간. |
xsi |
http://www.w3.org/1999/XMLSchema-instance | XSD에 의해 정의된 인스턴스 이름 공간. |
xsd |
http://www.w3.org/1999/XMLSchema | XSD에 의해 정의된 스키마 이름 공간. |
tns |
(다양함) | “this namespace”를 의미하는 (tns) 접두사는 현재 문서를 참조하는 규칙으로 사용됩니다. |
(기타) |
(다양함) | 다른 모든 이름 공간 접두사는 단지 예제일 뿐입니다. 특히, “http://example.com”으로 시작하는 URI는 어느 정도 응용 프로그램 종속적이거나 컨텍스트 종속적인 URI[4]를 나타냅니다. |
<message>
원격 프로시저의 인자에 대한 정보와 리턴값에 대한 정보를 기술하는 엘리먼트이다. 인자에 대한 정보로는 인자의 수 및 인자의 데이터 타입을 말하고, 리턴값에 대한 정보는 리턴값에 대한 데이터 타입을 말한다. 원격 프로시저의 인자 하나는 하나의 message 엘리먼트로 작성된다.
String addBook1(String title, int price); 이 메서드를 message로 표현 <message name="addBookRequest"> <part name="title" type="xsd:string"/> <part name="price" type="xsd:int"/> </message> <message name="addBook1Response"> <part name="result" type="xsd:string"/> </message> |
<type>
<types> <schema targetNamespace="복합 타입 네임스페이스명" xmlns:tns=”복합 타입 네임스페이스명” xmlns=”http://www.w3.org/2001/XMLSchema” xmlns:xsi=”http://www.w3.org/2001/XMLSchema-instance” xmlns:wsdl=”http://schemas.xmlsoap.org/wdsl/” xmlns:soap-enc="http://schemas.xmlsoap.org/soap/encoding/"><complexType name="복합 타입명"> … </complexType> </schema> </types> |
<complexType name="배열의 이름"> <complexContent> <restriction base=”soap-enc:Array”> <attribute ref=”soap-enc:arrayType” wsdl:arrayType=”데이터 타입[]”/> </restriction> </complexContent> </complexType> |
<complexType name="클래스명"> <sequence> <element name=”멤버변수(Field)명” type=”데이터 타입”/> <element name=”멤버변수(Field)명” type=”데이터 타입”/> … </sequence> </complexType> |
<portType>, <operation>
Web Service의 interface를 정의하는 부분 interface를 정의 한다는 의미는 <message>에서 정의한 메시지를 이용하여 어떻게 Web Service의 Method를 호출할 지에 대해 기술한다는 것을 의미 한다. <portType>은 하나 이상의 <operation>을 포함한다.
Java 메서드
public String say(String name) { return name+"님 안녕하세요 Apache WSDL 입니다."; } |
WSDL문서 정의
<message name="say0Request"> <part name="name" type="xsd:string"/> </message> <message name="say0Response"> <part name="return" type="xsd:string"/> </message> <portType name="sayerPortType"> <operation name="say"> <input name="say0Request" message="tns:say0Request"/> <output name="say0Response" message="tns:say0Response"/> </operation> </portType> |
<binding>
앞에서 정의된 각 요소들을 실제 메시지 전달에 사용되는 프로토콜과 binding 하는 부분이다.
특정 프로토콜로 웹 서비스 시스템에 접속하는 것을 바인딩이라고 한다. 바인딩하는 방법을 모른다면 웹 서비스 클라이언트는 원격 프로시저에 대한 호출 방법을 비록 안다고 하더라도 호출 행위는 할 수 없다. 웹 서비스 클라이언트가 사용해야할 전송용 프로토콜에 대해서는 WDSL 문서상의 이 엘리먼트에 기술해주면 된다. 이 엘리먼트는 웹 서비스 시스템과 웹 서비스 소비자인 클라이언트 응용프로그램 간의 통신 방법을 기술하는 엘리먼트이다.
<binding name="sayerBinding" type="tns:sayerPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="say"> <soap:operation soapAction="" style="rpc"/> <input name="say0Request"> <soap:body use="encoded" namespace="ApacheWSDL" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output name="say0Response"> <soap:body use="encoded" namespace="ApacheWSDL" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> |
<service>, <port>
수신자와 웹 서비스 시스템의 URL(종점 : endpoint)정보를 기술한다.
<service name="ApacheWSDL"> <port name="sayerPort" binding="tns:sayerBinding"> <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/> </port> </service> |
자동 생성된WSDL
일반적으로 WSDL은 개발 IDE툴이나, JAX-RPC에서 제공하는 wsdeploy.bat, wscompile.bat을 이용하여 자동 생성한다. 다음은 oracle Jdeveloper을 이용한 자동생성 문서의 예이다.
<?xml version = '1.0' encoding = 'UTF-8'?> <!--Generated by the Oracle9i JDeveloper Web Services WSDL Generator--> <!--Date Created: Thu Jan 15 16:26:34 KST 2004--> <definitions name="TypeMappingWS" targetNamespace="http://model/UserInfo.wsdl" xmlns="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://model/UserInfo.wsdl" xmlns:ns1="http://model/ITypeMappingWS.xsd"> <types> <schema targetNamespace="http://model/ITypeMappingWS.xsd" xmlns="http://www.w3.org/2001/XMLSchema" xmlns:SOAP-ENC="http://schemas.xmlsoap.org/soap/encoding/"> <complexType name="model_user" jdev:packageName="model" xmlns:jdev="http://xmlns.oracle.com/jdeveloper/webservices"> <all> <element name="name" type="string"/> <element name="age" type="int"/> </all> </complexType> </schema> </types> <message name="getUser0Request"> <part name="name" type="xsd:string"/> <part name="age" type="xsd:int"/> </message> <message name="getUser0Response"> <part name="return" type="ns1:model_user"/> </message> <portType name="UserInfoPortType"> <operation name="getUser"> <input name="getUser0Request" message="tns:getUser0Request"/> <output name="getUser0Response" message="tns:getUser0Response"/> </operation> </portType> <binding name="UserInfoBinding" type="tns:UserInfoPortType"> <soap:binding style="rpc" transport="http://schemas.xmlsoap.org/soap/http"/> <operation name="getUser"> <soap:operation soapAction="" style="rpc"/> <input name="getUser0Request"> <soap:body use="encoded" namespace="TypeMappingWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </input> <output name="getUser0Response"> <soap:body use="encoded" namespace="TypeMappingWS" encodingStyle="http://schemas.xmlsoap.org/soap/encoding/"/> </output> </operation> </binding> <service name="TypeMappingWS"> <port name="UserInfoPort" binding="tns:UserInfoBinding"> <soap:address location="http://localhost:8080/soap/servlet/rpcrouter"/> </port> </service> </definitions> |
'WebService' 카테고리의 다른 글
WS security (0) | 2014.01.29 |
---|