You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2014/05/31 11:23:36 UTC

svn commit: r1598845 - in /webservices/axiom/trunk/modules: axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/ axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/ axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/ axiom-...

Author: veithen
Date: Sat May 31 09:23:35 2014
New Revision: 1598845

URL: http://svn.apache.org/r1598845
Log:
SOAP 1.1: Eliminate the invalid TestSetMustUnderstandStringTrueFalse case and ensure that the mustUnderstand attribute is processed strictly following to specs.

Removed:
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap11/headerblock/TestSetMustUnderstandStringTrueFalse.java
Modified:
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/SOAPHelper.java
    webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/SOAP11HeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap12/SOAP12HeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap11/SOAP11HeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap12/SOAP12HeaderBlockImpl.java
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPSpec.java
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
    webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestSetMustUnderstandWithInvalidValue.java

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/SOAPHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/SOAPHelper.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/SOAPHelper.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/soap/impl/common/SOAPHelper.java Sat May 31 09:23:35 2014
@@ -28,8 +28,13 @@ import org.apache.axiom.soap.SOAPVersion
 public interface SOAPHelper {
     SOAPHelper SOAP11 = new SOAPHelper() {
         public Boolean parseBoolean(String literal) {
-            // TODO
-            return null;
+            if (literal.equals("1")) {
+                return Boolean.TRUE;
+            } else if (literal.equals("0")) {
+                return Boolean.FALSE;
+            } else {
+                return null;
+            }
         }
     };
     

Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -35,6 +35,7 @@ import org.apache.axiom.soap.SOAPCloneOp
 import org.apache.axiom.soap.SOAPConstants;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPProcessingException;
+import org.apache.axiom.soap.impl.common.SOAPHelper;
 
 import javax.xml.namespace.QName;
 
@@ -126,4 +127,34 @@ public abstract class SOAPHeaderBlockImp
             targetSHB.setProcessed();
         }
     }
+    
+    protected abstract SOAPHelper getSOAPHelper();
+
+    public final void setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
+        Boolean value = getSOAPHelper().parseBoolean(mustUnderstand);
+        if (value != null) {
+            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
+                         mustUnderstand,
+                         getVersion().getEnvelopeURI());
+        } else {
+            throw new SOAPProcessingException("Invalid value for mustUnderstand attribute");
+        }
+    }
+
+    public final boolean getMustUnderstand() throws SOAPProcessingException {
+        String mustUnderstand = getAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND, getVersion().getEnvelopeURI());
+        if (mustUnderstand != null) {
+            Boolean value = getSOAPHelper().parseBoolean(mustUnderstand);
+            if (value != null) {
+                return value.booleanValue();
+            } else {
+                throw new SOAPProcessingException(
+                        "Invalid value found in mustUnderstand value of " +
+                                this.getLocalName() +
+                                " header block");
+            }
+        } else {
+            return false;
+        }
+    }
 }

Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/SOAP11HeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/SOAP11HeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/SOAP11HeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap11/SOAP11HeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -31,6 +31,7 @@ import org.apache.axiom.soap.SOAPHeaderB
 import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.SOAPVersion;
 import org.apache.axiom.soap.SOAP11Version;
+import org.apache.axiom.soap.impl.common.SOAPHelper;
 import org.apache.axiom.soap.impl.dom.SOAPHeaderBlockImpl;
 
 public class SOAP11HeaderBlockImpl extends SOAPHeaderBlockImpl {
@@ -75,43 +76,6 @@ public class SOAP11HeaderBlockImpl exten
                      SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
     }
 
-    public void setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
-        if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                         mustUnderstand,
-                         SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        } else {
-            throw new SOAPProcessingException(
-                    "mustUndertand should be one of \"true\", \"false\", \"0\" or \"1\" ");
-        }
-    }
-
-    public boolean getMustUnderstand() throws SOAPProcessingException {
-        String mustUnderstand;
-        if ((mustUnderstand =
-                getAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                             SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI))
-                != null) {
-            if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-                return true;
-            } else if (SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand)) {
-                return false;
-            } else {
-                throw new SOAPProcessingException(
-                        "Invalid value found in mustUnderstand value of " +
-                                this.getLocalName() +
-                                " header block");
-            }
-        }
-        return false;
-
-    }
-
     /**
      * What SOAP version is this HeaderBlock?
      *
@@ -121,6 +85,10 @@ public class SOAP11HeaderBlockImpl exten
         return SOAP11Version.getSingleton();
     }
 
+    protected SOAPHelper getSOAPHelper() {
+        return SOAPHelper.SOAP11;
+    }
+
     protected OMElement createClone(OMCloneOptions options, ParentNode targetParent, boolean generateNSDecl) {
         SOAPHeaderBlock clone = new SOAP11HeaderBlockImpl(targetParent, getLocalName(), getNamespace(), null, factory, generateNSDecl);
         copyData(options, clone);

Modified: webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap12/SOAP12HeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap12/SOAP12HeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap12/SOAP12HeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/soap12/SOAP12HeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -67,43 +67,6 @@ public class SOAP12HeaderBlockImpl exten
 
     }
 
-    public void setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
-        if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                         mustUnderstand,
-                         SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        } else {
-            throw new SOAPProcessingException(
-                    "mustUndertand should be one of \"true\", \"false\", \"0\" or \"1\" ");
-        }
-    }
-
-    public boolean getMustUnderstand() throws SOAPProcessingException {
-        String mustUnderstand;
-        if ((mustUnderstand =
-                getAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                             SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI))
-                != null) {
-            if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-                return true;
-            } else if (SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand)) {
-                return false;
-            } else {
-                throw new SOAPProcessingException(
-                        "Invalid value found in mustUnderstand value of " +
-                                this.getLocalName() +
-                                " header block");
-            }
-        }
-        return false;
-
-    }
-
     public void setRelay(boolean relay) {
         setAttribute(SOAP12Constants.SOAP_RELAY,
                      String.valueOf(relay),
@@ -134,6 +97,10 @@ public class SOAP12HeaderBlockImpl exten
         return SOAP12Version.getSingleton();
     }
 
+    protected SOAPHelper getSOAPHelper() {
+        return SOAPHelper.SOAP12;
+    }
+
     protected OMElement createClone(OMCloneOptions options, ParentNode targetParent, boolean generateNSDecl) {
         SOAPHeaderBlock clone = new SOAP12HeaderBlockImpl(targetParent, getLocalName(), getNamespace(), null, factory, generateNSDecl);
         copyData(options, clone);

Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -38,6 +38,7 @@ import org.apache.axiom.soap.SOAPFactory
 import org.apache.axiom.soap.SOAPHeader;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPProcessingException;
+import org.apache.axiom.soap.impl.common.SOAPHelper;
 
 import javax.xml.namespace.QName;
 
@@ -163,4 +164,43 @@ public abstract class SOAPHeaderBlockImp
             targetSHB.setProcessed();
         }
     }
+    
+    protected abstract SOAPHelper getSOAPHelper();
+
+    public final void setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
+        Boolean value = getSOAPHelper().parseBoolean(mustUnderstand);
+        if (value != null) {
+            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
+                         mustUnderstand,
+                         getVersion().getEnvelopeURI());
+        } else {
+            throw new SOAPProcessingException("Invalid value for mustUnderstand attribute");
+        }
+    }
+
+    public final boolean getMustUnderstand() throws SOAPProcessingException {
+        // First, try getting the information from the property
+        // Fallback to getting the information from the attribute
+        String mustUnderstand;
+        if (this.hasOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY)) {
+            mustUnderstand = this.getOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY);
+        } else {
+            mustUnderstand = getAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND, getVersion().getEnvelopeURI());
+        }
+        
+        // Now parse the value
+        if (mustUnderstand != null) {
+            Boolean value = getSOAPHelper().parseBoolean(mustUnderstand);
+            if (value != null) {
+                return value.booleanValue();
+            } else {
+                throw new SOAPProcessingException(
+                        "Invalid value found in mustUnderstand value of " +
+                                this.getLocalName() +
+                                " header block");
+            }
+        } else {
+            return false;
+        }
+    }
 }

Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap11/SOAP11HeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap11/SOAP11HeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap11/SOAP11HeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap11/SOAP11HeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -31,6 +31,7 @@ import org.apache.axiom.soap.SOAPFactory
 import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.SOAPVersion;
 import org.apache.axiom.soap.SOAP11Version;
+import org.apache.axiom.soap.impl.common.SOAPHelper;
 import org.apache.axiom.soap.impl.llom.SOAPHeaderBlockImpl;
 
 public class SOAP11HeaderBlockImpl extends SOAPHeaderBlockImpl {
@@ -82,51 +83,6 @@ public class SOAP11HeaderBlockImpl exten
                      SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
     }
 
-    public void setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
-        if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                         mustUnderstand,
-                         SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        } else {
-            throw new SOAPProcessingException(
-                    "mustUndertand should be one of \"true\", \"false\", \"0\" or \"1\" ");
-        }
-    }
-
-    public boolean getMustUnderstand() throws SOAPProcessingException {
-        // First, try getting the information from the property
-        // Fallback to getting the information from the attribute
-        String mustUnderstand;
-        if (this.hasOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY)) {
-            mustUnderstand = this.getOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY);
-        } else {
-            mustUnderstand =
-                getAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                             SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        }
-        
-        // Parse the value
-        if (mustUnderstand != null) {
-            if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-                return true;
-            } else if (SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand)) {
-                return false;
-            } else {
-                throw new SOAPProcessingException(
-                        "Invalid value found in mustUnderstand value of " +
-                                this.getLocalName() +
-                                " header block");
-            }
-        }
-        return false;
-
-    }
-
     public void setRelay(boolean relay) {
         throw new UnsupportedOperationException("Not supported for SOAP 1.1");
     }
@@ -138,4 +94,8 @@ public class SOAP11HeaderBlockImpl exten
     public SOAPVersion getVersion() {
         return SOAP11Version.getSingleton();
     }
+
+    protected SOAPHelper getSOAPHelper() {
+        return SOAPHelper.SOAP11;
+    }
 }

Modified: webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap12/SOAP12HeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap12/SOAP12HeaderBlockImpl.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap12/SOAP12HeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/modules/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/soap12/SOAP12HeaderBlockImpl.java Sat May 31 09:23:35 2014
@@ -80,51 +80,6 @@ public class SOAP12HeaderBlockImpl exten
 
     }
 
-    public void setMustUnderstand(String mustUnderstand)
-            throws SOAPProcessingException {
-        if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand) ||
-                SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-            setAttribute(SOAPConstants.ATTR_MUSTUNDERSTAND,
-                         mustUnderstand,
-                         SOAP_ENVELOPE_NAMESPACE_URI);
-        } else {
-            throw new SOAPProcessingException(
-                    "mustUndertand should be one of \"true\", " +
-                            "\"false\", \"0\" or \"1\" ");
-        }
-    }
-
-    public boolean getMustUnderstand() throws SOAPProcessingException {
-        // First, try getting the information from the property
-        // Fallback to getting the information from the attribute
-        String mustUnderstand;
-        if (this.hasOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY)) {
-            mustUnderstand = this.getOMDataSourceProperty(MUST_UNDERSTAND_PROPERTY);
-        } else {
-            mustUnderstand = getAttribute(ATTR_MUSTUNDERSTAND, SOAP_ENVELOPE_NAMESPACE_URI);
-        }
-       
-        // Now parse the value
-        if (mustUnderstand != null) {
-            if (SOAPConstants.ATTR_MUSTUNDERSTAND_TRUE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_1.equals(mustUnderstand)) {
-                return true;
-            } else if (SOAPConstants.ATTR_MUSTUNDERSTAND_FALSE.equals(mustUnderstand) ||
-                    SOAPConstants.ATTR_MUSTUNDERSTAND_0.equals(mustUnderstand)) {
-                return false;
-            } else {
-                throw new SOAPProcessingException(
-                        "Invalid value found in mustUnderstand value of " +
-                                this.getLocalName() +
-                                " header block");
-            }
-        }
-        return false;
-
-    }
-
     public void setRelay(boolean relay) {
         setAttribute(SOAP_RELAY, relay ? "true" : "false", SOAP_ENVELOPE_NAMESPACE_URI);
     }
@@ -158,4 +113,8 @@ public class SOAP12HeaderBlockImpl exten
     public SOAPVersion getVersion() {
         return SOAP12Version.getSingleton();
     }
+
+    protected SOAPHelper getSOAPHelper() {
+        return SOAPHelper.SOAP12;
+    }
 }

Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPSpec.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPSpec.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPSpec.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPSpec.java Sat May 31 09:23:35 2014
@@ -18,6 +18,11 @@
  */
 package org.apache.axiom.ts.soap;
 
+import java.util.ArrayList;
+import java.util.LinkedHashSet;
+import java.util.List;
+import java.util.Set;
+
 import javax.xml.namespace.QName;
 
 import org.apache.axiom.om.OMMetaFactory;
@@ -39,12 +44,12 @@ public abstract class SOAPSpec {
             return "soap11";
         }
         
-        public SOAPFactory getFactory(OMMetaFactory metaFactory) {
-            return metaFactory.getSOAP11Factory();
+        public SOAPSpec getAltSpec() {
+            return SOAPSpec.SOAP12;
         }
 
-        public SOAPFactory getAltFactory(OMMetaFactory metaFactory) {
-            return metaFactory.getSOAP12Factory();
+        public SOAPFactory getFactory(OMMetaFactory metaFactory) {
+            return metaFactory.getSOAP11Factory();
         }
 
         public String getEnvelopeNamespaceURI() {
@@ -62,12 +67,12 @@ public abstract class SOAPSpec {
             return "soap12";
         }
         
-        public SOAPFactory getFactory(OMMetaFactory metaFactory) {
-            return metaFactory.getSOAP12Factory();
+        public SOAPSpec getAltSpec() {
+            return SOAPSpec.SOAP11;
         }
 
-        public SOAPFactory getAltFactory(OMMetaFactory metaFactory) {
-            return metaFactory.getSOAP11Factory();
+        public SOAPFactory getFactory(OMMetaFactory metaFactory) {
+            return metaFactory.getSOAP12Factory();
         }
 
         public String getEnvelopeNamespaceURI() {
@@ -88,8 +93,21 @@ public abstract class SOAPSpec {
     }
     
     public abstract String getName();
+    
+    /**
+     * Get the {@link SOAPSpec} instance for the other SOAP version. This is useful when
+     * constructing test cases that test SOAP version mismatches.
+     * 
+     * @return the {@link SOAPSpec} instance for the other SOAP version
+     */
+    public abstract SOAPSpec getAltSpec();
+    
     public abstract SOAPFactory getFactory(OMMetaFactory metaFactory);
-    public abstract SOAPFactory getAltFactory(OMMetaFactory metaFactory);
+    
+    public final SOAPFactory getAltFactory(OMMetaFactory metaFactory) {
+        return getAltSpec().getFactory(metaFactory);
+    }
+    
     public abstract String getEnvelopeNamespaceURI();
     
     public final QName getFaultCodeQName() {
@@ -119,6 +137,39 @@ public abstract class SOAPSpec {
         return (BooleanLiteral[])booleanLiterals.clone();
     }
 
+    private static List getReps(BooleanLiteral[] literals) {
+        List result = new ArrayList(literals.length);
+        for (int i=0; i<literals.length; i++) {
+            result.add(literals[i].getLexicalRepresentation());
+        }
+        return result;
+    }
+    
+    /**
+     * Produce a representative list of strings that are not valid lexical representations of
+     * booleans as defined by this SOAP version. The list in particular contains:
+     * <ul>
+     * <li>Boolean literals allowed by the other SOAP version, but that are not valid in this SOAP
+     * version.
+     * <li>A variant of a valid boolean literal that uses a different case and that is not valid,
+     * unless no such variant exists.
+     * <li>The string <code>"invalid"</code>.
+     * </ul>
+     * 
+     * @return an array of invalid boolean literals
+     */
+    public final String[] getInvalidBooleanLiterals() {
+        Set result = new LinkedHashSet();
+        result.addAll(getReps(getAltSpec().booleanLiterals));
+        List valid = getReps(booleanLiterals);
+        result.removeAll(valid);
+        result.add("invalid");
+        if (valid.contains("true")) {
+            result.add("TRUE");
+        }
+        return (String[])result.toArray(new String[result.size()]);
+    }
+    
     /**
      * Get the canonical representation for the given boolean value as specified by this SOAP
      * version.

Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java Sat May 31 09:23:35 2014
@@ -96,6 +96,7 @@ public class SOAPTestSuiteBuilder extend
     private void addTests(SOAPSpec spec) {
         SerializationStrategy[] serializationStrategies = Strategies.getSerializationStrategies();
         BooleanLiteral[] booleanLiterals = spec.getBooleanLiterals();
+        String[] invalidBooleanLiterals = spec.getInvalidBooleanLiterals();
         addTest(new org.apache.axiom.ts.soap.body.TestAddFault1(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.body.TestAddFault2(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.body.TestCloneOMElement(metaFactory, spec));
@@ -224,8 +225,9 @@ public class SOAPTestSuiteBuilder extend
                     addTest(new org.apache.axiom.ts.soap.headerblock.TestGetBooleanAttribute(metaFactory, spec, attribute, booleanLiterals[j]));
                 }
                 addTest(new org.apache.axiom.ts.soap.headerblock.TestGetBooleanAttributeDefault(metaFactory, spec, attribute));
-                addTest(new org.apache.axiom.ts.soap.headerblock.TestGetBooleanAttributeInvalid(metaFactory, spec, attribute, "invalid"));
-                addTest(new org.apache.axiom.ts.soap.headerblock.TestGetBooleanAttributeInvalid(metaFactory, spec, attribute, "TRUE"));
+                for (int j=0; j<invalidBooleanLiterals.length; j++) {
+                    addTest(new org.apache.axiom.ts.soap.headerblock.TestGetBooleanAttributeInvalid(metaFactory, spec, attribute, invalidBooleanLiterals[j]));
+                }
                 addTest(new org.apache.axiom.ts.soap.headerblock.TestSetBooleanAttribute(metaFactory, spec, attribute, true));
                 addTest(new org.apache.axiom.ts.soap.headerblock.TestSetBooleanAttribute(metaFactory, spec, attribute, false));
             } else {
@@ -241,7 +243,9 @@ public class SOAPTestSuiteBuilder extend
         for (int i=0; i<booleanLiterals.length; i++) {
             addTest(new org.apache.axiom.ts.soap.headerblock.TestSetMustUnderstandString(metaFactory, spec, booleanLiterals[i]));
         }
-        addTest(new org.apache.axiom.ts.soap.headerblock.TestSetMustUnderstandWithInvalidValue(metaFactory, spec));
+        for (int i=0; i<invalidBooleanLiterals.length; i++) {
+            addTest(new org.apache.axiom.ts.soap.headerblock.TestSetMustUnderstandWithInvalidValue(metaFactory, spec, invalidBooleanLiterals[i]));
+        }
         addTest(new org.apache.axiom.ts.soap.headerblock.TestSetRole(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.headerblock.TestWrongParent1(metaFactory, spec));
         addTest(new org.apache.axiom.ts.soap.headerblock.TestWrongParent2(metaFactory, spec));
@@ -301,7 +305,6 @@ public class SOAPTestSuiteBuilder extend
         addTest(new org.apache.axiom.ts.soap11.header.TestGetHeadersToProcessWithParser(metaFactory));
         addTest(new org.apache.axiom.ts.soap11.headerblock.TestGetMustUnderstandWithParser(metaFactory));
         addTest(new org.apache.axiom.ts.soap11.headerblock.TestGetRoleWithParser(metaFactory));
-        addTest(new org.apache.axiom.ts.soap11.headerblock.TestSetMustUnderstandStringTrueFalse(metaFactory));
         if (supportsOMSourcedElement) {
             addTest(new org.apache.axiom.ts.soap11.misc.TestElementPullStreamAndOMExpansion(metaFactory));
             addTest(new org.apache.axiom.ts.soap11.misc.TestElementPullStreamAndOMExpansion2(metaFactory));

Modified: webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestSetMustUnderstandWithInvalidValue.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestSetMustUnderstandWithInvalidValue.java?rev=1598845&r1=1598844&r2=1598845&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestSetMustUnderstandWithInvalidValue.java (original)
+++ webservices/axiom/trunk/modules/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestSetMustUnderstandWithInvalidValue.java Sat May 31 09:23:35 2014
@@ -29,14 +29,18 @@ import org.apache.axiom.ts.soap.SOAPTest
  * {@link SOAPProcessingException} if the argument is not a valid boolean literal.
  */
 public class TestSetMustUnderstandWithInvalidValue extends SOAPTestCase {
-    public TestSetMustUnderstandWithInvalidValue(OMMetaFactory metaFactory, SOAPSpec spec) {
+    private final String value;
+    
+    public TestSetMustUnderstandWithInvalidValue(OMMetaFactory metaFactory, SOAPSpec spec, String value) {
         super(metaFactory, spec);
+        this.value = value;
+        addTestParameter("value", value);
     }
 
     protected void runTest() throws Throwable {
         SOAPHeaderBlock soapHeaderBlock = createSOAPHeaderBlock();
         try {
-            soapHeaderBlock.setMustUnderstand("otherValue");
+            soapHeaderBlock.setMustUnderstand(value);
             fail("Expected SOAPProcessingException");
         } catch (SOAPProcessingException ex) {
             // Expected