17장. JAX-WS 엔드포인트 구성

초록

JAX-WS 엔드포인트는 3개의 Spring 구성 요소 중 하나를 사용하여 구성됩니다. 올바른 요소는 구성할 끝점 유형 및 사용하려는 기능에 따라 달라집니다. 소비자의 경우 jaxws:client 요소를 사용합니다. 서비스 공급자의 경우 jaxws:endpoint 요소 또는 jaxws:server 요소를 사용할 수 있습니다.

끝점을 정의하는 데 사용되는 정보는 일반적으로 끝점의 계약에 정의되어 있습니다. 구성 요소의 를 사용하여 계약의 정보를 재정의할 수 있습니다. 구성 요소를 사용하여 계약에 제공되지 않는 정보를 제공할 수도 있습니다.

구성 요소를 사용하여 WS-RM과 같은 고급 기능을 활성화해야 합니다. 이 작업은 하위 요소를 엔드포인트의 구성 요소에 제공하여 수행됩니다. Java 우선 접근 방식을 사용하여 끝점을 사용하여 개발된 경우 끝점 계약 역할을 하는 SEI에 사용할 바인딩 및 전송 유형에 대한 정보가 부족할 수 있습니다.

17.1. 서비스 공급자 구성

17.1.1. 서비스 공급자 구성을 위한 요소

Apache CXF에는 서비스 공급자를 구성하는 데 사용할 수 있는 두 가지 요소가 있습니다.

두 요소 간의 차이점은 대부분 런타임 내부에 있습니다. jaxws:endpoint 요소는 서비스 끝점을 지원하기 위해 생성된 org.apache.cxf.jaxws.EndpointImpl 오브젝트에 속성을 주입합니다. jaxws:server 요소는 끝점을 지원하기 위해 생성된 org.apache.cxf.jaxws.support.JaxWsServerFactoryBean 오브젝트에 속성을 삽입합니다. EndpointImpl 오브젝트는 구성 데이터를 JaxWsServerFactoryBean 오브젝트에 전달합니다. JaxWsServerFactoryBean 오브젝트는 실제 서비스 오브젝트를 생성하는 데 사용됩니다. 두 구성 요소는 서비스 끝점을 구성하기 때문에 원하는 구문에 따라 선택할 수 있습니다.

17.1.2. jaxws:endpoint Element 사용

17.1.2.1. 개요

jaxws:endpoint 요소는 JAX-WS 서비스 공급자를 구성하기 위한 기본 요소입니다. 특성 및 자식은 서비스 공급자를 인스턴스화하는 데 필요한 모든 정보를 지정합니다. 많은 속성은 서비스 계약의 정보에 매핑됩니다. 하위 항목은 인터셉터 및 기타 고급 기능을 구성하는 데 사용됩니다.

17.1.2.2. 구성되는 끝점 식별

런타임에서 적절한 서비스 공급자에 구성을 적용하려면 해당 구성을 식별할 수 있어야 합니다. 서비스 공급자를 식별하는 기본 방법은 끝점을 구현하는 클래스를 지정하는 것입니다. 이 작업은 jaxws:endpoint 요소의 구현자를 사용하여 수행됩니다.

서로 다른 엔드포인트가 공통 구현을 공유하는 인스턴스의 경우 각 엔드포인트에 대해 서로 다른 구성을 제공할 수 있습니다. 구성에서 특정 끝점을 구분하는 방법은 다음 두 가지입니다.

  • serviceName 속성 및 endpointName 속성의 조합

    serviceName 속성은 서비스의 엔드포인트를 정의하는 wsdl:service 요소를 지정합니다. endpointName 속성은 서비스의 엔드포인트를 정의하는 특정 wsdl:port 요소를 지정합니다. 두 속성 모두 ns:name 형식을 사용하여 QNames로 지정됩니다. NS 는 요소의 네임스페이스이고 name 은 요소의 name 특성 값입니다.

    참고

    wsdl:service 요소에 하나의 wsdl:port 요소만 있는 경우 endpointName 속성을 생략할 수 있습니다.

  • name 속성

    name 속성은 서비스의 엔드포인트를 정의하는 특정 wsdl:port 요소의 QName을 지정합니다. QName은 {ns}localPart 형식으로 제공됩니다. NSwsdl:port 요소의 네임스페이스이고 localPartwsdl:port 요소의 name 속성 값입니다.

17.1.2.3. 속성

jaxws:endpoint 요소의 속성은 끝점의 기본 속성을 구성합니다. 이러한 속성에는 끝점 주소, 엔드포인트를 구현하는 클래스 및 엔드포인트를 호스팅하는 버스 가 포함됩니다.

표 17.1. “jaxws:endpoint Element를 사용하여 JAX-WS 서비스 공급자 구성 특성” jaxws:endpoint 요소의 속성을 설명합니다.

표 17.1. jaxws:endpoint Element를 사용하여 JAX-WS 서비스 공급자 구성 특성

속성설명

id

다른 구성 요소에서 끝점을 참조하는 데 사용할 수 있는 고유 식별자를 지정합니다.Specifies a unique identifier that other configuration elements can use to refer to the endpoint.

구현자

서비스를 구현하는 클래스를 지정합니다. 구현 클래스를 구성하는 Spring 빈에 대한 클래스 이름 또는 ID 참조를 사용하여 구현 클래스를 지정할 수 있습니다. 이 클래스는 classpath에 있어야 합니다.

implementorClass

서비스를 구현하는 클래스를 지정합니다. 이 속성은 구현 자 속성에 제공된 값이 Spring AOP를 사용하여 래핑된 빈에 대한 참조인 경우에 유용합니다.

주소

HTTP 끝점의 주소를 지정합니다. 이 값은 서비스 계약에 지정된 값을 재정의합니다.

wsdlLocation

끝점의 WSDL 계약의 위치를 지정합니다. WSDL 계약의 위치는 서비스가 배포되는 폴더를 기준으로 합니다.

endpointName

서비스의 wsdl:port 요소의 name 특성 값을 지정합니다. ns:name 형식을 사용하여 QName으로 지정됩니다. 여기서 nswsdl:port 요소의 네임스페이스입니다.

serviceName

서비스의 wsdl:service 요소의 name 특성 값을 지정합니다. ns:name 형식을 사용하여 QName으로 지정됩니다. 여기서 nswsdl:service 요소의 네임스페이스입니다.

publish

서비스가 자동으로 게시되어야 하는지 여부를 지정합니다. 이 값이 false 로 설정되면 개발자는 31장. 서비스 게시 에 설명된 엔드포인트를 명시적으로 게시해야 합니다.

bus

서비스 엔드포인트를 관리하는 데 사용되는 버스를 구성하는 Spring 빈의 ID를 지정합니다. 이 기능은 공통 기능 세트를 사용하도록 여러 끝점을 구성할 때 유용합니다.

bindingUri

서비스에서 사용하는 메시지 바인딩의 ID를 지정합니다. 유효한 바인딩 ID 목록은 23장. Apache CXF 바인딩 ID 에서 제공됩니다.

name

서비스의 wsdl:port 요소의 stringified QName을 지정합니다. {ns}localPart 형식을 사용하여 QName으로 지정됩니다. NSwsdl:port 요소의 네임스페이스이고 localPartwsdl:port 요소의 name 속성 값입니다.

abstract

빈이 추상 빈인지 여부를 지정합니다. 추상화 빈은 구체적인 빈 정의를 위해 부모 역할을 하며 인스턴스화되지 않습니다. 기본값은 false입니다. 이 값을 true 로 설정하면 빈 공장이 빈을 인스턴스화하지 않도록 지시합니다.

depends-on

끝점이 인스턴스화되기 전에 종속되는 빈 목록을 지정합니다.

createdFromAPI

Endpoint.publish() 또는 Service.getPort() 와 같은 Apache CXF API를 사용하여 빈을 만들도록 지정합니다.

기본값은 false입니다.

이 값을 true 로 설정하면 다음이 수행됩니다.

  • ID에 .jaxws-endpoint 를 추가하여 빈의 내부 이름을 변경합니다.
  • 빈을 추상적으로 만듭니다.

publishedEndpointUrl

생성된 WSDL의 address 요소에 배치된 URL입니다. 이 값을 지정하지 않으면 address 특성 값이 사용됩니다. 이 속성은 "public" URL이 서비스가 배포된 URL과 같지 않은 경우 유용합니다.

표 17.1. “jaxws:endpoint Element를 사용하여 JAX-WS 서비스 공급자 구성 특성” 에 나열된 속성 외에도 여러 xmlns:shortName속성을 사용하여 endpointNameserviceName 속성에 사용되는 네임스페이스를 선언해야 할 수 있습니다.

17.1.2.4. 예제

예 17.1. “Simple JAX-WS Endpoint 구성” 엔드포인트가 게시되는 주소를 지정하는 JAX-WS 끝점의 구성을 보여줍니다. 이 예제에서는 다른 모든 값에 기본값을 사용하거나 구현에서 주석에 값을 지정했다고 가정합니다.

예 17.1. Simple JAX-WS Endpoint 구성

<beans ...
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  ...
  schemaLocation="...
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    ...">
  <jaxws:endpoint id="example"
                  implementor="org.apache.cxf.example.DemoImpl"
                  address="http://localhost:8080/demo" />
</beans>

예 17.2. “서비스 이름을 사용한 JAX-WS Endpoint 구성” 계약에 두 개의 서비스 정의가 포함된 JAX-WS 엔드포인트의 구성을 보여줍니다. 이 경우 serviceName 특성을 사용하여 인스턴스화할 서비스 정의를 지정해야 합니다.

예 17.2. 서비스 이름을 사용한 JAX-WS Endpoint 구성

<beans ...
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  ...
  schemaLocation="...
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    ...">

  <jaxws:endpoint id="example2"
                  implementor="org.apache.cxf.example.DemoImpl"
                  serviceName="samp:demoService2"
                  xmlns:samp="http://org.apache.cxf/wsdl/example" />

</beans>

xmlns:samp 속성은 WSDL 서비스 요소가 정의된 네임스페이스를 지정합니다.

17.1.3. jaxws:server 요소 사용

17.1.3.1. 개요

jaxws:server 요소는 JAX-WS 서비스 공급자를 구성하기 위한 요소입니다. 구성 정보를 org.apache.cxf.jaxws.support.JaxWsServerFactoryBean 에 삽입합니다. Apache CXF 특정 오브젝트입니다. 서비스를 구축하기 위해 순수 Spring 접근법을 사용하는 경우 Apache CXF 특정 API를 사용하여 서비스와 상호 작용할 필요가 없습니다.

jaxws:server 요소의 속성과 하위 요소는 서비스 공급자를 인스턴스화하는 데 필요한 모든 정보를 지정합니다. 속성은 엔드포인트를 인스턴스화하는 데 필요한 정보를 지정합니다. 하위 항목은 인터셉터 및 기타 고급 기능을 구성하는 데 사용됩니다.

17.1.3.2. 구성되는 끝점 식별

런타임에서 적절한 서비스 공급자에 구성을 적용하려면 해당 구성을 식별할 수 있어야 합니다. 서비스 공급자를 식별하는 기본 방법은 끝점을 구현하는 클래스를 지정하는 것입니다. 이 작업은 jaxws:server 요소의 serviceBean 속성을 사용하여 수행됩니다.

서로 다른 엔드포인트가 공통 구현을 공유하는 인스턴스의 경우 각 엔드포인트에 대해 서로 다른 구성을 제공할 수 있습니다. 구성에서 특정 끝점을 구분하는 방법은 다음 두 가지입니다.

  • serviceName 속성 및 endpointName 속성의 조합

    serviceName 속성은 서비스의 엔드포인트를 정의하는 wsdl:service 요소를 지정합니다. endpointName 속성은 서비스의 엔드포인트를 정의하는 특정 wsdl:port 요소를 지정합니다. 두 속성 모두 ns:name 형식을 사용하여 QNames로 지정됩니다. NS 는 요소의 네임스페이스이고 name 은 요소의 name 특성 값입니다.

    참고

    wsdl:service 요소에 하나의 wsdl:port 요소만 있는 경우 endpointName 속성을 생략할 수 있습니다.

  • name 속성

    name 속성은 서비스의 엔드포인트를 정의하는 특정 wsdl:port 요소의 QName을 지정합니다. QName은 {ns}localPart 형식으로 제공됩니다. NSwsdl:port 요소의 네임스페이스이고 localPartwsdl:port 요소의 name 속성 값입니다.

17.1.3.3. 속성

jaxws:server 요소의 속성은 끝점의 기본 속성을 구성합니다. 이러한 속성에는 끝점 주소, 엔드포인트를 구현하는 클래스 및 엔드포인트를 호스팅하는 버스 가 포함됩니다.

표 17.2. “jaxws:server Element를 사용하여 JAX-WS 서비스 공급자 구성 특성” jaxws:server 요소의 속성을 설명합니다.

표 17.2. jaxws:server Element를 사용하여 JAX-WS 서비스 공급자 구성 특성

속성설명

id

다른 구성 요소에서 끝점을 참조하는 데 사용할 수 있는 고유 식별자를 지정합니다.Specifies a unique identifier that other configuration elements can use to refer to the endpoint.

serviceBean

서비스를 구현하는 클래스를 지정합니다. 구현 클래스를 구성하는 Spring 빈에 대한 클래스 이름 또는 ID 참조를 사용하여 구현 클래스를 지정할 수 있습니다. 이 클래스는 classpath에 있어야 합니다.

serviceClass

서비스를 구현하는 클래스를 지정합니다. 이 속성은 구현 자 속성에 제공된 값이 Spring AOP를 사용하여 래핑된 빈에 대한 참조인 경우에 유용합니다.

주소

HTTP 끝점의 주소를 지정합니다. 이 값은 서비스 계약에 지정된 값을 재정의합니다.

wsdlLocation

끝점의 WSDL 계약의 위치를 지정합니다. WSDL 계약의 위치는 서비스가 배포되는 폴더를 기준으로 합니다.

endpointName

서비스의 wsdl:port 요소의 name 특성 값을 지정합니다. ns:name 형식을 사용하여 QName으로 지정됩니다. 여기서 nswsdl:port 요소의 네임스페이스입니다.

serviceName

서비스의 wsdl:service 요소의 name 특성 값을 지정합니다. ns:name 형식을 사용하여 QName으로 지정됩니다. 여기서 nswsdl:service 요소의 네임스페이스입니다.

publish

서비스가 자동으로 게시되어야 하는지 여부를 지정합니다. 이 값이 false 로 설정되면 개발자는 31장. 서비스 게시 에 설명된 엔드포인트를 명시적으로 게시해야 합니다.

bus

서비스 엔드포인트를 관리하는 데 사용되는 버스를 구성하는 Spring 빈의 ID를 지정합니다. 이 기능은 공통 기능 세트를 사용하도록 여러 끝점을 구성할 때 유용합니다.

bindingId

서비스에서 사용하는 메시지 바인딩의 ID를 지정합니다. 유효한 바인딩 ID 목록은 23장. Apache CXF 바인딩 ID 에서 제공됩니다.

name

서비스의 wsdl:port 요소의 stringified QName을 지정합니다. {ns}localPart 형식을 사용하여 QName으로 지정됩니다. 여기서 nswsdl:port 요소의 네임스페이스이고 localPartwsdl:port 요소의 name 속성 값입니다.

abstract

빈이 추상 빈인지 여부를 지정합니다. 추상화 빈은 구체적인 빈 정의를 위해 부모 역할을 하며 인스턴스화되지 않습니다. 기본값은 false입니다. 이 값을 true 로 설정하면 빈 공장이 빈을 인스턴스화하지 않도록 지시합니다.

depends-on

끝점을 인스턴스화하기 전에 끝점이 인스턴스화되는 데 의존하는 빈 목록을 지정합니다.

createdFromAPI

Endpoint.publish() 또는 Service.getPort() 와 같은 Apache CXF API를 사용하여 빈을 만들도록 지정합니다.

기본값은 false입니다.

이 값을 true 로 설정하면 다음이 수행됩니다.

  • ID에 .jaxws-endpoint 를 추가하여 빈의 내부 이름을 변경합니다.
  • 빈을 추상적으로 만듭니다.

표 17.2. “jaxws:server Element를 사용하여 JAX-WS 서비스 공급자 구성 특성” 에 나열된 속성 외에도 여러 xmlns:shortName속성을 사용하여 endpointNameserviceName 속성에 사용되는 네임스페이스를 선언해야 할 수 있습니다.

17.1.3.4. 예제

예 17.3. “simple JAX-WS Server 구성” 엔드포인트가 게시되는 주소를 지정하는 JAX-WS 끝점의 구성을 보여줍니다.

예 17.3. simple JAX-WS Server 구성

<beans ...
  xmlns:jaxws="http://cxf.apache.org/jaxws"
  ...
  schemaLocation="...
    http://cxf.apache.org/jaxws http://cxf.apache.org/schemas/jaxws.xsd
    ...">
  <jaxws:server id="exampleServer"
                  serviceBean="org.apache.cxf.example.DemoImpl"
                  address="http://localhost:8080/demo" />
</beans>

17.1.4. 서비스 공급자에 기능 추가

17.1.4.1. 개요

jaxws:endpointjaxws:server 요소는 서비스 공급자를 인스턴스화하는 데 필요한 기본 구성 정보를 제공합니다. 서비스 공급자에 기능을 추가하거나 고급 구성을 수행하려면 구성에 하위 요소를 추가해야 합니다.

자식 요소를 사용하면 다음을 수행할 수 있습니다.

17.1.4.2. 요소

표 17.3. “JAX-WS 서비스 공급자 구성에 사용되는 요소” jaxws:endpoint 에서 지원하는 하위 요소에 대해 설명합니다.

표 17.3. JAX-WS 서비스 공급자 구성에 사용되는 요소

요소설명

jaxws:handlers

메시지 처리를 위한 JAX-WS Handler 구현 목록을 지정합니다. JAX-WS Handler 구현에 대한 자세한 내용은 43장. 핸들러 작성 을 참조하십시오.

jaxws:inInterceptors

인바운드 요청을 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오.

jaxws:inFaultInterceptors

인바운드 오류 메시지를 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오.

jaxws:outInterceptors

아웃바운드 응답을 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오.

jaxws:outFaultInterceptors

아웃바운드 오류 메시지를 처리하는 인터셉터 목록을 지정합니다. 자세한 내용은 VII 부. Apache CXF 인터셉터 개발 에서 참조하십시오.

jaxws:binding

끝점에서 사용하는 메시지 바인딩을 구성하는 빈을 지정합니다. 메시지 바인딩은 org.apache.cxf.binding.BindingFactory 인터페이스의 구현을 사용하여 구성됩니다.[a]

jaxws:dataBinding [b]

끝점에서 사용하는 데이터 바인딩을 구현하는 클래스를 지정합니다.Specifies the class implementing the data binding used by the endpoint. 이는 포함된 빈 정의를 사용하여 지정합니다.

jaxws:executor

서비스에 사용되는 Java executor를 지정합니다. 이는 포함된 빈 정의를 사용하여 지정합니다.

jaxws:features

Apache CXF의 고급 기능을 구성하는 빈 목록을 지정합니다. 빈 참조 목록 또는 포함된 빈 목록을 제공할 수 있습니다.

jaxws:invoker

서비스에서 사용하는 org.apache.cxf.service. invoker 인터페이스의 구현을 지정합니다.[c]

jaxws:properties

끝점에 전달되는 속성의 Spring 맵을 지정합니다. 이러한 속성은 MTOM 지원 활성화와 같은 기능을 제어하는 데 사용할 수 있습니다.

jaxws:serviceFactory

서비스를 인스턴스화하는 데 사용되는 JaxWsServiceFactoryBean 오브젝트를 구성하는 빈을 지정합니다.

[a] SOAP 바인딩은 soap:soapBinding 빈을 사용하여 구성됩니다.
[b] jaxws:endpoint 요소는 jaxws:dataBinding 요소를 지원하지 않습니다.
[c] invoker 구현은 서비스가 호출되는 방법을 제어합니다. 예를 들어 서비스 구현의 새 인스턴스에서 각 요청을 처리했는지 또는 상태가 호출 간에 보존되는지 여부를 제어합니다.

17.1.5. JAX-WS 끝점에서 스키마 유효성 검사 활성화

17.1.5.1. 개요

schema-validation-enabled 속성을 설정하여 jaxws:endpoint 요소 또는 jaxws:server 요소에서 스키마 유효성 검사를 활성화할 수 있습니다. 스키마 유효성 검사가 활성화되면 클라이언트와 서버 간에 전송된 메시지가 스키마 준수 여부를 확인합니다. 기본적으로 스키마 유효성 검사는 성능에 큰 영향을 미치기 때문에 해제됩니다.By default, schema validation is turned off, because it has a significant impact on performance.

17.1.5.2. 예제

JAX-WS 끝점에서 스키마 유효성 검사를 활성화하려면 jaxws:endpoint 요소 또는 jaxws:server 요소의 jaxws:properties 하위 요소에서 schema-validation-enabled 속성을 설정합니다. 예를 들어 jaxws:endpoint 요소에 스키마 검증을 활성화하려면 다음을 수행합니다.

<jaxws:endpoint name="{http://apache.org/hello_world_soap_http}SoapPort"
    wsdlLocation="wsdl/hello_world.wsdl"
    createdFromAPI="true">
    <jaxws:properties>
        <entry key="schema-validation-enabled" value="BOTH" />
    </jaxws:properties>
</jaxws:endpoint>

schema-validation-enabled 속성의 허용되는 값 목록은 24.3.4.7절. “스키마 유효성 검사 유형 값” 을 참조하십시오.