40.6. 원격 서비스에서 반환된 예외 캡처


40.6.1. 개요

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

40.6.2. 예외 검색

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

Cryostat-WS 프레임워크에서 생성된 메서드와 달리 Response<T> 오브젝트의 get() 메서드는 사용자 모델링 예외나 일반 Cryostat-WS 예외도 발생하지 않습니다. 대신 java.util.concurrent.ExecutionException 예외가 발생합니다.

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

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

40.6.4. 예

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

예 40.11. Polling Approach를 사용하여 예외 catch

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를 사용하여 예외 catch” 의 코드는 다음을 수행합니다.

호출을 try/catch 블록에서 Response<T> 오브젝트의 get() 메서드로 래핑합니다.

ExecutionException 예외를 가져옵니다.

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

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

Red Hat logoGithubRedditYoutubeTwitter

자세한 정보

평가판, 구매 및 판매

커뮤니티

Red Hat 문서 정보

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

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

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

Red Hat 소개

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

© 2024 Red Hat, Inc.