SEI 기반 JAX-WS 웹 서비스에서 메소드 노출

서비스 엔드포인트 구현에서 @WebService 및 @WebMethod 어노테이션을 사용하여 JAX-WS(Java™ API for XML-Based Web Services)로 노출하려는 Java 메소드를 지정할 수 있습니다.

시작하기 전에

JAX-WS 기술을 사용하면 표준 서비스 엔드포인트 인터페이스 및 제공자 인터페이스 둘 다를 기반으로 하는 웹 서비스를 구현할 수 있습니다. 기존 Java 클래스에서 시작(상향식 접근이라고 함)해서 JAX-WS 웹 서비스를 개발할 때 초기에 웹 서비스로 클래스를 정의하도록 @WebService 또는 @WebServiceProvider 어노테이션 중 하나를 사용하여 클래스에 대한 어노테이션을 작성해야 합니다.

제공자 인터페이스를 사용하는 것은 JAX-WS 서비스 정의에 대한 동적 접근법입니다. 제공자 인터페이스를 사용하려면 클래스가 javax.xml.ws.Provider 인터페이스를 구현하고 @WebServiceProvider 어노테이션을 포함해야 합니다. 제공자 인터페이스에는 한 개의 메소드(호출 메소드)가 있으며 이 메소드는 다양한 메시지 또는 메시지 페이로드에 대해 작업할 때 Java 프로그래밍 언어로 된 총칭을 사용하여 입력 및 출력 유형 둘 다를 제어합니다.

반대로 Java 어노테이션을 사용하여 서비스 엔드포인트 인터페이스(SEI) 접근법을 사용하는 웹 서비스를 설명할 수 있습니다.

이 태스크 정보

웹 서비스를 초기에 정의하려면 @WebService 어노테이션을 사용하여 Java 클래스에 대한 어노테이션을 작성하십시오. 또한 @WebMethod 어노테이션을 사용하여 개별 메소드에 대해 선택적으로 어노테이션을 작성하여 해당 메소드가 웹 서비스 조작으로 노출되는 것을 제어할 수 있습니다.

메소드가 조작으로 노출되는 방식에 관해 여러 웹 서비스 스펙 전체에서 모호할 수 있기 때문에 사용자가 사용하는 JAX-WS 구현에 상관없이 일관된 동작을 보장하는 데 유용한 다음 가이드라인을 사용하십시오.

  • 기본 웹 서비스를 정의하려면 @WebService 어노테이션을 사용하여 구현 클래스에 대한 어노테이션을 작성하십시오.
  • 명시적 SEI를 사용하여 웹 서비스를 정의하려면 @WebService 어노테이션의 endpointInterface 속성을 사용하여 Java 인터페이스 클래스를 명시적으로 참조하십시오.
  • @WebService 어노테이션의 wsdlLocation 속성에 WSDL 파일 참조를 제공하십시오. 사전 정의된 WSDL 파일을 지정하면 성능이 개선됩니다. WSDL 파일과 어노테이션 간 불일치는 런타임 환경에 의해 보고됩니다.
    문제점 방지 문제점 방지: JAX-WS 2.2 스펙에 따라 SOAP 1.2가 바인딩 유형으로 선언되고 wsdlLocation 속성이 기본값인 비어 있는 문자열이 경우 컨테이너가 WSDL을 자동으로 생성할 수 없습니다. 따라서 ?wsdl을 사용하여 WSDL 파일을 요청하는 경우 다음 예외 메시지가 표시됩니다.
    CWWKW0037E: The WSDL that is compliant with the JAX-WS 2.2 specification cannot be generated.
    WSDL 파일을 표시하려는 경우 WSDL 파일을 수동으로 생성하고 생성된 파일을 애플리케이션에 넣은 후 정확한 위치로 wsdlLocation 속성을 지정해야 합니다. gotcha
  • 명시적 SEI를 사용하면 SEI의 모든 공개 메소드 및 상속된 클래스가 항상 노출됩니다. 이미 노출된 메소드를 추가로 사용자 정의하려는 경우 @WebMethod 어노테이션만 추가하면 됩니다.
  • 명시적 SEI 또는 WSDL 파일에 @WebService 어노테이션의 참조를 제공하면 메소드를 노출할 때 가능한 모호성을 제거하는 데 도움이 됩니다.
  • 명시적 SEI를 사용하지 않는 경우 다음 규칙에 따라 메소드가 일관되게 노출되는지 확인하십시오.
    • 노출하려는 메소드가 들어 있는 구현 클래스 및 이 클래스의 모든 수퍼클래스에 @WebService 어노테이션을 추가하십시오. 클래스에 @WebService 어노테이션을 추가하면 static 또는 final이 아닌 해당 클래스에 모든 공용 메소드가 노출됩니다.
    • 특정 메소드만 노출시키기 위해 보다 세분화된 제어를 원하는 경우 선택한 메소드에 @WebMethod 어노테이션을 사용하십시오. 메소드가 노출되는지 확인하려면 @WebMethod 어노테이션을 사용하여 해당 메소드에 어노테이션을 작성하십시오. 메소드가 노출되지 않도록 하려는 경우 @WebMethod(exclude=true) 어노테이션을 사용하여 해당 메소드에 대한 어노테이션을 작성하십시오.
지원된 구성 지원된 구성: sptcfg
어노테이션이 없는 메소드 노출을 위한 동작 변경:

웹 서비스 조작으로의 메소드 노출에 관해 JAX-WS의 동작이 변경되었습니다. 이는 최신 JAX-WS 스펙 정보를 따랐습니다.

이전 버전에서 마이그레이션된 명시적 SEI 또는 WSDL이 없는 애플리케이션은 다음과 같이 노출되는 추가 조작이 있을 수 있습니다. JAX-WS 런타임 환경이 레거시 동작을 사용하도록 특성을 설정할 수 있습니다. 이는 추가 메소드가 노출되지 않도록 WSDL 또는 SEI 없이 애플리케이션을 마이그레이션할 때 필요할 수 있습니다.

@WebService
public class Foo {
	@WebMethod
	public void a() {}	// exposed now, exposed before
	public void b() {}	// exposed now, not exposed before
}
새 해석을 사용하면 구현 클래스 및 그 수퍼클래스의 공용 메소드는 다음 조건에서만 노출됩니다.
  • 포함하는 클래스에 @WebService 어노테이션이 있습니다.
  • 해당 메소드에 @WebMethod(exclude=true) 어노테이션이 없습니다.
레거시 해석을 사용하면 구현 클래스 및 그 수퍼클래스의 메소드가 다음 조건에서만 노출됩니다.
  • 포함하는 클래스에 @WebService 어노테이션이 있습니다.
  • 해당 메소드에 @WebMethod 어노테이션이 없고 다른 메소드에도 @WebMethod 어노테이션이 없습니다.
  • 해당 메소드에 @WebMethod 또는 @WebMethod(exclude=false) 어노테이션이 있습니다.

JAX-WS 런타임 환경이 레거시 @WebMethod 동작을 사용하도록 지정하려면 jaxws.runtime.legacyWebMethod=true 특성을 구성하십시오. 이 특성을 JVM(Java Virtual Machine) 시스템 특성 또는 WAR(Web Application Archive) 파일의 META-INF/MANIFEST.MF 파일에 있는 특성으로 구성할 수 있습니다. 기본적으로, 이 특성은 false로 설정되며 Application Server는 새 동작을 사용합니다.

다음 조건이 모두 true인 경우 WSWS7054E 오류 메시지가 발생할 수 있습니다.
  • 웹 서비스 애플리케이션이 어노테이션이 없는 메소드로 구성됩니다.
  • 메소드가 웹 서비스 조작에 맵핑되도록 의도된 것이 아닙니다.
  • 애플리케이션이 SEI를 참조하거나 WSDL 파일을 패키지화하지 않습니다.
이 오류 메시지는 다음 텍스트와 비슷한 정보를 포함합니다.
javax.xml.ws.WebServiceException: WSWS7054E:
 The Web Services Description Language (WSDL) file could not be generated for the XXXX Web service implementation
 class because of the following error: javax.xml.ws.WebServiceException: Unable to create JAXBContext
JAX-WS 도구는 @WebMethod 맵핑 프린시펄과 관련하여 JAX-WS 스펙을 준수합니다. 이 변경은 이전의 비준수 기본 동작을 따르는 애플리케이션에 영향을 미칠 수 있습니다. 애플리케이션이 WSDL 또는 SEI를 패키지화 및 참조하고 해당 SEI 구현에 있는 모든 메소드가 @WebMethod 제외 플래그로 올바르게 어노테이션이 작성되어 있는 경우 이 변경은 영향을 미치지 않습니다. 그러나 영향을 받을 경우에는 메소드에 명시적 어노테이션을 추가하여 WSDL 생성에서 해당 메소드가 제외되도록 하십시오. 예: @WebMethod(exclude=true). 또한 WSDL을 애플리케이션과 패키지화하여 런타임이 사용자를 대신해서 WSDL을 생성해야 하는 필요성을 제거할 수 있습니다.
static 및 final 메소드를 노출하기 위한 기본 동작:

명시적 SEI가 없는 서비스에서 static 또는 final 메소드는 더 이상 웹 서비스 조작으로 노출되지 않습니다. 이를 노출하려면 WSDL을 애플리케이션과 패키지화하고 jaxws.runtime.legacyWebMethod=true를 설정하십시오.

프로시저

  1. 웹 서비스 조작으로 노출하려는 메소드를 식별하십시오.
  2. @WebService 어노테이션을 사용하여 어노테이션이 작성된 클래스에서 메소드를 조작으로 노출하기 위한 규칙을 검토하십시오.
  3. 우수 사례를 활용하여 SEI가 없는 애플리케이션에서 @WebMethod 및 @WebService 어노테이션을 적용하여 웹 서비스 내에서 메소드를 조작으로 표시하십시오.

결과

웹 서비스 조작으로 노출할 메소드를 지정하기 위해 @WebMethod 어노테이션을 사용했습니다.

문제점 방지 문제점 방지:

애플리케이션 서버 환경을 업그레이드하고 문제점이 발생하는 경우 다음 문제점 해결 정보를 검토하십시오.

클라이언트 오류는 JAX-WS 도구 버전 2.1.6 이상 환경을 사용할 때 WSDL 파일 및 portType 간의 불일치를 표시합니다.
다음 메시지와 같은 클라이언트 측 오류 메시지를 수신할 수 있습니다.
javax.xml.ws.WebServiceException: The Endpoint validation failed to validate due to the following errors:
:: Invalid Endpoint Interface ::
:: The number of operations in the WSDL portType does not match the number of methods in the SEI or web service
 implementation class.  wsdl operations = [...] dispatch operations = [....]

이 문제점을 정정하려면 WSDL 파일과 일치시킬 클라이언트 아티팩트를 재생성해야 합니다.

우수 사례 우수 사례: 업데이트된 WSDL 파일을 수신할 때마다 클라이언트 측 아티팩트를 재생성해야 합니다. bprac
웹 서비스에서 ?WSDL 조작을 수행하는 클라이언트에는 디스패치가 불가능한 조작이 있습니다.
?WSDL 조작을 수행하면 JAX-WS 런타임 환경이 디스패치할 수 있는 것보다 더 많은 조작을 포함하는 WSDL 파일을 수신할 수 있습니다. 클라이언트가 디스패치가 가능하지 않은 조작 중 하나를 호출하려고 하는 경우 클라이언트는 다음 메시지와 같은 오류를 수신합니다.
The endpoint reference (EPR) for the Operation not found is http://localhost:9086/example/BeanImpl2Service and the WSA 
Action = <WSA_action_from_server>. If this EPR was previously reachable, contact the server administrator.
클라이언트는 웹 서비스가 노출하려고 하는 조작에만 액세스해야 합니다. 다음 방식 중 하나로 이 문제점을 정정할 수 있습니다.
  • 결과 WSDL 파일이 올바른 조작 세트를 노출하도록 웹 서비스 애플리케이션에서 @WebMethod 어노테이션을 수정하십시오.
  • jaxws.runtime.legacyWebMethod 특성을 false로 설정하여 WSDL의 모든 조작이 디스패치되도록 하십시오.
gotcha

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



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