SAAJ(SOAP with Attachments API for Java) 인터페이스

SAAJ(SOAP with Attachments API for Java™) 인터페이스는 Java 프로그래밍 모델에서 인터넷을 통해 XML 문서를 보내는 표준 방법을 제공하는 SOAP 메시징에 사용됩니다. SAAJ는 런타임 환경을 통해 순회할 때 적절한 컨텍스트에 대해 SOAP 메시지를 조작하기 위해 사용됩니다.

우수 사례: IBM® WebSphere® Application Server는 JAX-WS(Java API for XML-Based Web Services) 프로그래밍 모델 및 JAX-RPC(Java API for XML-based RPC) 프로그래밍 모델을 지원합니다. JAX-WS는 JAX-RPC 프로그래밍 모델에서 제공되는 기반을 확장하는 차세대 웹 서비스 프로그래밍 모델입니다. 전략적 JAX-WS 프로그래밍 모델을 사용하면 표준 기반 어노테이션 모델의 지원을 통해 웹 서비스 및 클라이언트의 개발이 간소화됩니다. JAX-RPC 프로그래밍 모델과 애플리케이션이 계속해서 지원된다고 해도 구현이 쉬운 JAX-WS 프로그래밍 모델을 이용하여 새 웹 서비스 애플리케이션과 클라이언트를 개발하십시오.

JAX-RPC(Java API for XML-Based RPC) 프로그래밍 모델은 SAAJ 1.2를 지원하여 XML을 조작합니다.

JAX-WS 프로그래밍 모델은 SAAJ 1.2 및 1.3을 지원합니다. SAAJ 1.3은 SOAP 1.2 메시지에 대한 지원을 포함합니다.

SAAJ 1.2 및 SAAJ 1.3 스펙의 차이점은 "SAAJ 버전의 차이점" 토픽에서 검토할 수 있습니다.

웹 서비스에서 메시지 사용 방법

웹 서비스는 XML 기술을 사용하여 메시지를 교환합니다. 이 메시지는 XML 스키마를 확인합니다. 웹 서비스 애플리케이션 개발 시 DOM(Document Object Model)과 같이 제한된 XML API와 작업합니다. 런타임 중 Java 오브젝트를 조작하고 직렬화 및 직렬화 해제를 완료하는 것이 가장 효율적입니다.

웹 서비스는 SOAP 메시지를 사용하여 클라이언트와 서버 간 원격 프로시저 호출(RPC)을 나타냅니다. 일반적으로 SOAP 메시지는 매개변수를 표시하고 값을 리턴하는 일련의 Java 값-유형 비즈니스 오브젝트로 역직렬화됩니다. 또한, Java 프로그래밍 모델은 애플리케이션과 핸들러를 지원하는 API를 제공하여 SOAP 메시지를 직접 조작합니다. 프로그래밍 모델에서 지원되는 XML 스키마 유형의 수가 제한되기 때문에, 스펙은 SAAJ 데이터 모델을 확장기능으로 제공하여 메시지를 조작합니다.

XML 스키마 유형을 조작하려면, XML 스키마 유형을 사용자 정의 데이터 바인더가 있는 Java 유형으로 맵핑해야 합니다.

SAAJ 인터페이스

SAAJ-관련 클래스는 javax.xml.soap 패키지에 있습니다. SAAJ는 인터페이스와 추상 클래스에 빌드되며 다수의 클래스가 팩토리 메소드 호출로 시작되어 SOAPConnectionFactory 및 SOAPFactory와 같은 팩토리를 작성합니다.

문제점 방지 문제점 방지: Java 보안이 사용되고 jaxm.properties 파일 읽기 권한이 부여되지 않은 경우, SOAPFactory 인스턴스가 javax.xml.soap.SOAPFactory.newInstance()에 대한 호출로 작성되거나 또는 MessageFactory 인스턴스가 MessageFactory.newInstance()에 대한 호출로 작성되면 SecurityException 예외가 발생하고 다음 예외는 시스템 로그에 기록됩니다.
Permission: 

      /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties : access denied 
(java.io.FilePermission /opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties
read)

Code: 

     com.ibm.ws.wsfvt.test.binding.addr1.binder.AddressBinder  
in  {file:/opt/IBM/WebSphere/AppServer/profiles/AppSrv01/installedApps/
ahp6405Node01Cell/DataBinding.ear/address1.war/WEB-INF/lib
/addressbinder1.jar}

Stack Trace: 

java.security.AccessControlException: access denied (java.io.FilePermission 
/opt/IBM/WebSphere/AppServer/java/jre/lib/jaxm.properties read)
.

SOAPFactory는 예외를 무시하고 로드할 구현을 판별하는 다음 단계로 계속합니다. 따라서 이 보안 예외에 대한 로그 항목을 무시할 수 있습니다.

이 제품은 WS-Addressing(WS-A), WS-Atomic Transaction(WS-AT), WS-Notification과 같은 다른 웹 서비스 기술 지원에 SOAPFactory를 사용하기 때문에 Java 보안이 사용되는 경우 모든 웹 서비스 애플리케이션에서 이 SecurityException을 무시할 수 있습니다.

gotcha
가장 공통적으로 사용되는 클래스는 다음과 같습니다.
  • SOAPMessage: 메시지, XML 및 비-XML 파트 포함
  • SOAPHeader: SOAP 헤더 XML 요소 표시
  • SOAPBody: SOAP 본문 XML 요소 표시
  • SOAPElement: SOAP 메시지의 다른 요소 표시
다른 파트의 SAAJ 인터페이스에는 다음이 포함됩니다.
  • MessageContext: SOAP 메시지 및 관련 특성 포함
  • AttachmentPart: 2진 첨부 파일 표시
  • SOAPPart: 메시지의 XML 파트 표시
  • SOAPEnvelope: SOAP 엔벨로프 XML 요소 표시
  • SOAPFault: SOAP 결함 XML 요소 표시

SAAJ 모델의 1차 인터페이스는 javax.xml.soap.SOAPElement이며, SOAPElement라고도 합니다. 이 모델을 사용하여 애플리케이션은 이미 존재하는 DOM 코드를 사용하는 SAAJ 모델을 처리할 수 있습니다. 보다 쉽게 이미 존재하는 DOM 오브젝트를 SAAJ 오브젝트로 변환할 수 있습니다.

SAAJ 인터페이스를 사용하여 작성된 메시지는 SOAP 표준을 따릅니다. SOAP 메시지는 SAAJ 모델에서 javax.xml.soap.SOAPMessage 오브젝트로 표시됩니다. 메시지의 XML 컨텐츠는 javax.xml.soap.SOAPPart 오브젝트로 표시됩니다. 각 SOAP 파트에는 SOAP 엔벨로프가 있습니다. 이 엔벨로프는 SAAJ javax.xml.SOAPEnvelope 오브젝트로 표시됩니다. SOAP 스펙은 SOAP 엔벨로프에 있는 다양한 요소를 정의합니다. SAAJ는 SOAP 엔벨로프에서 다양한 요소의 오브젝트를 정의합니다.

SOAP 메시지는 첨부 파일을 호출하는 비-XML 데이터도 포함할 수 있습니다. 이 첨부 파일은 SOAPMessage 오브젝트에서 액세스할 수 있는 SAAJ AttachmentPart 오브젝트로 표시됩니다.

핸들러와 애플리케이션이 단단하게 바인드된 맵핑 대신 일반 SOAPElement API를 사용하는 이유는 다음과 같습니다.
  • 웹 서비스는 다른 웹 서비스에 대한 콘딧일 수 있습니다. 이 경우, SOAP 메시지는 전달만 됩니다.
  • 웹 서비스는 SDO(Service Data Object)와 같이 다른 데이터 모델을 사용하여 메시지를 조작할 수 있습니다. 보다 쉽게 SAAJ DOM을 다른 데이터 모델로 변환할 수 있습니다.
  • 디지털 서명 유효성 검증 핸들러와 같은 핸들러는 일반적으로 메시지를 조작하려고 합니다.

SOAPElement 인터페이스가 항상 레거시 시스템에 대한 최상의 대체가 되지 않기 때문에, XML 스키마 유형을 맵핑하려면 추가 단계로 이동해야 할 수 있습니다. 이 경우 SDO와 같은 일반 프로그래밍 모델을 사용하려고 할 수 있으며, 데이터 중심 애플리케이션에 대해 보다 적절합니다.

SDO나 데이터 오브젝트를 Java 오브젝트와 쌍으로 연결하는 사용자 정의 데이터 바인딩을 포함하도록 XML 스키마를 구성할 수 있습니다. 예를 들어, 런타임은 수신 SOAP 메시지를 SOAPElement 인터페이스로 렌더링하고 고객 데이터 바인더로 전달하여 추가로 처리합니다. 수신 메시지가 SDO를 포함하면, 런타임은 데이터 오브젝트 코드를 인식하고 해당 유형 맵핑을 조회하여 사용자 정의 바인더를 찾고, SDO 코드를 표시하는 SOAPElement 인터페이스를 빌드합니다. SOAPElement는 SDOCustomBinder로 전달됩니다.

사용자 정의 데이터 바인더에 대한 정보를 참조하여 SOAPElement, SDO 및 사용자 정의 바인더를 사용한 애플리케이션 개발의 프로세스에 대해 배웁니다.

전이 사용자용 전이 사용자용: WebSphere Application Server 버전 8에서부터, 해당 요소가 메시지에 없는 경우 SOAPMessage.getSOAPHeadergetSOAPBody 메소드는 SOAPException이 발생합니다. 시스템 특성, com.ibm.websphere.webservices.soap.IBMSOAPMessage.ENABLE_LEGACY_GETSOAP_BEHAVIOR은 예외를 처리하는 것이 아니라 널을 리턴하도록 동작을 복귀하기 위해 제공됩니다. 이 시스템 특성은 JVM 사용자 정의 특성, com.ibm.websphere.webservices.soap.enable.legacy.get.behavior를 사용하여 설정됩니다. 이 JVM 사용자 정의 특성의 기본값은 false입니다. 이 JVM 특성을 true로 설정하면 이전 동작으로 복귀되며, 해당 메시지가 없는 경우 SOAPMessage.getSOAPHeader 및 getSOAPBody 메소드에 대한 널을 리턴합니다.

널을 리턴하는 이전 동작은 이 스펙을 준수하지 않습니다.

trns

지원되는 표준 및 스펙의 전체 목록은 웹 서비스 스펙과 API 문서를 참조하십시오.


주제 유형을 표시하는 아이콘 개념 주제



시간소인 아이콘 마지막 업데이트 날짜: last_date
http://www14.software.ibm.com/webapp/wsbroker/redirect?version=cord&product=was-nd-mp&topic=cwbs_saaj
파일 이름:cwbs_saaj.html