Soap 통신을 하는데 있어 Soap 전문을 만들어 발송(요청)하는 Client와
Soap 전문을 받아 확인 후 응답하는 Server가 필요하다.
SOAP : “Simple Object Access Protocol" , HTTP, HTTPS 등을 사용해 XML기반 메시지를 통해 네트워크에서 통신하는 것
Client는 데이터를 요청 또는 전송 하기위해 Server에 데이터를 전달할 필요가 있는 것이다.
그렇다고 아무런 형식 없이 전달할 수는 없을 것인데,
어떤 데이터를 전달해야 하는지 메뉴얼(양식)을 Server에서 가이드 해줄 필요가 있다.
이를 Server에서 wsdl파일을 통해 제공한다.
WSDL :은 설계도 파일로써 웹서비스가 기술된 정의 파일이다.(XML)로 구성되어 있다.
wsdl 안엔 서비스 메시지 포멧, 프로토콜, 서비스 제공장소 등이 기술되어 있다.
워낙 오래전에 나온 기술이다보니, WSDL 1.1 형식을 사용하는 곳도 있으며 WSDL 2.0 형식을 사용하는 곳도 있다.
구분은 안의 요소를 보고 결정된다고 보면 된다.
내가 있는곳은 1.1 형식을 사용함.
wsdl 예제
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
|
<?xml version="1.0" encoding="UTF-8" ?>
<definitions
name="sample_name"
targetNamespace="uri"
xmlns="http://schemas.xmlsoap.org/wsdl/"
xmlns:ns1="uri1"
xmlns:ns2="uri2"
xmlns:client="uri_client"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/"
xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
>
<types> schema 영역 중요함.
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns1="uri1"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:ns2="uri2"
xmlns:client="uri_client">
<import namespace="uri" schemaLocation="endpoint_uri?XSD=MAN_SES_MainTemplate.xsd"/>
</schema>
<schema xmlns="http://www.w3.org/2001/XMLSchema" xmlns:ns1="uri1"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:ns2="uri2"
xmlns:client="uri_client">
<import namespace="uri" schemaLocation="endpoint_uri?XSD=SES_message.xsd"/>
</schema>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:ns1="uri1"
xmlns:plnk="http://schemas.xmlsoap.org/ws/2003/05/partner-link/" xmlns:ns2="uri2"
xmlns:client="uri_client">
<xsd:import namespace="uri" schemaLocation="endpoint_uri?XSD=SES_header.xsd"/>
</xsd:schema>
</types>
<message name="Name_one_Message1">
<part name="payload" element="ns1:MessageCollection"/>
</message>
<message name="Name_one_Message2">
<part name="payload" element="ns1:MessageCollection"/>
</message>
<portType name="Name_one_protType1">
<operation name="process"> operation 영역 중요함.
<input message="client:MAN_SES_MainTemplateRequestMessage"/>
<output message="client:MAN_SES_MainTemplateResponseMessage"/>
</operation>
</portType>
<binding name="MAN_SES_MainTemplateBinding" type="client:MAN_SES_MainTemplate">
<soap:binding transport="http://schemas.xmlsoap.org/soap/http"/>
<operation name="process"> operation 영역 중요함.
<soap:operation style="document" soapAction="process"/>
<input>
<soap:body use="literal"/>
</input>
<output>
<soap:body use="literal"/>
</output>
</operation>
</binding>
<service name="MAN_SES_MainTemplate">
<port name="MAN_SES_MainTemplate" binding="client:MAN_SES_MainTemplateBinding">
<soap:address location="endpoint_uri"/> endpoint
</port>
</service>
</definitions>
|
cs |
wsdl은 위의 예제처럼 구성되며, 별도의 요소들을 추가할 수 있다.
일반적으로 wsdl은 endpoint_url에 매개변수로 wsdl을 적으면(endpoint_uri?wsdl)
wsdl을 바로 확인할 수 있는 특성을 가진다.(soap 통신시 wsdl을 확인하기 위한 방법이며, 중요하다)
개발 할때도 server측에선 이렇게 구현 해둬야 한다.
별도로 wsdl을 작성할 수 있으며, wsdl 영역에서 주목해야 할 부분은 다음과 같다.
- type, schema 영역 (xsd로 이루어진 영역, xsd를 열어보면 type 정보가 들어있다.)
- bind, operation 영역 (실행하는 soap operation 명이 들어있다. 여기에 맞춰 soap전문 작성해야하는 부분이 있음)
- service, endpoint 영역 (호출하는 최종 uri, endpoint 정보가 들어있다.)
xsd에 대한 정보는 다음 주소를 참고하자.
http://tcpschool.com/xml/xml_xsd_intro
soap API 직접 구현하는 방법은 다음 포스트를 참고
https://yoo11052.tistory.com/118
https://brewagebear.github.io/soap-and-wsdl/
'IT기술 > xml' 카테고리의 다른 글
[Soap] soap 통신 개발하기 [1] 통신 사이클 이해하기 (0) | 2023.06.09 |
---|---|
[Soap] xml 웹서비스, Soap 방식 총정리 (0) | 2023.06.09 |
[JAVA] map 맵 hashmap 사용 방법 - linkedhashmap, hashtable 설명 (0) | 2023.05.09 |
[Soap] soap body 요소, 바디 요소 (0) | 2023.04.13 |
[Soap] 문법 (0) | 2023.04.03 |