You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2008/03/18 20:13:25 UTC

svn commit: r638511 - /incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java

Author: rfeng
Date: Tue Mar 18 12:13:23 2008
New Revision: 638511

URL: http://svn.apache.org/viewvc?rev=638511&view=rev
Log:
Apply the patch from Scott for TUSCANY-2094

Modified:
    incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java

Modified: incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java?rev=638511&r1=638510&r2=638511&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java (original)
+++ incubator/tuscany/java/sca/modules/interface-java-jaxws/src/main/java/org/apache/tuscany/sca/interfacedef/java/jaxws/JAXWSFaultExceptionMapper.java Tue Mar 18 12:13:23 2008
@@ -73,14 +73,27 @@
         DataType<?> faultBeanType = exceptionType.getLogical();
         Class<?> faultBeanClass = faultBeanType.getPhysical();
         try {
+            Exception exc = null;
             try {
                 Constructor<?> constructor =
                     exceptionClass.getConstructor(new Class[] {String.class, faultBeanClass, Throwable.class});
-                return (Exception)constructor.newInstance(new Object[] {message, faultInfo, cause});
+                exc = (Exception)constructor.newInstance(new Object[] {message, faultInfo, cause});
             } catch (NoSuchMethodException e) {
                 // Create a generic fault exception
-                return new FaultException(message, faultInfo, cause);
+                exc = new FaultException(message, faultInfo, cause);
             }
+            // Include the elem name into the FaultException we build so it can be used for matching in the DataTransformationInterceptor
+            // 
+            // Note this may happen even if we find a constructor above, that is the type of the non-generic fault exc may be an instance
+            // of FaultException
+            //
+            if ((exc instanceof FaultException) && (faultBeanType.getLogical() instanceof XMLType)) {
+                FaultException faultExc = (FaultException)exc;
+                DataType<XMLType> faultBeanXMLType = (DataType<XMLType>)faultBeanType;
+                XMLType faultLogical = faultBeanXMLType.getLogical();
+                faultExc.setFaultName(faultLogical.getElementName());
+            }
+            return exc;
         } catch (Throwable e) {
             throw new IllegalArgumentException(e);
         }
@@ -171,6 +184,9 @@
 
     @SuppressWarnings("unchecked")
     public boolean introspectFaultDataType(DataType<DataType> exceptionType) {
+        QName faultName = null;
+        boolean result = false;
+
         Class<?> cls = exceptionType.getPhysical();
         if (cls == FaultException.class) {
             return true;
@@ -179,7 +195,7 @@
         Class<?> faultBean = null;
         WebFault fault = cls.getAnnotation(WebFault.class);
         if (fault != null) {
-            QName faultName = new QName(fault.targetNamespace(), fault.name());
+            faultName = new QName(fault.targetNamespace(), fault.name());
             XMLType xmlType = new XMLType(faultName, null);
             faultType.setLogical(xmlType);
             if (!"".equals(fault.faultBean())) {
@@ -211,12 +227,23 @@
         faultType.setPhysical(faultBean);
         // TODO: Use the databinding framework to introspect the fault bean class
         if (dataBindingExtensionPoint != null) {
-            return dataBindingExtensionPoint.introspectType(faultType, null, Throwable.class
-                .isAssignableFrom(faultBean));
+            result =
+                dataBindingExtensionPoint.introspectType(faultType, null, Throwable.class.isAssignableFrom(faultBean));
         }
 
-        return false;
+        /*
+         The introspection of the fault DT may not have calculated the correct element name, 
+         though we may have already done this in this method.  Let's look at the DataType now 
+         that introspection is done, and, if it has an XMLType, let's set the element to the 
+         'faultName' if we calculated one.
+         */
+        if ((faultName != null) && (faultType.getLogical() instanceof XMLType)) {
+            XMLType faultTypeXML = (XMLType)faultType.getLogical();
+            // The element name (if set) should match the fault name
+            faultTypeXML.setElementName(faultName);
+        }
 
+        return result;
     }
 
     public void setDataBindingExtensionPoint(DataBindingExtensionPoint dataBindingExtensionPoint) {



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