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 di...@apache.org on 2008/04/04 12:32:05 UTC

svn commit: r644671 - /webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java

Author: dims
Date: Fri Apr  4 03:31:52 2008
New Revision: 644671

URL: http://svn.apache.org/viewvc?rev=644671&view=rev
Log:
Fix for AXIS2-3703 - Thread safety in XMLFaultCode

Modified:
    webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java

Modified: webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java
URL: http://svn.apache.org/viewvc/webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java?rev=644671&r1=644670&r2=644671&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java (original)
+++ webservices/axis2/trunk/java/modules/jaxws/src/org/apache/axis2/jaxws/message/XMLFaultCode.java Fri Apr  4 03:31:52 2008
@@ -28,17 +28,79 @@
  *
  * @see XMLFault
  */
-public enum XMLFaultCode {
+public class XMLFaultCode {
+
+
+    //   SENDER             -> SOAP 1.2 Sender              / SOAP 1.1  Client
+    //   RECEIVER           -> SOAP 1.2 Receiver            / SOAP 1.1  Server
+    //   MUSTUNDERSTAND     -> SOAP 1.2 MustUnderstand      / SOAP 1.1  MustUnderstand
+    //   DATAENCODINGUNKNOWN-> SOAP 1.2 DataEncodingUnknown / SOAP 1.1  Server
+    //   VERSIONMISMATCH    -> SOAP 1.2 VersionMismatch     / SOAP 1.1  VersionMismatch
+    //   CUSTOM_SOAP11_ONLY -> SOAP 1.2 Receiver            / SOAP 1.1  "custom qname"
+
     // Rendered as qnames with the following local names
     //     (the namespace is the corresponding envelope namespace)
-    SENDER,                 // SOAP 1.2 Sender                SOAP 1.1  Client
-    RECEIVER,               // SOAP 1.2 Receiver              SOAP 1.1  Server
-    MUSTUNDERSTAND,         // SOAP 1.2 MustUnderstand        SOAP 1.1  MustUnderstand
-    DATAENCODINGUNKNOWN,    // SOAP 1.2 DataEncodingUnknown   SOAP 1.1  Server
-    VERSIONMISMATCH,        // SOAP 1.2 VersionMismatch       SOAP 1.1  VersionMismatch
-    CUSTOM_SOAP11_ONLY;     // SOAP 1.2 Receiver              SOAP 1.1  "custom qname"
+    
+    public static final XMLFaultCode SENDER = (new XMLFaultCode() {
+        public QName toQName(String namespace) {
+            String localPart;
+            if (namespace.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
+                localPart = "Sender";
+            } else {
+                localPart = "Client";
+            }
+            return new QName(namespace, localPart);
+        }
+    });
+    
+    public static final XMLFaultCode RECEIVER = (new XMLFaultCode() {
+        public QName toQName(String namespace) {
+            String localPart;
+            if (namespace.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
+                localPart = "Receiver";
+            } else {
+                localPart = "Server";
+            }
+            return new QName(namespace, localPart);
+        }
+    });
+    
+    public static final XMLFaultCode MUSTUNDERSTAND = (new XMLFaultCode() {
+        public QName toQName(String namespace) {
+            return new QName(namespace, "MustUnderstand");
+        }
+    });
+    
+    public static final XMLFaultCode DATAENCODINGUNKNOWN = (new XMLFaultCode() {
+        public QName toQName(String namespace) {
+            String localPart;
+            if (namespace.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
+                localPart = "DataEncodingUnknown";
+            } else {
+                localPart = "Server";
+            }
+            return new QName(namespace, localPart);
+        }
+    });
+    
+    public static final XMLFaultCode VERSIONMISMATCH = (new XMLFaultCode() {
+        public QName toQName(String namespace) {
+            return new QName(namespace, "VersionMismatch");
+        }
+    });
+    
 
-    private QName customQName = null;  // Set only for CUSTOM case
+    private QName faultCode;
+    
+    private XMLFaultCode() {        
+    }
+        
+    public XMLFaultCode(QName faultCode) {
+        if (faultCode == null) {
+            throw new NullPointerException("Null fault code");
+        }
+        this.faultCode = faultCode;
+    }
     
     // Utility Methods
 
@@ -48,60 +110,8 @@
      * @param namespace of the envelope for the protocol
      * @return
      */
-    public QName toQName(String namespace) {
-        if (this == CUSTOM_SOAP11_ONLY) {
-            // If this is a CUSTOM code, then respect it for SOAP 1.1 only.
-            if (namespace.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
-                // For SOAP 1.2, convert to RECEIVER
-                return new QName(namespace, "Receiver");
-            } else {
-                return this.customQName;
-            }
-        } else {
-            // This is a specification defined qname
-            String localPart = null;
-            if (namespace.equals(SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI)) {
-                // SOAP 1.2
-                switch (this) {
-                case SENDER:
-                    localPart = "Sender";
-                    break;
-                case RECEIVER:
-                    localPart = "Receiver";
-                    break;
-                case MUSTUNDERSTAND:
-                    localPart = "MustUnderstand";
-                    break;
-                case DATAENCODINGUNKNOWN:
-                    localPart = "DataEncodingUnknown";
-                    break;
-                case VERSIONMISMATCH:
-                    localPart = "VersionMismatch";
-                    break;
-                }
-
-            } else {
-                // Assume SOAP 1.1
-                switch (this) {
-                case SENDER:
-                    localPart = "Client";
-                    break;
-                case RECEIVER:
-                    localPart = "Server";
-                    break;
-                case MUSTUNDERSTAND:
-                    localPart = "MustUnderstand";
-                    break;
-                case DATAENCODINGUNKNOWN:
-                    localPart = "Server";
-                    break;
-                case VERSIONMISMATCH:
-                    localPart = "VersionMismatch";
-                    break;
-                }
-            }
-            return new QName(namespace, localPart);
-        }
+    public QName toQName(String protocolNamespace) {
+        return this.faultCode;
     }
 
     /**
@@ -135,8 +145,7 @@
         } else if (localPart.equalsIgnoreCase("VersionMismatch")) { // Both
             xmlFaultCode = VERSIONMISMATCH;
         } else {
-            xmlFaultCode = CUSTOM_SOAP11_ONLY;
-            xmlFaultCode.customQName = qName;
+            xmlFaultCode = new XMLFaultCode(qName);
         }
         
         return xmlFaultCode;



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