본문 바로가기
  • 오늘도 한걸음. 수고많았어요.^^
  • 조금씩 꾸준히 오래 가자.ㅎ
IT기술/xml

[Soap] soap 통신 개발하기 [2] server와 client 의 역할과 wsdl, xsd 알아보기

by 미노드 2023. 6. 19.

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

 

코딩교육 티씨피스쿨

4차산업혁명, 코딩교육, 소프트웨어교육, 코딩기초, SW코딩, 기초코딩부터 자바 파이썬 등

tcpschool.com

soap API 직접 구현하는 방법은 다음 포스트를 참고

https://yoo11052.tistory.com/118

 

[Java] SOAP API 사용하기 (feat.Maven)

Java로 SOAP API를 사용할 일이 생겨서 간단하게 정리해보고자 한다. 준비물은 Maven(pom.xml) 과 javax.xml.soap 패키지 이다. 의존성 추가 우선 아래 사이트로 접속해준다. https://mvnrepository.com/artifact/javax.xm

yoo11052.tistory.com

https://brewagebear.github.io/soap-and-wsdl/

 

Spring 공식 예제로 알아보는 SOAP와 WSDL

GDS(Global Distribution Systems) SOAP와 WSDL SOAP(Simple Object Access Protocol)란? WSDL(Web Services Description Language) 란? Spring Boot SOAP 예시 XML 스키마 파일 작성 XML 파일을 자바 클래스 파일로 만들기 Endpoint 클래스 및

brewagebear.github.io