검색

40.6. 원격 서비스에서 반환한 예외 catching Exceptions returned from a Remote Service

download PDF

40.6.1. 개요

비동기 요청을 수행하는 소비자는 동기 요청을 할 때 반환된 것과 동일한 예외를 받지 않습니다. 소비자에게 비동기적으로 반환되는 모든 예외는 ExecutionException 예외로 래핑됩니다. 서비스에서 throw한 실제 예외는 ExecutionException 예외의 cause 필드에 저장됩니다.

40.6.2. 예외를 포착합니다.

원격 서비스에서 생성한 예외는 소비자의 비즈니스 논리에 응답을 전달하는 메서드에서 로컬로 throw됩니다. 소비자가 동기 요청을 하면 원격 호출을 수행하는 메서드에서 예외가 발생합니다. 소비자가 비동기 요청을 수행할 때 Response<T> 개체의 get() 메서드는 예외를 throw합니다. 소비자는 응답 메시지 검색을 시도할 때까지 요청을 처리하는 동안 오류가 발생했음을 감지하지 않습니다.

JAX-WS 프레임워크에서 생성된 메서드와 달리 Response<T> 개체의 get() 메서드는 사용자 모델링 예외 및 일반 JAX-WS 예외가 발생하지 않습니다. 대신 java.util.concurrent.ExecutionException 예외가 throw됩니다.

40.6.3. 예외 세부 정보 가져오기

프레임워크는 원격 서비스에서 반환된 예외를 ExecutionException 예외의 원인 필드에 저장합니다. 원인 필드의 값을 가져오고 저장된 예외를 검사하여 원격 예외에 대한 세부 정보가 추출됩니다. 저장된 예외는 사용자 정의 예외 또는 일반 JAX-WS 예외 중 하나일 수 있습니다.

40.6.4. 예제

예 40.11. “Polling Approach을 사용하여 예외 관리” 은 폴링 방식을 사용하여 예외를 catch하는 예를 보여줍니다.

예 40.11. Polling Approach을 사용하여 예외 관리

package demo.hw.client;

import java.io.File;
import java.util.concurrent.Future;

import javax.xml.namespace.QName;
import javax.xml.ws.Response;

import org.apache.hello_world_async_soap_http.*;

public final class Client
{
  private static final QName SERVICE_NAME
    = new QName("http://apache.org/hello_world_async_soap_http",
                "SOAPService");

  private Client() {}

  public static void main(String args[]) throws Exception
  {
    ...
    // port is a previously established proxy object.
    Response<GreetMeSometimeResponse> resp =
       port.greetMeSometimeAsync(System.getProperty("user.name"));

    while (!resp.isDone())
    {
      // client does some work
    }

    try
    {
      GreetMeSometimeResponse reply = greetMeSomeTimeResp.get();
      // process the response
    }
    catch (ExecutionException ee)
    {
       Throwable cause = ee.getCause();
       System.out.println("Exception "+cause.getClass().getName()+" thrown by the remote service.");
    }
  }
}

예 40.11. “Polling Approach을 사용하여 예외 관리” 의 코드는 다음을 수행합니다.

Response<T> 개체의 get() 메서드로 호출을 try/catch 블록으로 래핑합니다.

ExecutionException 예외를 catch합니다.

예외에서 cause 필드를 추출합니다.

소비자가 콜백 접근 방식을 사용하는 경우 예외를 catch하는 데 사용되는 코드가 서비스 응답을 추출하는 콜백 오브젝트에 배치됩니다.

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.