2010-08-23 3 views
3

웹 서비스 클라이언트를 초기화하기 위해 Spring의 ContextLoaderListener를 사용하고 있지만, 애플리케이션 시작 중에 wsdl 문서를 사용할 수 없다면 애플리케이션의 일부가 손상되고 어떻게 수정해야할지 모르겠다. 응용 프로그램이 성공적으로 시작되고 그 시점에서 큰 스택 추적을 로깅합니다. 예외입니다 : 내 응용 프로그램에서 적절하게 파손 된 구성 요소의 상태를 표시 할 수 있도록 질문Spring ContextLoaderListener에서 예외를 catch/correct하는 방법은 무엇입니까?

org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'myWebService' defined in class path resource [spring-myapp-jaxws.xml]: Invocation of init method failed; nested exception is javax.xml.ws.WebServiceException: The following WSDL exception occurred... etc.

커플 ...

  • 나는 초기화 예외를 잡을 수 있습니까?
  • 사용자 요청에 따라 myWebService 빈을 다시 시도하도록 Spring에 지시 할 수 있습니까?

답변

3

빈을 lazy="true"으로 정의하여 참조되지 않는 경우 초기화되지 않도록하십시오.

그렇지 않으면이 검사를 수행하는 프록시를 만들어야합니다. 프록시를 만들 수 있습니다 :

  • java.lang.reflect.Proxy
  • CGLIB
  • 와 Javassist 귀하의 옵션은 다음 졸이다 모든 표시
+0

나는 게으르게 문제가 해결되지 않는 한 반대 결정은 WS 빈을 초기화 간주 - 사용자가 처음 사용하려고 할 때 WSDL을 사용하지 못할 수 있습니다을 그것. 재 : 프록시 만들기 - 예외 처리를하기 위해 웹 서비스 빈을 래핑하는 무언가를 만들고 서비스가 제대로 삽입되지 않은 경우 재 초기화를 시도합니다. 프록시에 대한 – Brabster

+0

- 예. – Bozho

0

:

  1. 않도록하고 javax.xml.ws.WebServiceException 예외에서 귀하의 통제에서 전파됩니다. 코드의 어딘가에 예외를 잡아서이 작업을 수행 할 것입니다.
  2. 예외가 throw 된 경우 웹 서비스가 호출 될 때 예외를 throw 한 호출을 다시 시도해야합니다.
  3. 오류가 발생하면 수락하십시오. 사용자가 무언가를 시도 할 때 예외가 발생하면 오류가 발생했음을 알리고 다시 시도해야합니다 (어쩌면 적당한 시간이 지난 후). 여기

은 예입니다


public interface MyWebServiceCallingInterface 
{ 
    String callTheWebService(); 
} 

public class MyWebService extends something, 
implements MyWebServiceCallingInterface 
{ 
    public MyWebService() 
    throws javax.xml.ws.WebServiceException 
    { 
     ... do stuff, maybe throw exception ... 
    } 

    public String callTheWebService() 
    { 
     ... do stuff ... 
    } 
} 

public class MyWebServiceWrapper 
implements MyWebServiceCallingInterface 
{ 
    private MyWebService myWebService; 

    public MyWebServiceWrapper() 
    { 
     createWebService(); 
    } 

    public String callTheWebService() 
    { 
     if (myWebService == null) 
     { 
      createWebService(); 
     } 

     if (myWebService != null) 
     { 
      return myWebService.callTheWebService(); 
     } 
     else 
     { 
      ...error handling stuff... 
      return ... something meaningful ... 
     } 

    } 

    private void createWebService() 
    { 
     try 
     { 
      myWebService = new MyWebService(); 
     } 
     catch (javax.xml.ws.webServiceException exception) 
     { 
      myWebService = null; 
     } 
    } 
}
관련 문제