SAP PO의 소스가 SOAP 등 연계방식인 경우 ESB의 메시지타입을 생성하게 되면 XML네임스페이스는 디폴트로 들어가 있고 이렇게 생성된 오브젝트로 소스쪽에 WSDL를 배포하면
소스쪽은 그 WSDL가지고 개발 툴에서 제너레이션 해서 PO에서 생성된 네임스페이스대로 호출을 하거나 임의로 SOAP구조,네임스페이스,호출 소스를 미리 구현하여 실제 PO를 호출할때 소스와 PO가 네임스페이스가 달라 호출이 실패되는 경우도 있었음
실제 네임스페이스는 무엇을까 이런 의문을 통해 관련 내용을 정리해보려고 함
네임스페이스란
- URI(Uniform Resource Identifier)로 표현
- 네임스페이스 이름을 URL로 사용 → 도메인 유일보장 값
- 네임스페이스명 접두사(prefix) 사용 → 쿼리의 컬럼명 뒤 별칭(Alias) 같은
- XML안에 엘리먼트 앞에 접두사를 사용하여 네임스페이스 별로 구분 가능
- SOAP메시지안에 메소드,데이터항목 등을 구별할수 있게 해준다고함
- XML 요소 간의 이름에 대한 충돌 방지하는 방법 제공
- XML네임스페이스 선언은 xmlns나 xmlns:로 시작
- 두가지 마크업 언어(HTML,WML 등) 합쳤을때 동일한 이름의 엘리먼트에 대한 충돌방지
PO에서의 네임스페이스
- ESR네임스페이스 생성하려면 소프트웨어 컴퍼넌트가 있어야하고 그안에 네임스페이스는 여러개 생성할수 있음
- 네임스페이스 종류는 Repository Namespaces, XML Namespaces가 있음
- Repository Namespaces는
- ES Repository 디자인 요소의 객체 이름간에 충돌을 방지하기 위해 사용
- 프록시 방식(SPROXY티코드)에서 네임스페이스를 식별자 정의
- Integration Directory에서 Receiver 시스템에 동일한이름,네임스페이스가 존재한다면? 식별할수 없다고 함
- Sender 인터페이스 이름과 네임스페이스는 메시지 헤더의 일부라고 하며 라우팅시 결정되는듯
- 소프트웨어 컴포넌트 마다 다른 네임스페이스를 사용해야하며 동일하면 경고메시지가 표시되는듯
- 네임스페이스 안에 객체가 생성된 경우 네임스페이스 이름을 변경할수 없음 하지만 없는 경우 변경할수 있음
- XML Namespaces는
- Exchanging messages에서 중요하다고 함
- XML네임스페이스와 Repository네임스페이스가 달라야하는 경우도 존재
- "어느 타겟 시스템 SOAP연계 시 제공받은 웹서비스 환경에 맞춰 XML 네임스페이스나 UDF를 통해 강제로 메시지 타입의 네임스페이스를 변경해준적도 있었음"
- 메시지 타입 생성 시 상위 네임페이스 명이 들어감(변경가능)
- 메시지타입에는 XML Namespace와 데이터타입 추가시 자동으로 들어가는 Namespace가 필수로 들어감
- XML Namespace는 수정이 가능
- 위 두개 Namespace 값이 서로 다르다면?
- xmlns:prefix값="http://aaa.bbb/ccc/ddd/eee"의 접두사가 메시지타입 엘리먼트에 타입에 들어감
- xmlns="http://fff.ggg" 이렇게 XSD구조에서 보임
- 메시지타입XSD와 WSDL 정의된 내용은 다를 수 있음
PO 네임스페이스 테스트
- Send Test 기능으로 보낼때 메시지 타입과의 네임스페이스를 다르게 보낸다면?
Send Test에서는 InterfaceDetermination did not yield any actual interface 발생
메시지모니터링 로그 상태는 'Log version' Audit 로그에서는
Returning to applicationException: com.sap.aii.adapter.xi.routing.RoutingException: InterfaceDetermination did not yield any actual interface 에러확인- 메시지 매핑 테스트에서 네임스페이스가 다른 메시지를 붙여보면? 빨간불 들어오고 테스트 실행해보면 타겟구조와 매핑 실패
Cannot create target element [루트 태그] Values missing in queue context. Target XSD requires a value for this element...
리턴에서는 타겟 메시지타입에 매핑없이 XML네임스페이스 공백 넣고 타겟구조만 생성할 경우 네임스페이스가 없이 생성 → 동기 같은경우 요청하는 구조에만 XML네임스페이스 넣고 리턴구조에 네임스페이스 없는 경우에도 인터페이스가 잘 수행되는 경우 있음
- 이상한 현상은 XML메시지 타입 넣고 루트태그 매핑 후에 엑티브하면 당연히 타겟 구조에 네임스페이스가 있을거고 이후에 매핑제거 후 네임스페이스 공백을 넣어도 테스트시 리턴구조에 네임스페이스가 보임 → 캐시반영이 늦은건가..?
- 리턴 메시지타입에 XML네임스페이스 공백 후 엑티브 하는 경우 경고 메시지 발생
Using an empty XML namespace contradicts the WS-I standard
"XML네임스페이스 값이 없는건 WS-I표준에 위배된다고 하는것 같은데 그래서 이해 할수 없는 현상에서 표준에 위배되어 요청할때 XML 네임스페이스를 자동으로 리턴 메시지타입에 넣어주는것 같음(개인적인 생각) 그래서 XML Namespace 값 없다고 경고주는건 무시해도 될듯"
댓글 없음:
댓글 쓰기