43.10. Handlers를 사용하도록 끝점 구성


43.10.1. 프로그래밍 방식 구성

43.10.1.1. 소비자에 Handler 체인 추가

43.10.1.1.1. 개요

처리기 체인을 소비자에 추가하려면 처리기 체인을 명시적으로 빌드해야 합니다. 그런 다음 서비스 프록시의 Binding 오브젝트에 처리기 체인을 직접 설정합니다.

중요

Spring 구성을 사용하여 구성된 모든 처리기 체인은 프로그래밍 방식으로 구성된 처리기 체인을 재정의합니다.

43.10.1.1.2. 프로세스

사용자에게 처리기 체인을 추가하려면 다음을 수행합니다.

  1. 처리기 체인을 저장할 List<Handler > 오브젝트를 생성합니다.
  2. 체인에 추가할 각 처리기의 인스턴스를 생성합니다.
  3. 런타임에서 호출할 순서대로 각 인스턴스화된 처리기 오브젝트를 목록에 추가합니다.
  4. 서비스 프록시에서 Binding 오브젝트를 가져옵니다.

    Apache CXF는 org.apache.cxf.jaxws.binding.DefaultBindingImpl 이라는 바인딩 인터페이스의 구현을 제공합니다.

  5. Binding 오브젝트의 setHandler Cryostat() 메서드를 사용하여 프록시에서 처리기 체인을 설정합니다.
43.10.1.1.3. 예

예 43.14. “소비자에 Handler 체인 추가” 사용자에게 처리기 체인을 추가하기 위한 코드를 표시합니다.

예 43.14. 소비자에 Handler 체인 추가

import javax.xml.ws.BindingProvider;
import javax.xml.ws.handler.Handler;
import java.util.ArrayList;
import java.util.List;

import org.apache.cxf.jaxws.binding.DefaultBindingImpl;
...
SmallNumberHandler sh = new SmallNumberHandler();
List<Handler> handlerChain = new ArrayList<Handler>();
handlerChain.add(sh);

DefaultBindingImpl binding = ((BindingProvider)proxy).getBinding();
binding.getBinding().setHandlerChain(handlerChain);

예 43.14. “소비자에 Handler 체인 추가” 의 코드는 다음을 수행합니다.

처리기를 인스턴스화합니다.

체인을 보유할 List 오브젝트를 만듭니다.

체인에 처리기를 추가합니다.

프록시에서 DefaultBindingImpl 개체로 Binding 개체를 가져옵니다.Gets the Binding object from the proxy as a DefaultBindingImpl object.

처리기 체인을 프록시의 바인딩에 할당합니다.

43.10.1.2. 서비스 공급자에 처리기 체인 추가

43.10.1.2.1. 개요

SEI 또는 구현 클래스를 @Handler Cryostat 주석으로 데코팅하여 서비스 공급자에 처리기 체인을 추가합니다. 주석은 서비스 공급자가 사용하는 처리기 체인을 정의하는 메타 데이터 파일을 가리킵니다.

43.10.1.2.2. 프로세스

서비스 공급자에 처리기 체인을 추가하려면 다음을 수행합니다.

  1. @Handler Cryostat 주석을 사용하여 공급자의 구현 클래스를 분리합니다.
  2. 처리기 체인을 정의하는 처리기 구성 파일을 생성합니다.
43.10.1.2.3. @Handler Cryostat 주석

javax.jws.Handler annotations 는 서비스 공급자의 구현 클래스를 분리합니다. 런타임에서 파일 속성으로 지정된 처리기 체인 구성 파일을 로드하도록 지시합니다.

주석의 file 속성은 로드할 처리기 구성 파일을 식별하는 두 가지 방법을 지원합니다.

  • URL
  • 상대 경로 이름

예 43.15. “처리기 체인을 로드하는 서비스 구현” 에서는 handlers.xml 이라는 파일에 정의된 처리기 체인을 사용할 서비스 공급자 구현을 표시합니다. handlers.xml 은 서비스 공급자가 실행되는 디렉터리에 있어야 합니다.

예 43.15. 처리기 체인을 로드하는 서비스 구현

import javax.jws.HandlerChain;
import javax.jws.WebService;
...

@WebService(name = "AddNumbers",
            targetNamespace = "http://apache.org/handlers",
            portName = "AddNumbersPort",
            endpointInterface = "org.apache.handlers.AddNumbers",
            serviceName = "AddNumbersService")
@HandlerChain(file = "handlers.xml")
public class AddNumbersImpl implements AddNumbers
{
...
}
43.10.1.2.4. 처리기 구성 파일

처리기 구성 파일은 구현되는 XML 문법을 사용하여 처리기 체인을 정의합니다(Java EE용 웹 서비스, 버전 1.2). 이 문법은 http://java.sun.com/xml/ns/javaee 에 정의되어 있습니다.

처리기 구성 파일의 root 요소는 handler-chains 요소입니다. handler-chains 요소에는 하나 이상의 handler-chain 요소가 있습니다.

handler-chain 요소는 처리기 체인을 정의합니다. 표 43.1. “Server-Side Handler Chain을 정의하는 데 사용되는 요소” handler-chain 요소의 하위 요소에 대해 설명합니다.

표 43.1. Server-Side Handler Chain을 정의하는 데 사용되는 요소
element설명

handler

처리기를 설명하는 요소를 포함합니다.

service-name-pattern

처리기 체인이 바인딩된 서비스를 정의하는 WSDL 서비스 요소의 QName을 지정합니다. QName을 정의할 때 * 를 와일드카드로 사용할 수 있습니다.

port-name-pattern

처리기 체인이 바인딩된 끝점을 정의하는 WSDL 포트 요소의 QName을 지정합니다. QName을 정의할 때 * 를 와일드카드로 사용할 수 있습니다.

protocol-binding

처리기 체인이 사용되는 메시지 바인딩을 지정합니다. 바인딩은 URI로 지정되거나 다음과 같은 별칭을 사용하여 지정됩니다. #\#SOAP11_HTTP,\#SOAP11_HTTP_MTOM, \#SOAP12_HTTP_HTTP ,\##SOAP12_HTTP _MTOM 또는 \## XML_HTTP_HTTP.

메시지 바인딩 URI에 대한 자세한 내용은 23장. Apache CXF 바인딩 ID 을 참조하십시오.

handler-chain 요소는 단일 handler 요소를 하위로 보유하는 데만 필요합니다. 그러나 전체 처리기 체인을 정의하는 데 필요한 만큼의 처리기 요소를 지원할 수 있습니다. 체인의 처리기는 처리기 체인 정의에 지정된 순서로 실행됩니다.

중요

실행 최종 순서는 지정된 처리기를 논리 처리기 및 프로토콜 처리기로 정렬하여 결정됩니다. 그룹화 내에서 구성에 지정된 순서가 사용됩니다.

protocol-binding 과 같은 다른 자식은 정의된 처리기 체인의 범위를 제한하는 데 사용됩니다. 예를 들어 service-name-pattern 요소를 사용하는 경우 처리기 체인은 WSDL 포트 요소가 지정된 WSDL 서비스 요소의 자식인 서비스 공급자에만 연결됩니다. 이러한 제한 하위 중 하나만 handler 요소에서 사용할 수 있습니다.

handler 요소는 처리기 체인에서 개별 처리기를 정의합니다. handler-class 하위 요소는 처리기를 구현하는 클래스의 정규화된 이름을 지정합니다. handler 요소에는 처리기의 고유 이름을 지정하는 선택적 handler-name 요소가 있을 수도 있습니다.

예 43.16. “처리기 구성 파일” 단일 처리기 체인을 정의하는 처리기 구성 파일을 표시합니다. 체인은 두 개의 처리기로 구성됩니다.

예 43.16. 처리기 구성 파일

<handler-chains xmlns="http://java.sun.com/xml/ns/javaee"
                xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
                xsi:schemaLocation="http://java.sun.com/xml/ns/javaee">
  <handler-chain>
    <handler>
      <handler-name>LoggingHandler</handler-name>
      <handler-class>demo.handlers.common.LoggingHandler</handler-class>
    </handler>
    <handler>
      <handler-name>AddHeaderHandler</handler-name>
      <handler-class>demo.handlers.common.AddHeaderHandler</handler-class>
    </handler>
  </handler-chain>
</handler-chains>

43.10.2. Spring 설정

43.10.2.1. 개요

처리기 체인을 사용하도록 끝점을 구성하는 가장 쉬운 방법은 끝점 구성에 체인을 정의하는 것입니다. 이 작업은 엔드포인트를 구성하는 요소에 jaxwxs:handlers 자식을 추가하여 수행됩니다.

중요

구성 파일을 통해 추가된 처리기 체인은 프로그래밍 방식으로 구성된 처리기 체인보다 우선합니다.

43.10.2.2. 프로세스

처리기 체인을 로드하도록 끝점을 구성하려면 다음을 수행합니다.

  1. 끝점에 구성 요소가 없는 경우 하나를 추가합니다.

    Apache CXF 끝점 구성에 대한 자세한 내용은 17장. Cryostat-WS 끝점 구성 을 참조하십시오.

  2. jaxws:handlers 하위 요소를 끝점의 구성 요소에 추가합니다.
  3. 체인의 각 처리기에 대해 처리기를 구현하는 클래스를 지정하는ans 요소를 추가합니다.

    처리기 구현이 둘 이상의 위치에서 사용되는 경우 ref 요소를 사용하여 8080 요소를 참조할 수 있습니다.

43.10.2.3. handlers 요소

jaxws:handlers 요소는 엔드포인트 구성에서 처리기 체인을 정의합니다. 모든 Cryostat-WS 엔드포인트 구성 요소에 자식으로 표시될 수 있습니다. 다음은 다음과 같습니다.

  • jaxws:endpoint 는 서비스 공급자를 구성합니다.
  • jaxws:server 도 서비스 공급자를 구성합니다.
  • jaxws:client 는 서비스 소비자를 구성합니다.

다음 두 가지 방법 중 하나로 처리기를 처리기 체인에 추가합니다.

  • 구현 클래스 정의하는 Quarkus 요소 추가
  • ref 요소를 사용하여 구성 파일의 다른 위치에서 이름이 지정된 8080 요소를 참조합니다.

핸들러가 구성에 정의된 순서는 해당 핸들러가 실행될 순서입니다. 논리 처리기와 프로토콜 처리기를 혼합하면 순서가 변경될 수 있습니다. 런타임은 구성에 지정된 기본 순서를 유지하면서 적절한 순서로 정렬합니다.

43.10.2.4. 예

예 43.17. “Spring에서 처리기 체인을 사용하도록 끝점 구성” 처리기 체인을 로드하는 서비스 공급자에 대한 구성이 표시됩니다.

예 43.17. Spring에서 처리기 체인을 사용하도록 끝점 구성

<beans ...
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  ...
  schemaLocation="...
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    ...">
  <jaxws:endpoint id="HandlerExample"
                  implementor="org.apache.cxf.example.DemoImpl"
                  address="http://localhost:8080/demo">
    <jaxws:handlers> <bean class="demo.handlers.common.LoggingHandler" /> <bean class="demo.handlers.common.AddHeaderHandler" /> </jaxws:handlers>
  </jaws:endpoint>
</beans>
Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

Red Hat을 사용하는 고객은 신뢰할 수 있는 콘텐츠가 포함된 제품과 서비스를 통해 혁신하고 목표를 달성할 수 있습니다.

보다 포괄적 수용을 위한 오픈 소스 용어 교체

Red Hat은 코드, 문서, 웹 속성에서 문제가 있는 언어를 교체하기 위해 최선을 다하고 있습니다. 자세한 내용은 다음을 참조하세요.Red Hat 블로그.

Red Hat 소개

Red Hat은 기업이 핵심 데이터 센터에서 네트워크 에지에 이르기까지 플랫폼과 환경 전반에서 더 쉽게 작업할 수 있도록 강화된 솔루션을 제공합니다.

© 2024 Red Hat, Inc.