You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by sc...@apache.org on 2006/12/07 17:08:44 UTC

svn commit: r483510 - in /webservices/axis2/trunk/java/modules/jaxws: src/org/apache/axis2/jaxws/client/BaseDispatch.java test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java

Author: scheu
Date: Thu Dec  7 08:08:43 2006
New Revision: 483510

URL: http://svn.apache.org/viewvc?view=rev&rev=483510
Log:
AXIS2-1844
Contributor: Rich Scheuerle
Provide try/catch blocks in Dispatch invoke* code to ensure that only WebServiceExceptions are thrown.

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java
    webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java?view=diff&rev=483510&r1=483509&r2=483510
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/client/BaseDispatch.java Thu Dec  7 08:08:43 2006
@@ -89,220 +89,255 @@
     protected abstract AsyncResponse createAsyncResponseListener();
     
     public Object invoke(Object obj) throws WebServiceException {
-        if (log.isDebugEnabled()) { 
-            log.debug("Entered synchronous invocation: BaseDispatch.invoke()");
-        }
-        
-        // Create the InvocationContext instance for this request/response flow.
-        InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
-        invocationContext.setServiceClient(serviceClient);
-        
-        // Create the MessageContext to hold the actual request message and its
-        // associated properties
-        MessageContext requestMsgCtx = new MessageContext();
-        invocationContext.setRequestMessageContext(requestMsgCtx);
-        
-        Message requestMsg = null;
-        if (isValidInvocationParam(obj)) {
-            requestMsg = createMessageFromValue(obj);
-        }
-        else {
-            throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
-        }
-        
-        setupMessageProperties(requestMsg);
-        requestMsgCtx.setMessage(requestMsg);            
-            
-        // Copy the properties from the request context into the MessageContext
-        requestMsgCtx.getProperties().putAll(requestContext);
-        
-        // Send the request using the InvocationController
-        ic.invoke(invocationContext);
         
-        MessageContext responseMsgCtx = invocationContext.getResponseMessageContext();
-        
-        //FIXME: This is temporary until more of the Message model is available
-        Message responseMsg = responseMsgCtx.getMessage();
+        // Catch all exceptions and rethrow an appropriate WebService Exception
         try {
-            if (responseMsg.isFault()) {
-                XMLFault fault = responseMsg.getXMLFault();
-                throw ExceptionFactory.makeWebServiceException(fault.getReason().getText());
-            }
-            else if (responseMsgCtx.getLocalException() != null) {
-                // use the factory, it'll throw the right thing:
-                throw ExceptionFactory.makeWebServiceException(responseMsgCtx.getLocalException());
+            if (log.isDebugEnabled()) { 
+                log.debug("Entered synchronous invocation: BaseDispatch.invoke()");
+            }
+            
+            // Create the InvocationContext instance for this request/response flow.
+            InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
+            invocationContext.setServiceClient(serviceClient);
+            
+            // Create the MessageContext to hold the actual request message and its
+            // associated properties
+            MessageContext requestMsgCtx = new MessageContext();
+            invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            Message requestMsg = null;
+            if (isValidInvocationParam(obj)) {
+                requestMsg = createMessageFromValue(obj);
+            }
+            else {
+                throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
             }
-        } catch (MessageException e) {
+            
+            setupMessageProperties(requestMsg);
+            requestMsgCtx.setMessage(requestMsg);            
+            
+            // Copy the properties from the request context into the MessageContext
+            requestMsgCtx.getProperties().putAll(requestContext);
+            
+            // Send the request using the InvocationController
+            ic.invoke(invocationContext);
+            
+            MessageContext responseMsgCtx = invocationContext.getResponseMessageContext();
+            
+            Message responseMsg = responseMsgCtx.getMessage();
+            try {
+                if (responseMsg.isFault()) {
+                    XMLFault fault = responseMsg.getXMLFault();
+                    throw ExceptionFactory.makeWebServiceException(fault.getReason().getText());
+                }
+                else if (responseMsgCtx.getLocalException() != null) {
+                    // use the factory, it'll throw the right thing:
+                    throw ExceptionFactory.makeWebServiceException(responseMsgCtx.getLocalException());
+                }
+            } catch (MessageException e) {
+                throw ExceptionFactory.makeWebServiceException(e);
+            }
+            
+            Object returnObj = getValueFromMessage(responseMsg);
+            
+            //Check to see if we need to maintain session state
+            if (requestMsgCtx.isMaintainSession()) {
+                //TODO: Need to figure out a cleaner way to make this call. 
+                setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
+            }
+            
+            if (log.isDebugEnabled()) {
+                log.debug("Synchronous invocation completed: BaseDispatch.invoke()");
+            }
+            
+            return returnObj;
+        } catch (WebServiceException e) {
+            throw e; 
+        } catch (Exception e) {
+            // All exceptions are caught and rethrown as a WebServiceException
             throw ExceptionFactory.makeWebServiceException(e);
         }
-        
-        Object returnObj = getValueFromMessage(responseMsg);
-        
-        //Check to see if we need to maintain session state
-        if (requestMsgCtx.isMaintainSession()) {
-            //TODO: Need to figure out a cleaner way to make this call. 
-            setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
-        }
-        
-        if (log.isDebugEnabled()) {
-            log.debug("Synchronous invocation completed: BaseDispatch.invoke()");
-        }
-        
-        return returnObj;
     }
     
     public void invokeOneWay(Object obj) throws WebServiceException{
-        if (log.isDebugEnabled()) { 
-            log.debug("Entered one-way invocation: BaseDispatch.invokeOneWay()");
-        }
-        
-        // Create the InvocationContext instance for this request/response flow.
-        InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
-        invocationContext.setServiceClient(serviceClient);
-       
-        // Create the MessageContext to hold the actual request message and its
-        // associated properties
-        MessageContext requestMsgCtx = new MessageContext();
-        invocationContext.setRequestMessageContext(requestMsgCtx);
-       
-        Message requestMsg = null;
-        if (isValidInvocationParam(obj)) {
-            requestMsg = createMessageFromValue(obj);
-        }
-        else {
-            throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
-        }
         
-        setupMessageProperties(requestMsg);
-        requestMsgCtx.setMessage(requestMsg);
-       
-        // Copy the properties from the request context into the MessageContext
-        requestMsgCtx.getProperties().putAll(requestContext);
-       
-        // Send the request using the InvocationController
-        ic.invokeOneWay(invocationContext);
-        
-        //Check to see if we need to maintain session state
-        if (requestMsgCtx.isMaintainSession()) {
-            //TODO: Need to figure out a cleaner way to make this call. 
-            setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
-        }
-       
-        if (log.isDebugEnabled()) {
-            log.debug("One-way invocation completed: BaseDispatch.invokeOneWay()");
+        // All exceptions are caught and rethrown as a WebServiceException
+        try {
+            if (log.isDebugEnabled()) { 
+                log.debug("Entered one-way invocation: BaseDispatch.invokeOneWay()");
+            }
+            
+            // Create the InvocationContext instance for this request/response flow.
+            InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
+            invocationContext.setServiceClient(serviceClient);
+            
+            // Create the MessageContext to hold the actual request message and its
+            // associated properties
+            MessageContext requestMsgCtx = new MessageContext();
+            invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            Message requestMsg = null;
+            if (isValidInvocationParam(obj)) {
+                requestMsg = createMessageFromValue(obj);
+            }
+            else {
+                throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
+            }
+            
+            setupMessageProperties(requestMsg);
+            requestMsgCtx.setMessage(requestMsg);
+            
+            // Copy the properties from the request context into the MessageContext
+            requestMsgCtx.getProperties().putAll(requestContext);
+            
+            // Send the request using the InvocationController
+            ic.invokeOneWay(invocationContext);
+            
+            //Check to see if we need to maintain session state
+            if (requestMsgCtx.isMaintainSession()) {
+                //TODO: Need to figure out a cleaner way to make this call. 
+                setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
+            }
+            
+            if (log.isDebugEnabled()) {
+                log.debug("One-way invocation completed: BaseDispatch.invokeOneWay()");
+            }
+            
+            return;
+        } catch (WebServiceException e) {
+            throw e; 
+        } catch (Exception e) {
+            // All exceptions are caught and rethrown as a WebServiceException
+            throw ExceptionFactory.makeWebServiceException(e);
         }
-       
-        return;
     }
    
     public Future<?> invokeAsync(Object obj, AsyncHandler asynchandler) throws WebServiceException {
-        if (log.isDebugEnabled()) { 
-            log.debug("Entered asynchronous (callback) invocation: BaseDispatch.invokeAsync()");
-        }
-        
-        // Create the InvocationContext instance for this request/response flow.
-        InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
-        invocationContext.setServiceClient(serviceClient);
         
-        // Create the MessageContext to hold the actual request message and its
-        // associated properties
-        MessageContext requestMsgCtx = new MessageContext();
-        invocationContext.setRequestMessageContext(requestMsgCtx);
-        
-        Message requestMsg = null;
-        if (isValidInvocationParam(obj)) {
-            requestMsg = createMessageFromValue(obj);
-        }
-        else {
-            throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
-        }
-        
-        setupMessageProperties(requestMsg);
-        requestMsgCtx.setMessage(requestMsg);
-        
-        // Copy the properties from the request context into the MessageContext
-        requestMsgCtx.getProperties().putAll(requestContext);
-
-        // Setup the Executor that will be used to drive async responses back to 
-        // the client.
-        // FIXME: We shouldn't be getting this from the ServiceDelegate, rather each 
-        // Dispatch object should have it's own.
-        Executor e = serviceDelegate.getExecutor();
-        invocationContext.setExecutor(e);
-        
-        // Create the AsyncListener that is to be used by the InvocationController.
-        AsyncResponse listener = createAsyncResponseListener();
-        invocationContext.setAsyncResponseListener(listener);
-        
-        // Send the request using the InvocationController
-        Future<?> asyncResponse = ic.invokeAsync(invocationContext, asynchandler);
-        
-        //Check to see if we need to maintain session state
-        if (requestMsgCtx.isMaintainSession()) {
-            //TODO: Need to figure out a cleaner way to make this call. 
-            setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
-        }
-        
-        if (log.isDebugEnabled()) {
-            log.debug("Asynchronous (callback) invocation sent: BaseDispatch.invokeAsync()");
+        // All exceptions are caught and rethrown as a WebServiceException
+        try {
+            if (log.isDebugEnabled()) { 
+                log.debug("Entered asynchronous (callback) invocation: BaseDispatch.invokeAsync()");
+            }
+            
+            // Create the InvocationContext instance for this request/response flow.
+            InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
+            invocationContext.setServiceClient(serviceClient);
+            
+            // Create the MessageContext to hold the actual request message and its
+            // associated properties
+            MessageContext requestMsgCtx = new MessageContext();
+            invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            Message requestMsg = null;
+            if (isValidInvocationParam(obj)) {
+                requestMsg = createMessageFromValue(obj);
+            }
+            else {
+                throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
+            }
+            
+            setupMessageProperties(requestMsg);
+            requestMsgCtx.setMessage(requestMsg);
+            
+            // Copy the properties from the request context into the MessageContext
+            requestMsgCtx.getProperties().putAll(requestContext);
+            
+            // Setup the Executor that will be used to drive async responses back to 
+            // the client.
+            // FIXME: We shouldn't be getting this from the ServiceDelegate, rather each 
+            // Dispatch object should have it's own.
+            Executor e = serviceDelegate.getExecutor();
+            invocationContext.setExecutor(e);
+            
+            // Create the AsyncListener that is to be used by the InvocationController.
+            AsyncResponse listener = createAsyncResponseListener();
+            invocationContext.setAsyncResponseListener(listener);
+            
+            // Send the request using the InvocationController
+            Future<?> asyncResponse = ic.invokeAsync(invocationContext, asynchandler);
+            
+            //Check to see if we need to maintain session state
+            if (requestMsgCtx.isMaintainSession()) {
+                //TODO: Need to figure out a cleaner way to make this call. 
+                setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
+            }
+            
+            if (log.isDebugEnabled()) {
+                log.debug("Asynchronous (callback) invocation sent: BaseDispatch.invokeAsync()");
+            }
+            
+            return asyncResponse;
+        } catch (WebServiceException e) {
+            throw e; 
+        } catch (Exception e) {
+            // All exceptions are caught and rethrown as a WebServiceException
+            throw ExceptionFactory.makeWebServiceException(e);
         }
-        
-        return asyncResponse;
     }
   
     public Response invokeAsync(Object obj)throws WebServiceException{
-        if (log.isDebugEnabled()) { 
-            log.debug("Entered asynchronous (polling) invocation: BaseDispatch.invokeAsync()");
-        }
-        
-        // Create the InvocationContext instance for this request/response flow.
-        InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
-        invocationContext.setServiceClient(serviceClient);
-        
-        // Create the MessageContext to hold the actual request message and its
-        // associated properties
-        MessageContext requestMsgCtx = new MessageContext();
-        invocationContext.setRequestMessageContext(requestMsgCtx);
         
-        Message requestMsg = null;
-        if (isValidInvocationParam(obj)) {
-            requestMsg = createMessageFromValue(obj);
-        }
-        else {
-            throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
-        }
-        
-        setupMessageProperties(requestMsg);
-        requestMsgCtx.setMessage(requestMsg);
-        
-        // Copy the properties from the request context into the MessageContext
-        requestMsgCtx.getProperties().putAll(requestContext);
-
-        // Setup the Executor that will be used to drive async responses back to 
-        // the client.
-        // FIXME: We shouldn't be getting this from the ServiceDelegate, rather each 
-        // Dispatch object should have it's own.
-        Executor e = serviceDelegate.getExecutor();
-        invocationContext.setExecutor(e);
-        
-        // Create the AsyncListener that is to be used by the InvocationController.
-        AsyncResponse listener = createAsyncResponseListener();
-        invocationContext.setAsyncResponseListener(listener);
-        
-        // Send the request using the InvocationController
-        Response asyncResponse = ic.invokeAsync(invocationContext);
-        
-        //Check to see if we need to maintain session state
-        if (requestMsgCtx.isMaintainSession()) {
-            //TODO: Need to figure out a cleaner way to make this call. 
-            setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
-        }
-        
-        if (log.isDebugEnabled()) {
-            log.debug("Asynchronous (polling) invocation sent: BaseDispatch.invokeAsync()");
+        // All exceptions are caught and rethrown as a WebServiceException
+        try {
+            if (log.isDebugEnabled()) { 
+                log.debug("Entered asynchronous (polling) invocation: BaseDispatch.invokeAsync()");
+            }
+            
+            // Create the InvocationContext instance for this request/response flow.
+            InvocationContext invocationContext = InvocationContextFactory.createInvocationContext(null);
+            invocationContext.setServiceClient(serviceClient);
+            
+            // Create the MessageContext to hold the actual request message and its
+            // associated properties
+            MessageContext requestMsgCtx = new MessageContext();
+            invocationContext.setRequestMessageContext(requestMsgCtx);
+            
+            Message requestMsg = null;
+            if (isValidInvocationParam(obj)) {
+                requestMsg = createMessageFromValue(obj);
+            }
+            else {
+                throw ExceptionFactory.makeWebServiceException("dispatchInvalidParam");
+            }
+            
+            setupMessageProperties(requestMsg);
+            requestMsgCtx.setMessage(requestMsg);
+            
+            // Copy the properties from the request context into the MessageContext
+            requestMsgCtx.getProperties().putAll(requestContext);
+            
+            // Setup the Executor that will be used to drive async responses back to 
+            // the client.
+            // FIXME: We shouldn't be getting this from the ServiceDelegate, rather each 
+            // Dispatch object should have it's own.
+            Executor e = serviceDelegate.getExecutor();
+            invocationContext.setExecutor(e);
+            
+            // Create the AsyncListener that is to be used by the InvocationController.
+            AsyncResponse listener = createAsyncResponseListener();
+            invocationContext.setAsyncResponseListener(listener);
+            
+            // Send the request using the InvocationController
+            Response asyncResponse = ic.invokeAsync(invocationContext);
+            
+            //Check to see if we need to maintain session state
+            if (requestMsgCtx.isMaintainSession()) {
+                //TODO: Need to figure out a cleaner way to make this call. 
+                setupSessionContext(invocationContext.getServiceClient().getServiceContext().getProperties());
+            }
+            
+            if (log.isDebugEnabled()) {
+                log.debug("Asynchronous (polling) invocation sent: BaseDispatch.invokeAsync()");
+            }
+            
+            return asyncResponse;
+        } catch (WebServiceException e) {
+            throw e; 
+        } catch (Exception e) {
+            // All exceptions are caught and rethrown as a WebServiceException
+            throw ExceptionFactory.makeWebServiceException(e);
         }
-        
-        return asyncResponse;
     }
     
     public void setServiceClient(ServiceClient sc) {
@@ -372,7 +407,7 @@
         if (object instanceof DOMSource) {
             DOMSource ds = (DOMSource) object;
             if (ds.getNode() == null && ds.getSystemId() == null) {
-                throw ExceptionFactory.makeWebServiceException("");
+                throw ExceptionFactory.makeWebServiceException("dispatchBadDOMSource");
             }
         }
         

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java?view=diff&rev=483510&r1=483509&r2=483510
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/DOMSourceDispatch.java Thu Dec  7 08:08:43 2006
@@ -301,6 +301,8 @@
         } catch (WebServiceException e) {
             System.out.println("A Web Service Exception was expected: " + e.toString());
             assertTrue(e.getMessage() != null);
+        } catch (Exception e) {
+            fail("WebServiceException was expected, but received " + e);
         }
         
     }

Modified: webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java?view=diff&rev=483510&r1=483509&r2=483510
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/test/org/apache/axis2/jaxws/dispatch/SAXSourceDispatch.java Thu Dec  7 08:08:43 2006
@@ -331,11 +331,25 @@
         Source request = new SAXSource();
         
         try {
+            dispatch.invoke(request);
+            fail("WebServiceException was expected");
+        } catch (WebServiceException e) {
+            System.out.println("A Web Service Exception was expected: " + e.toString());
+            assertTrue(e.getMessage() != null);
+        } catch (Exception e) {
+            fail("WebServiceException was expected, but received:" + e);
+        }
+        
+        try {
             dispatch.invokeOneWay(request);
             fail("WebServiceException was expected");
         } catch (WebServiceException e) {
             System.out.println("A Web Service Exception was expected: " + e.toString());
             assertTrue(e.getMessage() != null);
+        } catch (Exception e) {
+            fail("WebServiceException was expected, but received:" + e);
         }
+        
     }
+    
 }



---------------------------------------------------------------------
To unsubscribe, e-mail: axis-cvs-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-cvs-help@ws.apache.org