代码之家  ›  专栏  ›  技术社区  ›  brabster

如何在Spring ContextLoaderListener中捕获/纠正异常?

  •  3
  • brabster  · 技术社区  · 15 年前

    我正在使用Spring的ContextLoaderListener初始化web服务客户机,但是如果在应用程序启动期间wsdl文档不可用,那么我的应用程序的一部分就会损坏,我不知道如何修复它。应用程序成功启动,只需在此时记录一个大的ol'堆栈跟踪。例外情况是:

    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.

    • 我是否可以捕获init异常,以便在应用程序中适当地显示损坏组件的状态?
    • 我可以告诉Spring根据用户请求重新初始化mywebservicebean吗?
    2 回复  |  直到 15 年前
        1
  •  3
  •   Bozho    15 年前

    尝试将bean定义为 lazy="true" ,因此,如果未引用它,则不会对其进行初始化。

    否则,您将不得不创建一个代理来进行此检查。代理可以通过以下方式创建:

    • java.lang.reflect.Proxy
    • cglib数据库
    • Java助手
        2
  •  0
  •   DwB    15 年前

    1. 防止 javax.xml.ws.WebServiceException
    2. 注意:当抛出异常时,您必须在调用web服务时重新尝试抛出异常的调用。
    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;
            }
        }
    }