JAX-WS로 전송 헤더 보내기

기존 JAX-WS(Java™ API for XML-Based Web Services) 클라이언트를 사용하여 애플리케이션에서 정의된 정보를 웹 서비스 요청과 함께 전송 헤더를 사용하여 전송할 수 있습니다. 또한 JAX-WS 웹 서비스 엔드포인트를 사용하면 애플리케이션에서 정의된 정보를 웹 서비스 응답 메시지와 함께 전송 헤더를 사용하여 전송할 수 있습니다.

시작하기 전에

전송 헤더를 보내기 위해 사용으로 설정할 수 있는 JAX-WS 웹 서비스 클라이언트가 필요합니다.

전송 헤더를 보내는 것은 JAX-WS 웹 서비스 클라이언트에서 지원되며 HTTP 및 JMS 전송에 대해서 지원됩니다. 웹 서비스 클라이언트는 게이트웨이 기능과 같은 중간 계층을 통하지 않고 직접 JAX-WS API를 호출해야 합니다.

이 태스크 정보

JAX-WS 프로그래밍 모델을 사용할 때 클라이언트는 웹 서비스 요청 메시지와 함께 전송 헤더의 값을 보내려면 BindingProvider의 RequestContext 오브젝트에 대한 특성을 설정해야 합니다. 이 특성을 설정한 후에 연관된 특성이 null로 설정되거나 BindingProvider 오브젝트가 버려질 때까지 해당 BindingProvider 오브젝트에 대한 후속 원격 메소드 호출의 모든 요청에서 값이 설정됩니다.

JAX-WS 웹 서비스 클라이언트 애플리케이션의 아웃바운드 요청에서 전송 헤더의 값을 전송하려면 클라이언트 코드를 다음과 같이 수정하십시오.

프로시저

  1. 전송 헤더가 들어 있는 java.util.Map 오브젝트를 작성하십시오.
  2. 클라이언트가 전송하게 할 각 전송 헤더의 맵 오브젝트에 항목을 추가하십시오.
    1. 맵 항목 키를 전송 헤더 ID와 정확하게 일치하는 문자열로 설정하십시오. 예약 헤더 이름(예: HTTP의 경우에 Cookie)을 사용하여 헤더 ID를 정의할 수 있습니다. 또는 헤더 ID를 사용자가 정의할 수 있습니다(예: MyTransportHeader). 특정 헤더 ID는 고유한 방식으로 처리되지만 헤더 ID 값에 대한 다른 검사는 수행되지 않습니다. 특별히 고려해야 하는 점이 있는 HTTP 헤더 ID에 대해 자세히 알아보려면 전송 헤더 특성 우수 사례를 읽어 보십시오. com.ibm.websphere.webservices.Constants 클래스에서 공통 헤더 ID 문자열 상수(예: HTTP_HEADER_SET_COOKIE)를 찾을 수 있습니다.
    2. 맵 항목 값을 전송 헤더의 값으로 설정하십시오. 이 값의 유형은 다음 데이터 유형 중 하나일 수 있습니다.
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean
  3. com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES 특성을 사용하여 BindingProvider의 RequestContext에서 맵 오브젝트를 설정하십시오. REQUEST_TRANSPORT_PROPERTIES 특성 값이 설정되면 해당 맵이 발신 요청의 헤더 값을 설정하기 위한 후속 호출에서 사용됩니다. REQUEST_TRANSPORT_PROPERTIES 특성 값이 null로 설정되는 경우 발신 요청으로 전송 특성이 전송되지 않습니다. 이러한 특성에 대해 자세히 알아보려면 전송 헤더 특성 문서를 참조하십시오.
  4. BindingProvider 인스턴스에 대해 원격 메소드 호출 발행 맵의 헤더 및 연관된 값이 각 메소드 호출에 대한 발신 요청에 추가됩니다. 호출에 HTTP가 사용되는 경우 전송 헤더는 HTTP 요청 내 HTTP 헤더로 전송됩니다. 호출에 JMS가 사용되는 경우 전송 헤더는 JMS 메시지 특성으로 전송됩니다.
    Constants.REQUEST_TRANSPORT_PROPERTIES 특성이 올바르게 설정되지 않으면 WebServiceException 오류의 원인이 되는 API 사용 오류가 발생할 수 있습니다. 다음 요구사항이 충족되어야 하며 그렇지 않을 경우 프로세스가 실패합니다.
    1. BindingProvider의 RequestContext에서 설정되는 Constants.REQUEST_TRANSPORT_PROPERTIES 특성 값은 java.util.Map 오브젝트이거나 null이어야 합니다.
    2. 맵의 각 키는 java.util.String 데이터 유형이어야 합니다.
    3. 맵의 각 값은 다음 데이터 유형 중 하나여야 합니다.
      • java.lang.String
      • java.lang.Integer
      • java.lang.Short
      • java.lang.Long
      • java.lang.Float
      • java.lang.Double
      • java.lang.Byte
      • java.lang.Boolean

결과

웹 서비스 요청 메시지로 전송 헤더를 보내도록 구성되는 JAX-WS 웹 서비스가 있습니다.

다음은 요청 전송 헤더가 JAX-WS 웹 서비스 클라이언트 애플리케이션에 의해 전송되는 방식을 보여주는 간단한 프로그래밍 예입니다.
public class MyApplicationClass {
    // Inject an instance of the service's port-type.
    @WebServiceRef(EchoService.class)
    private EchoPortType port;

    // This method will invoke  the web service operation and send transport headers on the request.
    public void invokeService() {

        // Set up the Map that will contain the request headers.
        Map<String, Object> requestHeaders = new HashMap<String, Object>();
        requestHeaders.put(“MyHeader1”, “This is a string value”);
        requestHeaders.put(“MyHeader2”, new Integer(33));
        requestHeaders.put(“MyHeader3”, new Boolean(true));

        // Set the Map as a property on the RequestContext.
        BindingProvider bp = (BindingProvider) port;
        bp.getRequestContext().put(com.ibm.websphere.webservices.Constants.REQUEST_TRANSPORT_PROPERTIES, requestHeaders);

        // Invoke the web services operation.
        String result = port.echoString(“Hello, world!”);
    }
}

JAX-WS 엔드포인트에서 응답 전송 헤더 보내기

시작하기 전에

전송 헤더를 보내기 위해 사용으로 설정할 수 있는 JAX-WS 웹 서비스 엔드포인트 구현 클래스가 필요합니다.

JAX-WS 엔드포인트에서 응답 전송 헤더를 보내는 것은 JAX-WS 클라이언트에서 요청 전송 헤더를 보내는 것과 비슷합니다. 이는 HTTP 및 JMS 전송에 대해서 지원됩니다.

이 태스크 정보

JAX-WS 프로그래밍 모델을 사용할 때 엔드포인트 구현 클래스는 웹 서비스 응답 메시지와 함께 전송 헤더의 값을 보내기 위해 MessageContext에 대한 특성을 설정해야 합니다.

프로시저

  1. 전송 헤더가 들어 있는 java.util.Map 오브젝트를 작성하십시오.
  2. 항목(키 및 값)을 응답 메시지로 전송하려는 각 전송 헤더의 맵 오브젝트에 추가하십시오. 이는 클라이언트에 대한 이전 프로시저와 비슷합니다.
  3. 엔드포인트의 호출과 연관된 MessageContext(javax.xml.ws.handler.MessageContext의 인스턴스)를 검색하십시오.
  4. com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES 특성을 사용하여 MessageContext에서 맵 오브젝트를 설정하십시오.

결과

웹 서비스 응답 메시지로 전송 헤더를 보내도록 구성된 JAX-WS 웹 서비스 엔드포인트 구현 클래스가 있습니다.

다음은 응답 전송 헤더가 JAX-WS 웹 서비스 엔드포인트 구현 클래스에 의해 전송되는 방식을 보여주는 간단한 프로그래밍 예입니다.
@WebService
public class EchoServiceImpl implements EchoServicePortType {

    // Inject an instance of WebServiceContext so we can retrieve
    // the MessageContext for each invocation of this endpoint.
    @Resource
    WebServiceContext ctxt;

    /**
     * Default constructor.
     */
    public EchoServiceImpl() {
        ....
    }

    public String echoString(String input) {
        String result = “Echo result: “ + input;

        // Retrieve the MessageContext from the injected WebServiceContext.
        MessageContext mc = ctxt.getMessageContext();

        // Send some headers back in the response message.
        Map<String, Object> responseHeaders = new HashMap<String, Object>();
        responseHeaders.put("MyHeader1", "This is a string response value");
        responseHeaders.put("MyHeader2", new Integer(33));
        responseHeaders.put("MyHeader3”, new Boolean(false));

        // Set the response header Map on the MessageContext.
        mc.put(com.ibm.websphere.webservices.Constants.RESPONSE_TRANSPORT_PROPERTIES, responseHeaders);

        return result;
    }
}

주제 유형을 표시하는 아이콘 태스크 주제



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