JSR-224라고도 하는 JAX-WS(Java™ API for XML-based Web Services는 JAX-RPC(Java API for XML-based RPC) 프로그래밍 모델에서 제공되는 기초를 확장한 차세대 웹 서비스 프로그래밍 모델입니다. JAX-WS를 사용하면 동적 프록시 및 Java 어노테이션을 사용하여 Java 애플리케이션에 대해 더 많은 플랫폼 독립성을 사용할 수 있기 때문에 웹 서비스 및 클라이언트 개발이 훨씬 쉬워집니다. 이 제품에 포함된 웹 서비스 도구에서는 JAX-WS 2.0, 2.1, 2.2를 지원합니다.
JAX-WS는 웹 서비스 애플리케이션 및 클라이언트를 개발하는 데 표준 및 어노테이션 기반 모델을 지원하여 애플리케이션 개발을 단순화하는 새 프로그래밍 모델입니다. JAX-WS 프로그래밍 표준은 현재 업계 추세를 반영하는 자체 표준 뿐만 아니라 더 나아가서는 문서 중심의 메시지 모델까지도 전략적으로 제공하고 JAX-RPC에 정의된 대로 원격 프로시저 호출 프로그래밍 모델을 바꿉니다. 이 제품에서 여전히 JAX-RPC 프로그래밍 모델 및 애플리케이션을 지원하고 있지만 JAX-RPC에는 그 기능이 제한되어 현재 문서 중심의 서비스 중 많은 부분을 지원하지 않습니다. JAX-WS는 웹 서비스 개발을 위한 전략적인 프로그래밍 모델로서, 여기에는 Java EE 5 플랫폼이 부분적으로 필요합니다.
JAX-WS에서는 Java 클래스가 웹 서비스임을 나타내는 메타데이터와 같이 Java 클래스 어노테이션 처리를 위한 지원을 제공합니다. JAX-WS는 Java 프로그래밍 언어(JSR 175) 스펙, Java 플랫폼(JSR 181) 스펙, JAX-WS 2.0 스펙에서 정의된 어노테이션에 사용되는 메타데이터 기능을 기반으로 하는 어노테이션 사용을 지원합니다. Java 소스 및 Java 클래스에서 어노테이션을 사용하면 일반적으로 배치 디스크립터 파일, WSDL 파일 또는 XML 파일, WSDL 파일에서 소스 아티팩트로의 맵핑 메타데이터에서 확보되는 일부 추가 정보를 정의하여 웹 서비스 개발이 쉬워집니다.
예를 들어, Java 소스에 단순 @WebService 태그를 임베드하여 웹 서비스로 Bean을 표시할 수 있습니다.
@WebService
public class QuoteBean implements StockQuote {
public float getQuote(String sym) { ... }
}
@WebService 어노테이션은 해당 Bean의 전체 공용 메소드를 웹 서비스로 표시하도록 서버 런타임 환경에 설정합니다. 메소드나 매개변수 각각에 어노테이션을 추가하여 추가 표시 레벨을 제어할 수 있습니다. 어노테이션을 사용하면 웹 서비스로 Java 아티팩트를 표시하기 더 쉬워집니다. 또한 WSDL 파일을 시작으로 하는 일부 하향식 맵핑 도구를 사용하여 아티팩트를 작성할 때 어노테이션은 소스 및 Java 클래스 내에 소스 파일과 같이 메타데이터를 캡처하는 방법으로 포함됩니다.
JAX-WS를 사용하여 JAX-WS를 동기 및 비동기로 호출할 수 있습니다. JAX-WS는 웹 서비스를 비동기로 호출할 때 폴링 메커니즘과 콜백 메커니즘을 둘 다 지원합니다. 폴링 모델을 사용하면 클라이언트는 요청을 발행하고 서버가 응답했는지를 판별할 수 있도록 폴링되는 응답 오브젝트를 다시 가져올 수 있습니다. 서버가 응답할 때 실제 응답이 검색됩니다. 폴링 모델을 사용하면 클라이언트는 응답이 리턴되기를 기다리지 않고 다른 작업을 계속 처리할 수 있습니다. 콜백 모델을 사용하며 클라이언트는 인바운드 응답 오브젝트를 허용하고 처리할 수 있도록 콜백 핸들러를 제공합니다. 폴링 모델과 콜백 모델 모두 클라이언트가 웹 서비스를 호출하는 좀 더 동적이며 효율적인 모델을 제공하여 작업을 계속 처리할 수 있도록 해줍니다.
예를 들어 웹 서비스 인터페이스에는 동기 요청 및 비동기 요청에 대한 메소드가 있습니다.
@WebService
public interface CreditRatingService {
// sync operation
Score getCreditScore(Customer customer);
// async operation with polling
Response<Score> getCreditScoreAsync(Customer customer);
// async operation with callback
Future<?> getCreditScoreAsync(Customer customer,
AsyncHandler<Score> handler);
}
콜백 메커니즘을 사용하는 비동기 호출을 위해서는 클라이언트 프로그래머의 추가 입력이 필요합니다. 콜백 핸들러는 비동기 응답을 수신할 때 실행되는 애플리케이션 코드가 포함된 오브젝트입니다. 다음은 비동기 콜백 핸들러의 코드 예제입니다.
CreditRatingService svc = ...;
Future<?> invocation = svc.getCreditScoreAsync(customerFred,
new AsyncHandler<Score>() {
public void handleResponse (
Response<Score> response)
{
Score score = response.get();
// do work here...
}
}
);
다음은 비동기 폴링 클라이언트의 코드 예제입니다.
CreditRatingService svc = ...;
Response<Score> response = svc.getCreditScoreAsync(customerFred);
while (!response.isDone()) {
// do something while we wait
}
// no cast needed, thanks to generics
Score score = response.get();
</Score>
JAX-WS는 웹 서비스의 개발을 더욱 단순화하는 인젝션을 지원합니다. JAX-WS에서는 Java EE 5의 이 주요 기능을 사용하여 Java 런타임 환경에서 공통 자원을 작성하고 초기화하는 부담을 웹 서비스 애플리케이션으로부터 애플리케이션 컨테이너 환경으로 자체적으로 이전합니다. JAX-WS에서는 런타임 환경의 애플리케이션 라이프사이클 및 자원 인젝션에 대해 JSR-250에 정의된 어노테이션의 서브세트에 대한 지원을 제공합니다.
또한 애플리케이션 서버에서 JAX-WS 관리 클라이언트를 선언하고 JAX-WS 서비스 및 포트의 인젝션을 요청하기 위한 @Resource 또는 @WebServiceRef 어노테이션의 사용을 지원합니다. 필드 또는 메소드에 이러한 어노테이션 중 하나가 사용되는 경우 JAX-WS 서비스 또는 포트 인스턴스의 인젝션이 발생합니다. 또한 이러한 어노테이션을 사용하면 JNDI 네임스페이스에 바인드되는 어노테이션에 의해 지정된 유형이 생성됩니다.
@Resource 어노테이션은 Java EE 5(Java Platform, Enterprise Edition 5)에 포함된 공통 어노테이션 스펙인 JSR-250에 의해 정의됩니다. 서비스 엔드포인트 구현 클래스 내에 javax.xml.ws.WebServiceContext 유형의 변수에 대해 @Resource 어노테이션을 배치하여 자원 인젝션을 요청하고 특정 엔드포인트 호출과 관련된 javax.xml.ws.WebServiceContext 인터페이스를 수집할 수 있습니다. WebServiceContext 인터페이스에서 getMessageContext() 메소드를 사용하여 특정 메소드 호출과 연관된 요청에 대해 MessageContext를 수집할 수 있습니다.
@WebService
public class MyService {
@Resource private WebServiceContext ctx;
@Resource private SampleService svc;
@WebServiceRef
private SamplePort port;
public String echo (String input) {
…
}
}
자원 인젝션에 대한 자세한 정보는 JAX-WS 스펙의 절 5.2.1 및 5.3을 참조하십시오.
WebSphere® Application Server 버전 7.0에서는 JAXB 2.1 스펙을 지원합니다. JAX-WS 2.1에는 데이터 바인딩을 위해 JAXB 2.1이 필요합니다. JAXB 2.1에서는 향상된 컴파일 지원, @XMLSeeAlso 어노테이션에 대한 지원 및 전체 스키마 1.0 지원과 같은 개선사항을 제공합니다.
WebSphere Application Server Version 8.0 이상 및 WebSphere Application Server Liberty Profile V8.5.5에서는 JAXB 2.2 스펙을 지원합니다. JAX-WS 2.2에는 데이터 바인딩을 위해 JAXB 2.2가 필요합니다. JAXB 2.2에서는 스키마 생성 및 JAX-WS와의 통합을 향상하기 위해 해당 어노테이션에 대한 몇 가지 개선사항을 제공합니다.
JAX-WS에 대한 정적 클라이언트 프로그래밍 모델은 프록시 클라이언트라고 합니다. 프록시 클라이언트는 생성되거나 제공된 SEI(Service Endpoint interface)를 기반으로 웹 서비스를 호출합니다.
public class Base
{
@WebMethod(exclude=false)
public void superExposed(String s) {}
public String supernoanno(String s) {}
}
@WebService
public class BeanImpl extends Base
{
@WebMethod(exclude=false)
public void exposed(String s) {}
public String nonpublic(String s) {}
}
JAX-WS 2.1.6 이전에는 public
void exposed(String s) 메소드만 표시되었습니다. JAX-WS 2.1.6 이상에서는 다음 메소드가 표시됩니다. public void exposed(String s)
public String nonpublic(String s)
public void superExposed(String s)
WebSphere Application Server 버전 7.0.0.7 이상에는 IBM® JDK 6 SR6을 통한 이러한 변경사항이 포함됩니다. 워크벤치에서 JAX-WS 2.1.6 사용법 안내를 표시하도록 설정하려면 true로 설정하십시오.
로 이동한 후 JAX-WS 2.1.6 메소드 노출 안내 설정을JAX-WS 2.2 스펙은 JAX-WS 2.1 스펙 내의 기능을 대체하고 포함합니다. JAX-WS 2.2에서는 @MTOM, @Addressing 및 @RespectBinding 어노테이션과 같은 WebServiceFeature 관련 어노테이션을 사용할 수 있도록 클라이언트 측 지원을 추가합니다. JAX-WS 2.1에서는 서버에 이러한 어노테이션에 대한 지원을 이전에 추가했습니다. 또한 Java EE 1.3용 웹 서비스 스펙에서는 WebServiceFeature 관련 어노테이션 및 클라이언트와 서버 둘 다에서 이러한 기능을 구성하기 위해 배치 디스크립터 요소를 사용할 수 있는 지원을 도입합니다. JAX-WS 2.2에는 데이터 바인딩을 위해 JAXB(Java Architecture for XML Binding) 버전 2.2가 필요합니다.
JAX-WS에 대한 자세한 정보는 공식적인 JSR-224 스펙인 JSR 224: Java API for XML-Based Web Services(JAX-WS) 2.0을 참조하십시오.