You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-dev@axis.apache.org by ng...@apache.org on 2007/02/01 22:40:27 UTC

svn commit: r502367 - /webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java

Author: ngallardo
Date: Thu Feb  1 13:40:26 2007
New Revision: 502367

URL: http://svn.apache.org/viewvc?view=rev&rev=502367
Log:
AXIS2-2079

- Fixed the ProviderDispatcher to handle fault MessageContexts correctly as well.

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java?view=diff&rev=502367&r1=502366&r2=502367
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/server/dispatcher/ProviderDispatcher.java Thu Feb  1 13:40:26 2007
@@ -42,8 +42,6 @@
 import org.apache.axis2.jaxws.message.Message;
 import org.apache.axis2.jaxws.message.Protocol;
 import org.apache.axis2.jaxws.message.XMLFault;
-import org.apache.axis2.jaxws.message.XMLFaultCode;
-import org.apache.axis2.jaxws.message.XMLFaultReason;
 import org.apache.axis2.jaxws.message.factory.BlockFactory;
 import org.apache.axis2.jaxws.message.factory.MessageFactory;
 import org.apache.axis2.jaxws.message.factory.SOAPEnvelopeBlockFactory;
@@ -88,6 +86,7 @@
 	public ProviderDispatcher(Class _class, Object serviceInstance) {
 		super(_class, serviceInstance);
 	}
+    
     /* (non-Javadoc)
      * @see org.apache.axis2.jaxws.server.EndpointDispatcher#execute()
      */
@@ -171,6 +170,8 @@
         }
 
         // Invoke the actual Provider.invoke() method
+        boolean faultThrown = false;
+        XMLFault fault = null;
         Object responseParamValue = null;
         try {
             responseParamValue = (Object) org.apache.axis2.java.security.AccessController.doPrivileged(new PrivilegedAction() {
@@ -180,33 +181,45 @@
             });
         } catch (Exception e) {
             Throwable t = ClassUtils.getRootCause(e);
+            faultThrown = true;
+            fault = MethodMarshallerUtils.createXMLFaultFromSystemException(t);
+            
             if (log.isDebugEnabled()) {
                 log.debug("Marshal Throwable =" + e.getClass().getName());
                 log.debug("  rootCause =" + t.getClass().getName());
                 log.debug("  exception=" + t.toString());
             }
-            responseParamValue =MethodMarshallerUtils.createXMLFaultFromSystemException(t);
         }
 
-        // If we have a one-way operation, then we cannot create a MessageContext 
-        // for the response.  
+        // Create the response MessageContext
         MessageContext responseMsgCtx = null;
         if (!isOneWay(mc.getAxisMessageContext())) {
-            Message responseMsg = createMessageFromValue(responseParamValue);
-            
-            // Enable MTOM if indicated by the binding
-            String bindingType = endpointDesc.getBindingType();
-            if (bindingType != null) {
-                if (bindingType.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) ||
-                    bindingType.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING)) {
-                    responseMsg.setMTOMEnabled(true);
+            if (faultThrown) {
+                // If a fault was thrown, we need to create a slightly different
+                // MessageContext, than in the response path.
+                Message responseMsg = createMessageFromValue(fault);
+                responseMsgCtx = MessageContextUtils.createFaultMessageContext(mc);
+                responseMsgCtx.setMessage(responseMsg);
+            }
+            else {
+                Message responseMsg = createMessageFromValue(responseParamValue);
+                
+                // Enable MTOM if indicated by the binding
+                String bindingType = endpointDesc.getBindingType();
+                if (bindingType != null) {
+                    if (bindingType.equals(SOAPBinding.SOAP11HTTP_MTOM_BINDING) ||
+                        bindingType.equals(SOAPBinding.SOAP12HTTP_MTOM_BINDING)) {
+                        responseMsg.setMTOMEnabled(true);
+                    }
                 }
+                
+                responseMsgCtx = MessageContextUtils.createResponseMessageContext(mc);
+                responseMsgCtx.setMessage(responseMsg);                
             }
-            
-            responseMsgCtx = MessageContextUtils.
-                createResponseMessageContext(mc);
-            
-            responseMsgCtx.setMessage(responseMsg);            
+        }
+        else {
+            // If we have a one-way operation, then we cannot create a MessageContext for the response.
+            return null;
         }
                 
         return responseMsgCtx;        
@@ -339,12 +352,14 @@
     		try{
     			paramType = (ParameterizedType)giType;
     		}catch(ClassCastException e){
+                //TODO NLS
     			throw new Exception("Provider based SEI Class has to implement javax.xml.ws.Provider as javax.xml.ws.Provider<String>, javax.xml.ws.Provider<SOAPMessage>, javax.xml.ws.Provider<Source> or javax.xml.ws.Provider<JAXBContext>");
     		}
     		Class interfaceName = (Class)paramType.getRawType();
     		
     		if(interfaceName == javax.xml.ws.Provider.class){
     			if(paramType.getActualTypeArguments().length > 1){
+                    //TODO NLS
     				throw new Exception("Provider cannot have more than one Generic Types defined as Per JAX-WS Specification");
     			}
     			providerType = (Class)paramType.getActualTypeArguments()[0];



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