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();) {