42.3. 소비자 구현에서 컨텍스트 작업
42.3.1. 개요
소비자 구현은 BindingProvider 인터페이스를 통해 컨텍스트 정보에 액세스할 수 있습니다. BindingProvider 인스턴스는 두 개의 개별 컨텍스트에서 컨텍스트 정보를 보유합니다.The BindingProvider instance holds context information in two separate contexts:
- 요청 컨텍스트 요청 컨텍스트를 사용하면 아웃바운드 메시지에 영향을 주는 속성을 설정할 수 있습니다.The request context enables you to set properties that affect outbound messages. 요청 컨텍스트 속성은 특정 포트 인스턴스에 적용되며, 설정된 경우 속성은 해당 속성이 명시적으로 지워질 때까지 포트에서 수행된 모든 후속 작업 호출에 영향을 줍니다.Request context properties are applied to a specific port instance and, once set, the properties affect every subsequent operation invocation made on the port, until such as a property is explicitly cleared. 예를 들어 요청 컨텍스트 속성을 사용하여 연결 제한 시간을 설정하거나 헤더에서 전송하기 위해 데이터를 초기화할 수 있습니다.
- 응답 컨텍스트 응답 컨텍스트 를 사용하면 현재 스레드에서 만든 마지막 작업 호출에 대한 응답으로 설정된 속성 값을 읽을 수 있습니다.The response context enables you to read the property values set by the response to the last operation invocation made from the current thread. 응답 컨텍스트 속성은 작업을 호출할 때마다 재설정됩니다. 예를 들어 응답 컨텍스트 속성에 액세스하여 마지막 인바운드 메시지에서 수신된 헤더 정보를 읽을 수 있습니다.For example, you might access a response context property to read header information received from the last inbound message.
메시지 컨텍스트의 애플리케이션 범위에 배치된 정보만 소비자 구현에서 액세스할 수 있습니다.
42.3.2. 컨텍스트 가져오기
컨텍스트는 javax.xml.ws.BindingProvider 인터페이스를 사용하여 가져옵니다. BindingProvider 인터페이스에는 컨텍스트를 가져오는 두 가지 방법이 있습니다.
getRequestContext()
예 42.7. “getRequestContext()
메서드” 에 표시된getRequestContext()
메서드는 요청 컨텍스트를Map
오브젝트로 반환합니다. 반환된Map
개체를 사용하여 컨텍스트의 콘텐츠를 직접 조작할 수 있습니다.예 42.7.
getRequestContext()
메서드Map<String, Object>
getRequestContext
getResponseContext()
예 42.8. “getResponseContext()
메서드” 에 표시된getResponseContext()
는 응답 컨텍스트를Map
오브젝트로 반환합니다. 반환된Map
오브젝트의 내용은 현재 스레드에서 이루어진 원격 서비스에 대한 가장 최근의 성공적인 요청에서 응답 컨텍스트 내용의 상태를 반영합니다.예 42.8.
getResponseContext()
메서드Map<String, Object>
getResponseContext
프록시 개체는 BindingProvider 인터페이스를 구현 하므로 프록시 개체를 캐스팅 하 여 BindingProvider 개체를 가져올 수 있습니다.Since proxy objects implement the BindingProvider interface, a BindingProvider object can be obtained by casting a proxy object. BindingProvider 오브젝트에서 얻은 컨텍스트는 이를 생성하는 데 사용되는 프록시 오브젝트에서 호출되는 작업에만 유효합니다.
예 42.9. “소비자의 요청 컨텍스트 가져오기” 프록시에 대한 요청 컨텍스트를 가져오는 코드를 보여줍니다.
예 42.9. 소비자의 요청 컨텍스트 가져오기
// Proxy widgetProxy obtained previously BindingProvider bp = (BindingProvider)widgetProxy; Map<String, Object> requestContext = bp.getRequestContext();
42.3.3. 컨텍스트에서 속성을 읽습니다.Read a property from a context.
소비자 컨텍스트는 java.util.Map<String, Object> 오브젝트에 저장
됩니다. 맵에는 임의의 오브젝트가 포함된 String
개체와 값이 있는 키가 있습니다. java.util.Map.get()
을 사용하여 응답 컨텍스트 속성 맵의 항목에 액세스합니다.
특정 컨텍스트 속성인 ContextPropertyName 을 검색하려면 예 42.10. “응답 컨텍스트 속성 읽기” 에 표시된 코드를 사용합니다.
예 42.10. 응답 컨텍스트 속성 읽기
// Invoke an operation. port.SomeOperation(); // Read response context property. java.util.Map<String, Object> responseContext = ((javax.xml.ws.BindingProvider)port).getResponseContext(); PropertyType propValue = (PropertyType) responseContext.get(ContextPropertyName);
42.3.4. 컨텍스트에서 속성 설정
소비자 컨텍스트는 java.util.Map<String, Object
> 오브젝트에 저장된 해시 맵입니다. 이 맵에는 임의의 오브젝트인 String
개체와 값이 있는 키가 있습니다. 컨텍스트에서 속성을 설정하려면 java.util.Map.put()
메서드를 사용합니다.
요청 컨텍스트와 응답 컨텍스트 모두에서 속성을 설정할 수 있지만 요청 컨텍스트에 대한 변경 사항만 메시지 처리에 영향을 미칩니다. 현재 스레드에서 각 원격 호출이 완료되면 응답 컨텍스트의 속성이 재설정됩니다.
예 42.11. “요청 컨텍스트 속성 설정” 에 표시된 코드는 BindingProvider.ENDPOINT_ADDRESS_PROPERTY 값을 설정하여 대상 서비스 공급자의 주소를 변경합니다.
예 42.11. 요청 컨텍스트 속성 설정
// Set request context property. java.util.Map<String, Object> requestContext = ((javax.xml.ws.BindingProvider)port).getRequestContext(); requestContext.put(BindingProvider.ENDPOINT_ADDRESS_PROPERTY, "http://localhost:8080/widgets"); // Invoke an operation. port.SomeOperation();
속성이 요청 컨텍스트에서 설정되면 해당 값은 모든 후속 원격 호출에 사용됩니다.Once a property is set in the request context its value is used for all subsequent remote invocations. 값을 변경할 수 있으며 변경된 값이 사용됩니다.
42.3.5. 지원되는 컨텍스트
Apache CXF는 소비자 구현에서 다음 컨텍스트 속성을 지원합니다.
속성 이름 | 설명 |
---|---|
| |
ENDPOINT_ADDRESS_PROPERTY |
대상 서비스의 주소를 지정합니다. 값은 문자열로 저장 |
USERNAME_PROPERTY[a] |
HTTP 기본 인증에 사용되는 사용자 이름을 지정합니다. 값은 문자열로 저장 |
PASSWORD_PROPERTY[b] |
HTTP 기본 인증에 사용되는 암호를 지정합니다. 값은 문자열로 저장 |
SESSION_MAINTAIN_PROPERTY[c] |
클라이언트가 세션 정보를 유지할지 여부를 지정합니다. 값은 |
| |
CLIENT_ADDRESSING_PROPERTIES |
소비자가 원하는 서비스 공급자에 연결하는 데 사용하는 WS-Addressing 정보를 지정합니다. 값은 |
| |
JMS_CLIENT_REQUEST_HEADERS | 메시지에 대한 JMS 헤더를 포함합니다. 자세한 내용은 42.4절. “JMS Message Properties 사용” 에서 참조하십시오. |
[a]
이 속성은 HTTP 보안 설정에 정의된 사용자 이름으로 재정의됩니다.
[b]
이 속성은 HTTP 보안 설정에 정의된 암호로 재정의됩니다.
[c]
Apache CXF는 이 속성을 무시합니다.
|