42.2. 서비스 구현에서 컨텍스트 작업

42.2.1. 개요

컨텍스트 정보는 WebServiceContext 인터페이스를 사용하여 서비스 구현에 사용 가능하게 됩니다. WebServiceContext 개체에서 현재 요청의 컨텍스트 속성으로 채워지는 MessageContext 개체를 애플리케이션 범위에서 가져올 수 있습니다.From the WebServiceContext object you can obtain a MessageContext object that is populated with the current request's context properties in the application scope. 속성 값을 조작할 수 있으며 응답 체인을 통해 다시 전파됩니다.

참고

MessageContext 인터페이스는 java.util.Map 인터페이스에서 상속됩니다. 해당 콘텐츠는 맵 인터페이스의 메서드를 사용하여 조작할 수 있습니다.

42.2.2. 컨텍스트 가져오기

서비스 구현에서 메시지 컨텍스트를 얻으려면 다음을 수행합니다.

  1. WebServiceContext 유형의 변수를 선언합니다.
  2. javax.annotation.Resource 주석으로 변수를 장식하여 컨텍스트 정보가 변수에 삽입됨을 나타냅니다.
  3. get MessageContext () 메서드를 사용하여 WebServiceContext 개체에서 MessageContext 개체를 가져옵니다.

    중요

    getMessageContext()@WebMethod 주석으로 장식되는 메서드에서만 사용할 수 있습니다.

예 42.2. “서비스 구현에서 컨텍스트 오브젝트 가져오기” context 개체를 가져오기 위한 코드를 표시합니다.

예 42.2. 서비스 구현에서 컨텍스트 오브젝트 가져오기

import javax.xml.ws.*;
import javax.xml.ws.handler.*;
import javax.annotation.*;

@WebServiceProvider
public class WidgetServiceImpl
{
  @Resource
  WebServiceContext wsc;

  @WebMethod
  public String getColor(String itemNum)
  {
    MessageContext context = wsc.getMessageContext();
  }

  ...
}

42.2.3. 컨텍스트에서 속성을 읽습니다.Read a property from a context.

구현을 위한 MessageContext 개체를 얻은 후에는 예 42.3. “MessageContext.get() 메서드” 에 표시된 get() 메서드를 사용하여 여기에 저장된 속성에 액세스할 수 있습니다.

예 42.3. MessageContext.get() 메서드

vgetObject

참고

get() 은 맵 인터페이스에서 상속됩니다.

key 매개변수는 컨텍스트에서 검색할 속성을 나타내는 문자열입니다. get() 는 속성에 대한 적절한 유형으로 캐스팅되어야 하는 개체를 반환합니다. 표 42.1. “서비스 구현 컨텍스트에서 사용 가능한 속성” 서비스 구현의 컨텍스트에서 사용할 수 있는 여러 속성을 나열합니다.Lists a number of the properties that are available in a service implementation's context.

중요

컨텍스트에서 반환된 개체의 값을 변경하면 컨텍스트의 속성 값도 변경됩니다.Changing the values of the object returned from the context also changes the value of the property in the context.

예 42.4. “서비스의 메시지 컨텍스트에서 속성 가져오기” 호출된 작업을 나타내는 WSDL 작업 요소의 이름을 가져오는 코드를 표시합니다.

예 42.4. 서비스의 메시지 컨텍스트에서 속성 가져오기

import javax.xml.ws.handler.MessageContext;
import org.apache.cxf.message.Message;

  ...
  // MessageContext context retrieved in a previous example
  QName wsdl_operation = (QName)context.get(Message.WSDL_OPERATION);

42.2.4. 컨텍스트에서 속성 설정

구현을 위한 MessageContext 개체를 얻은 후에는 예 42.5. “MessageContext.put() 메서드” 에 표시된 put() 메서드를 사용하여 속성을 설정하고 기존 속성을 변경할 수 있습니다.

예 42.5. MessageContext.put() 메서드

VputKkeyVvalueClassCastExceptionIllegalArgumentException

설정 중인 속성이 메시지 컨텍스트에 이미 존재하는 경우 put() 메서드는 기존 값을 새 값으로 교체하고 이전 값을 반환합니다. 속성이 메시지 컨텍스트에 없는 경우 put() 메서드는 속성을 설정하고 null 을 반환합니다.

예 42.6. “서비스의 메시지 컨텍스트에서 속성 설정” HTTP 요청에 대한 응답 코드를 설정하기 위한 코드를 표시합니다.

예 42.6. 서비스의 메시지 컨텍스트에서 속성 설정

import javax.xml.ws.handler.MessageContext;
import org.apache.cxf.message.Message;

  ...
  // MessageContext context retrieved in a previous example
  context.put(Message.RESPONSE_CODE, new Integer(404));

42.2.5. 지원되는 컨텍스트

표 42.1. “서비스 구현 컨텍스트에서 사용 가능한 속성” 서비스 구현 개체의 컨텍스트를 통해 액세스할 수 있는 속성을 나열합니다.Lists the properties accessible through the context in a service implementation object.

표 42.1. 서비스 구현 컨텍스트에서 사용 가능한 속성

속성 이름설명

org.apache.cxf.message.Message

PROTOCOL_HEADERS[a]

전송별 헤더 정보를 지정합니다. 값은 java.util.Map<String, List<String>>.

RESPONSE_CODE

사용자에게 반환되는 응답 코드를 지정합니다.Specifies the response code returned to the consumer. 값은 Integer 개체로 저장됩니다.

ENDPOINT_ADDRESS

서비스 공급자의 주소를 지정합니다. 값은 문자열로 저장 됩니다.

HTTP_REQUEST_METHOD

요청과 함께 전송된 HTTP 동사를 지정합니다. 값은 문자열로 저장 됩니다.

PATH_INFO

요청 중인 리소스의 경로를 지정합니다. 값은 문자열로 저장 됩니다.

경로는 hostname 뒤 및 쿼리 문자열 앞에 있는 URI의 부분입니다. 예를 들어 엔드포인트 URI가 http://cxf.apache.org/demo/widgets 인 경우 경로는 /demo/widgets 입니다.

QUERY_STRING

요청을 호출하는 데 사용되는 URI에 연결된 쿼리(있는 경우)를 지정합니다. 값은 문자열로 저장 됩니다.

쿼리는 URI의 끝에 표시됩니까 ?? . 예를 들어 http://cxf.apache.org/demo/widgets?color 에 대한 요청이 발생하면 쿼리는 색상 입니다.

MTOM_ENABLED

SOAP 첨부에 대해 서비스 공급자가 MTOM을 사용할 수 있는지 여부를 지정합니다. 값은 부울 로 저장됩니다.

SCHEMA_VALIDATION_ENABLED

서비스 공급자가 스키마에 대한 메시지의 유효성을 검사할지 여부를 지정합니다.Specifies whether the service provider validates messages against a schema. 값은 부울 로 저장됩니다.

FAULT_STACKTRACE_ENABLED

런타임에서 스택 추적을 오류 메시지와 함께 제공하는지를 지정합니다. 값은 부울 로 저장됩니다.

CONTENT_TYPE

메시지의 MIME 형식을 지정합니다. 값은 문자열로 저장 됩니다.

BASE_PATH

요청 중인 리소스의 경로를 지정합니다. 이 값은 java.net.URL 으로 저장됩니다.

경로는 hostname 뒤 및 쿼리 문자열 앞에 있는 URI의 부분입니다. 예를 들어 끝점 URL이 http://cxf.apache.org/demo/widgets 인 경우 기본 경로는 /demo/widgets 입니다.

ENCODING

메시지의 인코딩을 지정합니다. 값은 문자열로 저장 됩니다.

FIXED_PARAMETER_ORDER

매개변수가 메시지에 특정 순서로 표시될지 여부를 지정합니다. 값은 부울 로 저장됩니다.

MAINTAIN_SESSION

소비자가 향후 요청에 대해 현재 세션을 유지 관리하도록 지정합니다. 값은 부울 로 저장됩니다.

WSDL_DESCRIPTION

구현 중인 서비스를 정의하는 WSDL 문서를 지정합니다. 값은 org.xml.sax.InputSource 오브젝트로 저장됩니다.

WSDL_SERVICE

구현 중인 서비스를 정의하는 wsdl:service 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_PORT

서비스에 액세스하는 데 사용되는 엔드포인트를 정의하는 wsdl:port 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_INTERFACE

구현 중인 서비스를 정의하는 wsdl:portType 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_OPERATION

소비자가 호출한 작업에 해당하는 wsdl:operation 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

javax.xml.ws.handler.MessageContext

MESSAGE_OUTBOUND_PROPERTY

메시지가 아웃바운드인지 여부를 지정합니다. 값은 부울 로 저장됩니다. true 는 메시지가 아웃바운드로 지정되도록 지정합니다.

INBOUND_MESSAGE_ATTACHMENTS

요청 메시지에 포함된 첨부 파일이 포함되어 있습니다. 값은 java.util.Map<String, DataHandler>로 저장됩니다.

맵의 키 값은 헤더의 MIME Content-ID입니다.

OUTBOUND_MESSAGE_ATTACHMENTS

응답 메시지에 대한 첨부 파일이 포함되어 있습니다. 값은 java.util.Map<String, DataHandler>로 저장됩니다.

맵의 키 값은 헤더의 MIME Content-ID입니다.

WSDL_DESCRIPTION

구현 중인 서비스를 정의하는 WSDL 문서를 지정합니다. 값은 org.xml.sax.InputSource 오브젝트로 저장됩니다.

WSDL_SERVICE

구현 중인 서비스를 정의하는 wsdl:service 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_PORT

서비스에 액세스하는 데 사용되는 엔드포인트를 정의하는 wsdl:port 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_INTERFACE

구현 중인 서비스를 정의하는 wsdl:portType 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

WSDL_OPERATION

소비자가 호출한 작업에 해당하는 wsdl:operation 요소의 정규화된 이름을 지정합니다. 값은 QName 으로 저장됩니다.

HTTP_RESPONSE_CODE

사용자에게 반환되는 응답 코드를 지정합니다.Specifies the response code returned to the consumer. 값은 Integer 개체로 저장됩니다.

HTTP_REQUEST_HEADERS

요청에서 HTTP 헤더를 지정합니다. 값은 java.util.Map<String, List<String>>.

HTTP_RESPONSE_HEADERS

응답에 대한 HTTP 헤더를 지정합니다. 값은 java.util.Map<String, List<String>>.

HTTP_REQUEST_METHOD

요청과 함께 전송된 HTTP 동사를 지정합니다. 값은 문자열로 저장 됩니다.

SERVLET_REQUEST

서블릿의 요청 오브젝트를 포함합니다. 이 값은 javax.servlet.http.HttpServletRequest 로 저장됩니다.

SERVLET_RESPONSE

서블릿의 response 오브젝트를 포함합니다. 이 값은 javax.servlet.http.HttpResponse 로 저장됩니다.

SERVLET_CONTEXT

서블릿의 context 오브젝트를 포함합니다. 이 값은 javax.servlet.ServletContext 로 저장됩니다.

PATH_INFO

요청 중인 리소스의 경로를 지정합니다. 값은 문자열로 저장 됩니다.

경로는 hostname 뒤 및 쿼리 문자열 앞에 있는 URI의 부분입니다. 예를 들어 엔드포인트 URL이 http://cxf.apache.org/demo/widgets 인 경우 경로는 /demo/widgets 입니다.

QUERY_STRING

요청을 호출하는 데 사용되는 URI에 연결된 쿼리(있는 경우)를 지정합니다. 값은 문자열로 저장 됩니다.

쿼리는 URI의 끝에 표시됩니까 ?? . 예를 들어 http://cxf.apache.org/demo/widgets?color 에 대한 요청이 발생하면 쿼리 문자열이 색상 입니다.

REFERENCE_PARAMETERS

WS-Addressing 참조 매개 변수를 지정합니다. 여기에는 wsa:IsReferenceParameter 속성이 true 로 설정된 모든 SOAP 헤더가 포함됩니다. 값은 java.util.List 로 저장됩니다.

org.apache.cxf.transport.jms.JMSConstants

JMS_SERVER_HEADERS

JMS 메시지 헤더를 포함합니다. 자세한 내용은 42.4절. “JMS Message Properties 사용” 에서 참조하십시오.

[a] HTTP를 사용하는 경우 이 속성은 표준 JAX-WS 정의 속성과 동일합니다.