42.3. 소비자 구현에서 컨텍스트 작업
42.3.1. 개요
소비자 구현은 BindingProvider 인터페이스를 통해 컨텍스트 정보에 액세스할 수 있습니다. BindingProvider 인스턴스는 두 개의 개별 컨텍스트에 컨텍스트 정보를 보유합니다.
- 요청 컨텍스트 요청 컨텍스트 를 사용하면 아웃바운드 메시지에 영향을 주는 속성을 설정할 수 있습니다. 요청 컨텍스트 속성은 특정 포트 인스턴스에 적용되며, 설정된 경우 속성과 같은 시간이 명시적으로 지워질 때까지 포트에서 수행된 모든 후속 작업 호출에 영향을 미칩니다. 예를 들어 요청 컨텍스트 속성을 사용하여 연결 시간 초과를 설정하거나 헤더에서 전송할 데이터를 초기화할 수 있습니다.
- 응답 컨텍스트 응답 컨텍스트 를 사용하면 현재 스레드에서 수행된 마지막 작업 호출에 대한 응답으로 설정된 속성 값을 읽을 수 있습니다. 응답 컨텍스트 속성은 모든 작업 호출 후 재설정됩니다. 예를 들어 응답 컨텍스트 속성에 액세스하여 마지막 인바운드 메시지에서 수신된 헤더 정보를 읽을 수 있습니다.
메시지 컨텍스트의 애플리케이션 범위에 배치된 정보만 소비자 구현에서 액세스할 수 있습니다.
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 개체를 가져올 수 있습니다.Because 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. 컨텍스트에서 속성 읽기
소비자 컨텍스트는 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 메시지 속성 작업” 에서 참조하십시오. |
[a]
이 속성은 HTTP 보안 설정에 정의된 사용자 이름으로 재정의됩니다.
[b]
이 속성은 HTTP 보안 설정에 정의된 암호로 재정의됩니다.
[c]
Apache CXF는 이 속성을 무시합니다.
|