XML Validation은 Sender Adapter에서 이루어지는 Validation과
Integration Engine에서 이루어지는 Validation이 있습니다.
그림과 같은 구조를 가지기 때문에
Sender Adapter는 Outbound 메세지만 Validation이 가능하고,
Integration Engine은 Outbound와 Inbound 모두 Validation이 가능합니다.
Outbound 메세지를 검사할 때
Async 방식은 Sender Adapter, Integration Engine 둘중 사용자가 원하는 방식을 선택해서 사용할 수 있지만
Sync 방식은 반드시 Sender Adapter를 사용하지 않으면 오류가 발생합니다.
Sync 방식에서 Request, Response 메세지 둘 모두 Validation이 가능합니다.
Inbound 메세지는 Integration Engine만이 검사할 수 있으므로
Sync/Async 방식 모두 Integration Engine을 이용합니다.
XML Validation은 PI의 Payload 구조와 저장된 데이터 유형을 이용하여 검사를 합니다.
이때 이용하는 데이터 유형은 XSD입니다.
Sender Adapter에서 Validation 처리를 할 때 Payload와 XSD구조가 다르다면 메세지 처리는 정지되고,
Sender에게 Synchronous Response Messagef를 보냅니다.
따라서 오류는 Sender channel에서 확인 할 수 있습니다.
Integration Engine에서는 Validation이 Integration Engine의 Pipeline 단계에 속합니다.
Integration Engine의 Pipeline 단계는 SXMB_MONI에서 로그를 볼 때 확인 할 수 있습니다.
모습은 다음 그림과 같습니다.
로그의 각 단계가 Integration Engine의 Pipeline 단계를 나타냅니다.
따라서 Integration Engine Validation에서 오류가 날 시 SXMB_MONI를 통해 확인할 수 있습니다.
XML Validation 부분은 항상 나타나지만 목록에 나오기만 할 뿐
설정 해주지 않았다면 유효성 검사는 이루어지지 않고 있는 상태입니다.
그럼, 이제 XSD를 추출하는 방법과 Validation 설정 방법에 대해 설명하도록 하겠습니다.
1. 데이터 타입을 추출할 메세지 타입의 XSD 탭에서 [Export XSD to FILE]버튼을 눌러서 XSD를 파일로 저장합니다.
XSD는 WSDL에서도 추출 할 수 있습니다.
아래 그림을 보면 <wsdl:types></wsdl:types> 사이에 xsd가 정의되어 있는 것을 볼 수 있습니다.
그부분과 맨 위쪽 인코딩 부분만 복사하여 따로 XSD파일로 만들면 됩니다.
2. 저장한 XSD를 Integration Server System에 복사해 주어야합니다.
경로는 다음과 같습니다. 아래 경로는 실제로 테스트를 위해 만든 경로입니다.
빨간 부분은 밑에 그림을 참고하시면 됩니다.
폴더를 만들 때 namespace에서 폴더이름에 사용할 수 없는 문자 : / 에는 ~ 기호를 사용합니다.
예를 들어 http://www.inspien.co.kr/10074라는 namespace는 http~www.inspien.co.kr~10074로 폴더를 작성합니다.
XSD를 Integration Server System에 복사하는 것을 마쳤다면 이제 Validation 설정만 해주면됩니다.
단, Validation 하기를 원하는 메세지 타입은 모두 XSD로 만들어 복사해 주어야합니다.
Sync 방식인 경우 Outbound Requset Message Type, Outbound Response Message Type,
Inbound Requset Message Type, Inbound Response Message Type 총 네개의 XSD를 복사해야겠네요.
폴더는 serviece interface별로 되어있으므로 outbound serviece interface, inbound serviece interface 두 폴더면 됩니다.
마지막으로
3. Validation 설정을 해줍니다.
Outbound Validation은 Sender Agreement에서, Inbound Validation은 Receiver Agreement에서 설정합니다.
이로써 설정은 모두 마쳤습니다.
XML Validation을 사용했을 때와 사용하지 않았을 때를 비교해 보면
Outbound와 Inbound Message 모두 Validation을 사용하지 않았을 때는 에러가 모두 Message Mapping에서 Value Missing에러가 납니다.
구조가 다르기때문에 Mapping이 제대로 이루어지지 않아 Value Missing이 일어나겠지요.
그러나 Validation을 사용하면 구조를 검사해주기 때문에 보다 정확하게 에러난 이유를 알 수가 있습니다.
에러 내용을 보시면 ID가 누락된 것, 구조가 StatementName1_reponse, Statement Name1로 다른 것을 쉽게 알 수 있습니다.
마지막으로 Sync 방식일때 Integration Engin Validation을 사용 시 나타는 에러입니다.
Synchrnous message에서는 adapter validation만 사용할 수 있다는 에러가 나타나고 있습니다.
'EAI > XI/PI' 카테고리의 다른 글
[XI/PI] Dual Stack object to Single Stack object (Directory Content Migration Tool) (0) | 2015.01.19 |
---|---|
[XI/PI] SOAP to JDBC Step-by-Step / Sync (0) | 2014.04.29 |
[XI/PI] SXMB_MONI에서 로그를 커스터마이징하여 보는 방법 (0) | 2014.04.25 |
[XI/PI] ABAP Proxy to XI SOAP - 첨부파일 Attachment (0) | 2014.04.15 |
[XI/PI] Message Mapping 제거 (0) | 2014.04.15 |