웹서비스에 익숙하지 않은 사람은 이 부분에서 많이 괴로울지 모르겠다. 가능하면 웹서비스 사용에 관한 일반적인 설명 등을 참고하여 숙지하면 좋겠다.
기본적으로는 UDDI 를 통하여 인식하고, WSDL에 기술된 방법으로 WS Provider에 SOAP 통신을 하여 결과를 얻는 것이다.
WSDL에는 특정 서비스 함수가 있는지, 주고 받는 매개변수는 무엇이고, 각 매개변수는 어떻게 표현되는지 등이 정의되어 있다.
즉 WSDL을 참고하여 원하는 함수를, 매개변수가 변환된 XML를 첨부하여 HTTP방식으로 전달을 하고 결과를 받는 것이다.
DFS SDK를 이용하면, 서비스를 호출하고 신규 서비스를 만들고 등록하는 일을 편하게 할 수 있다. 일반적인 JAX-WS 방식으로도 호출이 가능하다. 다만, 인증관련한 wsse:Security 부분과 marshalling 관한 proxy 부분이 추가로 필요하다.
인증관련하여 DFC와 같은 기존 Java API는 한번 로긴하여 세션이 생성되면 이후 추가 인증과정 없이 계속 함수를 호출할 수 있다. 반면 WS는 기본적으로 stateless로 매번 HTTP 세션을 맺고 끊기 때문에 최초 인증 이후, 후속 호출에는 매번 인증을 새로하지 않고 token이라는 임시 허용증을 첨부하여 인증을 대신하는 것이다.
또한, HTTP 통신으로 바이너리 데이터를 보낼 경우 또는 기본적인 String 데이터 타입이 아닌 복합형 데이터 타입을 주고 받을 경우 XML로 변환이 필요하게된다. 이를 marshall / unmarshall이라 하고, 처리하는 것이 proxy가 된다.
서비스를 사용할 때 Documentum에서 제공하는 Client Productivity Layer을 사용하면, 인증부분이나 marshall/unmarshall 관련한 프락시를 직접 구현하지 않아도 된다.
여기서는 가능하면 PL 기반의 구현을 설명하려 한다. 아무래도 개발이 간단해지기 때문에 좀더 빠르게 이해할 수 있을 것이기 때문이다.
HTTP - Hypertext Transfer Protocol
SOAP - Simple Object Access Protocol
WSDL - Web Services Description Language
UDDI - Universal Description and Discovery Integration
PL - Productivity Layer