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 2016/03/20 11:31:55 UTC

svn commit: r1735857 - in /webservices/axiom/trunk: aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/ aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/ axiom-api/src/main/java/org/apache/axiom/soap/ implementations/ax...

Author: veithen
Date: Sun Mar 20 10:31:55 2016
New Revision: 1735857

URL: http://svn.apache.org/viewvc?rev=1735857&view=rev
Log:
AXIOM-362: Support on the fly conversion to SOAPHeaderBlock in examineHeaderBlocks and examineMustUnderstandHeaderBlocks.

Added:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java   (with props)
Modified:
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/MURoleChecker.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/RoleChecker.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderSupport.aj
    webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/soap/SOAPHeader.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderImpl.java
    webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/MURoleChecker.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/MURoleChecker.java?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/MURoleChecker.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/MURoleChecker.java Sun Mar 20 10:31:55 2016
@@ -18,17 +18,23 @@
  */
 package org.apache.axiom.soap.impl.common;
 
-import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.core.ElementMatcher;
+import org.apache.axiom.om.impl.intf.AxiomElement;
+import org.apache.axiom.soap.impl.intf.SOAPHelper;
 
 /** A Checker to see that we both match a given role AND are mustUnderstand=true */
-public class MURoleChecker extends RoleChecker {
-    public MURoleChecker(String role) {
-        super(role);
+public class MURoleChecker implements ElementMatcher<AxiomElement> {
+    private final SOAPHelper soapHelper;
+    private final String role;
+
+    public MURoleChecker(SOAPHelper soapHelper, String role) {
+        this.soapHelper = soapHelper;
+        this.role = role;
     }
 
-    public boolean checkHeader(SOAPHeaderBlock header) {
-        if (header.getMustUnderstand())
-            return super.checkHeader(header);
-        return false;
+    @Override
+    public boolean matches(AxiomElement element, String namespaceURI, String name) {
+        return SOAPHeaderBlockHelper.getMustUnderstand(element, soapHelper)
+                && (role == null || role.equals(SOAPHeaderBlockHelper.getRole(element, soapHelper)));
     }
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/RoleChecker.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/RoleChecker.java?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/RoleChecker.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/RoleChecker.java Sun Mar 20 10:31:55 2016
@@ -18,24 +18,25 @@
  */
 package org.apache.axiom.soap.impl.common;
 
-import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.core.ElementMatcher;
+import org.apache.axiom.om.impl.intf.AxiomElement;
+import org.apache.axiom.soap.impl.intf.SOAPHelper;
 
 /**
  * A Checker to make sure headers match a given role.  If the role we're looking for is null, then
  * everything matches.
  */
-public class RoleChecker implements Checker {
-    String role;
+public class RoleChecker implements ElementMatcher<AxiomElement> {
+    private final SOAPHelper soapHelper;
+    private final String role;
 
-    public RoleChecker(String role) {
+    public RoleChecker(SOAPHelper soapHelper, String role) {
+        this.soapHelper = soapHelper;
         this.role = role;
     }
 
-    public boolean checkHeader(SOAPHeaderBlock header) {
-        if (role == null) {
-            return true;
-        }
-        String thisRole = header.getRole();
-        return (role.equals(thisRole));
+    @Override
+    public boolean matches(AxiomElement element, String namespaceURI, String name) {
+        return role == null || role.equals(SOAPHeaderBlockHelper.getRole(element, soapHelper));
     }
 }

Added: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java?rev=1735857&view=auto
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java (added)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java Sun Mar 20 10:31:55 2016
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements. See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership. The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied. See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.axiom.soap.impl.common;
+
+import javax.xml.namespace.QName;
+
+import org.apache.axiom.om.OMDataSource;
+import org.apache.axiom.om.OMDataSourceExt;
+import org.apache.axiom.om.OMSourcedElement;
+import org.apache.axiom.om.impl.intf.AxiomElement;
+import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.soap.SOAPProcessingException;
+import org.apache.axiom.soap.impl.intf.SOAPHelper;
+
+public final class SOAPHeaderBlockHelper {
+    private SOAPHeaderBlockHelper() {}
+
+    public static String getAttributeValue(AxiomElement block, String key, QName qname) {
+        // First, try getting the information from the property.
+        // Fallback to getting the information from the attribute.
+        if (block instanceof OMSourcedElement && !block.isExpanded()) {
+            OMDataSource ds = ((OMSourcedElement)block).getDataSource();
+            if (ds instanceof OMDataSourceExt) {
+                OMDataSourceExt dsExt = (OMDataSourceExt)ds;
+                if (dsExt.hasProperty(key)) {
+                    return (String)dsExt.getProperty(key);
+                }
+            }
+        }
+        return block.getAttributeValue(qname);
+    }
+    
+    public static boolean getBooleanAttributeValue(AxiomElement block, SOAPHelper soapHelper, String key, QName qname) {
+        String literal = getAttributeValue(block, key, qname);
+        if (literal != null) {
+            Boolean value = soapHelper.parseBoolean(literal);
+            if (value != null) {
+                return value.booleanValue();
+            } else {
+                throw new SOAPProcessingException(
+                        "Invalid value for attribute " + qname.getLocalPart() + " in header block " + block.getQName());
+            }
+        } else {
+            return false;
+        }
+    }
+    
+    public static String getRole(AxiomElement block, SOAPHelper soapHelper) {
+        return getAttributeValue(block, SOAPHeaderBlock.ROLE_PROPERTY, soapHelper.getRoleAttributeQName());
+    }
+
+    public static boolean getMustUnderstand(AxiomElement block, SOAPHelper soapHelper) {
+        return getBooleanAttributeValue(block, soapHelper, SOAPHeaderBlock.MUST_UNDERSTAND_PROPERTY, soapHelper.getMustUnderstandAttributeQName());
+    }
+}

Propchange: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/SOAPHeaderBlockHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockSupport.aj?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockSupport.aj Sun Mar 20 10:31:55 2016
@@ -22,13 +22,12 @@ import javax.xml.namespace.QName;
 
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.core.CoreNode;
-import org.apache.axiom.om.OMDataSource;
-import org.apache.axiom.om.OMDataSourceExt;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.soap.SOAPCloneOptions;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.SOAPVersion;
+import org.apache.axiom.soap.impl.common.SOAPHeaderBlockHelper;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPHeaderBlock;
 import org.apache.axiom.soap.impl.intf.SOAPHelper;
 
@@ -51,38 +50,8 @@ public aspect AxiomSOAPHeaderBlockSuppor
         processed = true;
     }
 
-    private String AxiomSOAPHeaderBlock.getAttributeValue(String key, QName qname) {
-        // First, try getting the information from the property.
-        // Fallback to getting the information from the attribute.
-        if (!isExpanded()) {
-            OMDataSource ds = getDataSource();
-            if (ds instanceof OMDataSourceExt) {
-                OMDataSourceExt dsExt = (OMDataSourceExt)ds;
-                if (dsExt.hasProperty(key)) {
-                    return (String)dsExt.getProperty(key);
-                }
-            }
-        }
-        return getAttributeValue(qname);
-    }
-    
-    private boolean AxiomSOAPHeaderBlock.getBooleanAttributeValue(String key, QName qname) {
-        String literal = getAttributeValue(key, qname);
-        if (literal != null) {
-            Boolean value = getSOAPHelper().parseBoolean(literal);
-            if (value != null) {
-                return value.booleanValue();
-            } else {
-                throw new SOAPProcessingException(
-                        "Invalid value for attribute " + qname.getLocalPart() + " in header block " + getQName());
-            }
-        } else {
-            return false;
-        }
-    }
-    
     public final boolean AxiomSOAPHeaderBlock.getMustUnderstand() throws SOAPProcessingException {
-        return getBooleanAttributeValue(MUST_UNDERSTAND_PROPERTY, getSOAPHelper().getMustUnderstandAttributeQName());
+        return SOAPHeaderBlockHelper.getMustUnderstand(this, getSOAPHelper());
     }
     
     public final void AxiomSOAPHeaderBlock.setMustUnderstand(String mustUnderstand) throws SOAPProcessingException {
@@ -101,7 +70,7 @@ public aspect AxiomSOAPHeaderBlockSuppor
     }
 
     public final String AxiomSOAPHeaderBlock.getRole() {
-        return getAttributeValue(ROLE_PROPERTY, getSOAPHelper().getRoleAttributeQName());
+        return SOAPHeaderBlockHelper.getRole(this, getSOAPHelper());
     }
     
     public final void AxiomSOAPHeaderBlock.setRole(String role) {
@@ -114,7 +83,7 @@ public aspect AxiomSOAPHeaderBlockSuppor
         if (attributeQName == null) {
             throw new UnsupportedOperationException("Not supported for " + helper.getSpecName());
         } else {
-            return getBooleanAttributeValue(RELAY_PROPERTY, attributeQName);
+            return SOAPHeaderBlockHelper.getBooleanAttributeValue(this, helper, RELAY_PROPERTY, attributeQName);
         }
     }
     

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderSupport.aj?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderSupport.aj Sun Mar 20 10:31:55 2016
@@ -26,6 +26,8 @@ import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.impl.common.AxiomSemantics;
 import org.apache.axiom.om.impl.intf.AxiomElement;
 import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.soap.impl.common.MURoleChecker;
+import org.apache.axiom.soap.impl.common.RoleChecker;
 import org.apache.axiom.soap.impl.common.SOAPHeaderBlockMapper;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPHeader;
 
@@ -38,4 +40,14 @@ public aspect AxiomSOAPHeaderSupport {
         return coreGetElements(Axis.CHILDREN, AxiomElement.class, ElementMatcher.ANY, null, null,
                 SOAPHeaderBlockMapper.INSTANCE, AxiomSemantics.INSTANCE);
     }
+
+    public final Iterator<SOAPHeaderBlock> AxiomSOAPHeader.examineHeaderBlocks(String role) {
+        return coreGetElements(Axis.CHILDREN, AxiomElement.class, new RoleChecker(getSOAPHelper(), role), null, null,
+                SOAPHeaderBlockMapper.INSTANCE, AxiomSemantics.INSTANCE);
+    }
+
+    public final Iterator<SOAPHeaderBlock> AxiomSOAPHeader.examineMustUnderstandHeaderBlocks(String role) {
+        return coreGetElements(Axis.CHILDREN, AxiomElement.class, new MURoleChecker(getSOAPHelper(), role), null, null,
+                SOAPHeaderBlockMapper.INSTANCE, AxiomSemantics.INSTANCE);
+    }
 }

Modified: webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/soap/SOAPHeader.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/soap/SOAPHeader.java?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/soap/SOAPHeader.java (original)
+++ webservices/axiom/trunk/axiom-api/src/main/java/org/apache/axiom/soap/SOAPHeader.java Sun Mar 20 10:31:55 2016
@@ -89,7 +89,7 @@ public interface SOAPHeader extends OMEl
      *         role
      * @see #extractHeaderBlocks(String)
      */
-    Iterator examineHeaderBlocks(String role);
+    Iterator<SOAPHeaderBlock> examineHeaderBlocks(String role);
 
     /**
      * Returns a list of all the {@link SOAPHeaderBlock} objects in this {@link SOAPHeader} object
@@ -116,7 +116,7 @@ public interface SOAPHeader extends OMEl
      * @return an iterator over all the {@link SOAPHeaderBlock} objects that contain the specified
      *         role and are marked as MustUnderstand.
      */
-    Iterator examineMustUnderstandHeaderBlocks(String role);
+    Iterator<SOAPHeaderBlock> examineMustUnderstandHeaderBlocks(String role);
 
     /**
      * Returns an iterator over all the {@link SOAPHeaderBlock} objects in this {@link SOAPHeader}

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderImpl.java?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPHeaderImpl.java Sun Mar 20 10:31:55 2016
@@ -34,8 +34,6 @@ import org.apache.axiom.soap.SOAPFactory
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPProcessingException;
 import org.apache.axiom.soap.impl.common.HeaderIterator;
-import org.apache.axiom.soap.impl.common.MURoleChecker;
-import org.apache.axiom.soap.impl.common.RoleChecker;
 import org.apache.axiom.soap.impl.common.RolePlayerChecker;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPHeader;
 
@@ -74,16 +72,8 @@ public abstract class SOAPHeaderImpl ext
         return new HeaderIterator(this, new RolePlayerChecker(rolePlayer, namespace));
     }
 
-    public Iterator examineHeaderBlocks(String role) {
-        return new HeaderIterator(this, new RoleChecker(role));
-    }
-
     public abstract Iterator extractHeaderBlocks(String role);
 
-    public Iterator examineMustUnderstandHeaderBlocks(String actor) {
-        return new HeaderIterator(this, new MURoleChecker(actor));
-    }
-
     public Iterator extractAllHeaderBlocks() {
         List result = new ArrayList();
         for (Iterator iter = getChildElements(); iter.hasNext();) {

Modified: webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java?rev=1735857&r1=1735856&r2=1735857&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderImpl.java Sun Mar 20 10:31:55 2016
@@ -33,10 +33,7 @@ import org.apache.axiom.soap.RolePlayer;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.SOAPProcessingException;
-import org.apache.axiom.soap.impl.common.Checker;
 import org.apache.axiom.soap.impl.common.HeaderIterator;
-import org.apache.axiom.soap.impl.common.MURoleChecker;
-import org.apache.axiom.soap.impl.common.RoleChecker;
 import org.apache.axiom.soap.impl.common.RolePlayerChecker;
 import org.apache.axiom.soap.impl.intf.AxiomSOAPHeader;
 import org.apache.commons.logging.Log;
@@ -80,16 +77,8 @@ public abstract class SOAPHeaderImpl ext
         return new HeaderIterator(this, new RolePlayerChecker(rolePlayer, namespace));
     }
 
-    public Iterator examineHeaderBlocks(String role) {
-        return new HeaderIterator(this, new RoleChecker(role));
-    }
-
     public abstract Iterator extractHeaderBlocks(String role);
 
-    public Iterator examineMustUnderstandHeaderBlocks(String actor) {
-        return new HeaderIterator(this, new MURoleChecker(actor));
-    }
-
     public Iterator extractAllHeaderBlocks() {
         List result = new ArrayList();
         for (Iterator iter = getChildElements(); iter.hasNext();) {