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 2022/03/12 21:51:57 UTC
[ws-axiom] branch master updated: Disallow defining abstract methods in mixins
This is an automated email from the ASF dual-hosted git repository.
veithen pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/ws-axiom.git
The following commit(s) were added to refs/heads/master by this push:
new bf87e12 Disallow defining abstract methods in mixins
bf87e12 is described below
commit bf87e1215ffa2d825d51baad79789309b5d0559b
Author: Andreas Veithen <an...@gmail.com>
AuthorDate: Sat Mar 12 21:51:44 2022 +0000
Disallow defining abstract methods in mixins
---
.../weaver/mixin/clazz/MixinClassVisitor.java | 11 +++++++
.../org/apache/axiom/weaver/noabstract/Iface.java | 9 ++---
.../apache/axiom/weaver/noabstract/IfaceMixin.java | 10 +++---
.../weaver/noabstract/NoAbstractMethodTest.java | 38 +++++++++-------------
.../axiom/weaver/noabstract/package-info.java | 13 +++-----
.../java/org/apache/axiom/core/CoreElement.java | 4 +++
.../axiom/core/impl/mixin/CoreElementMixin.java | 4 ---
.../core/impl/mixin/CoreNSAwareElementMixin.java | 2 ++
.../core/impl/mixin/CoreNSUnawareElementMixin.java | 2 ++
.../java/org/apache/axiom/dom/DOMParentNode.java | 2 +-
.../axiom/dom/impl/mixin/DOMAttributeMixin.java | 1 +
.../dom/impl/mixin/DOMDocumentFragmentMixin.java | 1 +
.../axiom/dom/impl/mixin/DOMDocumentMixin.java | 1 +
.../dom/impl/mixin/DOMNSAwareElementMixin.java | 1 +
.../dom/impl/mixin/DOMNSUnawareElementMixin.java | 1 +
.../axiom/dom/impl/mixin/DOMParentNodeMixin.java | 2 --
.../om/impl/intf/AxiomNamedInformationItem.java | 2 ++
.../axiom/om/impl/mixin/AxiomAttributeMixin.java | 3 +-
.../axiom/om/impl/mixin/AxiomElementMixin.java | 3 +-
.../impl/mixin/AxiomNamedInformationItemMixin.java | 2 --
.../axiom/soap/impl/intf/AxiomSOAPElement.java | 3 ++
.../soap/impl/mixin/AxiomSOAP11EnvelopeMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAP11FaultCodeMixin.java | 1 +
.../impl/mixin/AxiomSOAP11FaultReasonMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAP12EnvelopeMixin.java | 1 +
.../mixin/AxiomSOAP12FaultClassifierMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java | 1 +
.../impl/mixin/AxiomSOAP12FaultReasonMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAP12FaultTextMixin.java | 1 +
.../impl/mixin/AxiomSOAP12FaultValueMixin.java | 1 +
.../axiom/soap/impl/mixin/AxiomSOAPBodyMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAPElementMixin.java | 2 --
.../soap/impl/mixin/AxiomSOAPFaultDetailMixin.java | 1 +
.../axiom/soap/impl/mixin/AxiomSOAPFaultMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAPFaultRoleMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAPHeaderBlockMixin.java | 1 +
.../soap/impl/mixin/AxiomSOAPHeaderMixin.java | 1 +
37 files changed, 76 insertions(+), 56 deletions(-)
diff --git a/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/clazz/MixinClassVisitor.java b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/clazz/MixinClassVisitor.java
index 419741f..47555ab 100644
--- a/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/clazz/MixinClassVisitor.java
+++ b/axiom-weaver/src/main/java/org/apache/axiom/weaver/mixin/clazz/MixinClassVisitor.java
@@ -121,6 +121,17 @@ final class MixinClassVisitor extends ClassVisitor {
MethodNode method =
new MethodNode(Opcodes.ASM9, access, name, descriptor, signature, exceptions);
Function<String, Remapper> remapperFactory = this.remapperFactory;
+ if ((access & Opcodes.ACC_ABSTRACT) != 0) {
+ // An abstract method defined by a mixin could only be implemented by another mixin.
+ // There are two problems with that:
+ // - Development tools would not be able to determine that a method in one mixin
+ // overrides a method in another mixin.
+ // - If the method is not public, then the classes the two mixins are applied to must
+ // be in the same package, but that's not necessarily the case.
+ // Instead of declaring an abstract method in a mixin, that method should be declared
+ // by an interface.
+ throw new MixinFactoryException("Found an abstract method in mixin " + className);
+ }
MethodBody body =
new MethodBody() {
@Override
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/Iface.java
similarity index 81%
copy from mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
copy to axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/Iface.java
index 52a0150..436cb7e 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
+++ b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/Iface.java
@@ -16,11 +16,6 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.dom;
+package org.apache.axiom.weaver.noabstract;
-import org.apache.axiom.core.CoreParentNode;
-import org.w3c.dom.NodeList;
-
-public interface DOMParentNode extends DOMNode, NodeList, CoreParentNode {
-
-}
+public interface Iface {}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/IfaceMixin.java
similarity index 81%
copy from mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
copy to axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/IfaceMixin.java
index 52a0150..4ac95e4 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
+++ b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/IfaceMixin.java
@@ -16,11 +16,11 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.dom;
+package org.apache.axiom.weaver.noabstract;
-import org.apache.axiom.core.CoreParentNode;
-import org.w3c.dom.NodeList;
-
-public interface DOMParentNode extends DOMNode, NodeList, CoreParentNode {
+import org.apache.axiom.weaver.annotation.Mixin;
+@Mixin
+public abstract class IfaceMixin implements Iface {
+ abstract void abstractMethod();
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/NoAbstractMethodTest.java
similarity index 52%
copy from mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java
copy to axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/NoAbstractMethodTest.java
index bd5ecd4..5bb1c48 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java
+++ b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/NoAbstractMethodTest.java
@@ -16,31 +16,23 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.soap.impl.mixin;
+package org.apache.axiom.weaver.noabstract;
-import org.apache.axiom.core.CoreNode;
-import org.apache.axiom.om.OMElement;
-import org.apache.axiom.soap.impl.intf.soap12.AxiomSOAP12FaultNode;
-import org.apache.axiom.weaver.annotation.Mixin;
+import static org.junit.Assert.assertThrows;
-@Mixin
-public abstract class AxiomSOAP12FaultNodeMixin implements AxiomSOAP12FaultNode {
- @Override
- public final Class<? extends CoreNode> coreGetNodeClass() {
- return AxiomSOAP12FaultNode.class;
- }
-
- public final boolean isChildElementAllowed(OMElement child) {
- return false;
- }
-
- @Override
- public final void setFaultNodeValue(String uri) {
- setText(uri);
- }
+import org.apache.axiom.weaver.SimpleImplementationClassNameMapper;
+import org.apache.axiom.weaver.Weaver;
+import org.apache.axiom.weaver.innerclass.InnerClassTest;
+import org.apache.axiom.weaver.mixin.clazz.MixinFactoryException;
+import org.junit.Test;
- @Override
- public final String getFaultNodeValue() {
- return getText();
+public class NoAbstractMethodTest {
+ @Test
+ public void testMixinWithAbstractMethod() {
+ ClassLoader cl = InnerClassTest.class.getClassLoader();
+ Weaver weaver = new Weaver(cl, new SimpleImplementationClassNameMapper("impl"));
+ assertThrows(
+ MixinFactoryException.class,
+ () -> weaver.loadWeavablePackage("org.apache.axiom.weaver.noabstract"));
}
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/package-info.java
similarity index 81%
copy from mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
copy to axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/package-info.java
index 52a0150..9d8316b 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
+++ b/axiom-weaver/src/test/java/org/apache/axiom/weaver/noabstract/package-info.java
@@ -16,11 +16,8 @@
* specific language governing permissions and limitations
* under the License.
*/
-package org.apache.axiom.dom;
-
-import org.apache.axiom.core.CoreParentNode;
-import org.w3c.dom.NodeList;
-
-public interface DOMParentNode extends DOMNode, NodeList, CoreParentNode {
-
-}
+@org.apache.axiom.weaver.annotation.WeavablePackage(
+ mixins = {
+ IfaceMixin.class,
+ })
+package org.apache.axiom.weaver.noabstract;
diff --git a/mixins/core-mixins/src/main/java/org/apache/axiom/core/CoreElement.java b/mixins/core-mixins/src/main/java/org/apache/axiom/core/CoreElement.java
index 620b3c7..89313f2 100644
--- a/mixins/core-mixins/src/main/java/org/apache/axiom/core/CoreElement.java
+++ b/mixins/core-mixins/src/main/java/org/apache/axiom/core/CoreElement.java
@@ -142,4 +142,8 @@ public interface CoreElement extends CoreChildNode, CoreMixedContentContainer, C
void corePromote(CoreElement newElement, Semantics semantics) throws CoreModelException;
void internalSetFirstAttribute(CoreAttribute firstAttribute);
+
+ String getImplicitNamespaceURI(String prefix);
+
+ String getImplicitPrefix(String namespaceURI);
}
diff --git a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreElementMixin.java b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreElementMixin.java
index 3814f0f..1821441 100644
--- a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreElementMixin.java
+++ b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreElementMixin.java
@@ -158,8 +158,6 @@ public abstract class CoreElementMixin implements CoreElement {
return AttributeIterator.create(this, type, mapper, semantics);
}
- public abstract String getImplicitNamespaceURI(String prefix);
-
@Override
public final String coreLookupNamespaceURI(String prefix, Semantics semantics)
throws CoreModelException {
@@ -189,8 +187,6 @@ public abstract class CoreElementMixin implements CoreElement {
}
}
- public abstract String getImplicitPrefix(String namespaceURI);
-
@Override
public final String coreLookupPrefix(String namespaceURI, Semantics semantics)
throws CoreModelException {
diff --git a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementMixin.java b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementMixin.java
index bf99399..adabde3 100644
--- a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementMixin.java
+++ b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSAwareElementMixin.java
@@ -33,10 +33,12 @@ public abstract class CoreNSAwareElementMixin implements CoreNSAwareElement {
return NodeType.NS_AWARE_ELEMENT;
}
+ @Override
public final String getImplicitNamespaceURI(String prefix) {
return prefix.equals(coreGetPrefix()) ? coreGetNamespaceURI() : null;
}
+ @Override
public final String getImplicitPrefix(String namespaceURI) {
return namespaceURI.equals(coreGetNamespaceURI()) ? coreGetPrefix() : null;
}
diff --git a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSUnawareElementMixin.java b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSUnawareElementMixin.java
index 144aa59..58d363a 100644
--- a/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSUnawareElementMixin.java
+++ b/mixins/core-mixins/src/main/java/org/apache/axiom/core/impl/mixin/CoreNSUnawareElementMixin.java
@@ -33,10 +33,12 @@ public abstract class CoreNSUnawareElementMixin implements CoreNSUnawareElement
return NodeType.NS_UNAWARE_ELEMENT;
}
+ @Override
public final String getImplicitNamespaceURI(String prefix) {
return null;
}
+ @Override
public final String getImplicitPrefix(String namespaceURI) {
return null;
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
index 52a0150..905d409 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/DOMParentNode.java
@@ -22,5 +22,5 @@ import org.apache.axiom.core.CoreParentNode;
import org.w3c.dom.NodeList;
public interface DOMParentNode extends DOMNode, NodeList, CoreParentNode {
-
+ void normalize(DOMConfigurationImpl config);
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMAttributeMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMAttributeMixin.java
index 7979a1e..b595ead 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMAttributeMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMAttributeMixin.java
@@ -118,6 +118,7 @@ public abstract class DOMAttributeMixin implements DOMAttribute {
throw new UnsupportedOperationException();
}
+ @Override
public final void normalize(DOMConfigurationImpl config) {
}
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentFragmentMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentFragmentMixin.java
index 1389080..278080a 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentFragmentMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentFragmentMixin.java
@@ -112,6 +112,7 @@ public abstract class DOMDocumentFragmentMixin implements DOMDocumentFragment {
}
}
+ @Override
public final void normalize(DOMConfigurationImpl config) {
}
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentMixin.java
index 7e92d2f..b4f4d09 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMDocumentMixin.java
@@ -473,6 +473,7 @@ public abstract class DOMDocumentMixin implements DOMDocument {
this.strictErrorChecking = strictErrorChecking;
}
+ @Override
public final void normalize(DOMConfigurationImpl config) {
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
index 2f06f53..8f68afb 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSAwareElementMixin.java
@@ -25,6 +25,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class DOMNSAwareElementMixin implements DOMNSAwareElement {
+ @Override
public final void normalize(DOMConfigurationImpl config) {
// TODO: this should not rely on the Axiom API
if (config.isEnabled(DOMConfigurationImpl.NAMESPACES)) {
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSUnawareElementMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSUnawareElementMixin.java
index a78401a..f6c85ca 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSUnawareElementMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMNSUnawareElementMixin.java
@@ -24,6 +24,7 @@ import org.apache.axiom.weaver.annotation.Mixin;;
@Mixin
public abstract class DOMNSUnawareElementMixin implements DOMNSUnawareElement {
+ @Override
public final void normalize(DOMConfigurationImpl config) {
}
}
diff --git a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMParentNodeMixin.java b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMParentNodeMixin.java
index 8503d9b..998b665 100644
--- a/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMParentNodeMixin.java
+++ b/mixins/dom-mixins/src/main/java/org/apache/axiom/dom/impl/mixin/DOMParentNodeMixin.java
@@ -114,8 +114,6 @@ public abstract class DOMParentNodeMixin implements DOMParentNode {
}
}
- public abstract void normalize(DOMConfigurationImpl config);
-
private void checkNewChild(Node newChild) {
if (newChild instanceof DOMNode) {
DOMNode newDomChild = (DOMNode)newChild;
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomNamedInformationItem.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomNamedInformationItem.java
index 5c7121f..2d54815 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomNamedInformationItem.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/intf/AxiomNamedInformationItem.java
@@ -35,4 +35,6 @@ public interface AxiomNamedInformationItem
OMNamespace defaultGetNamespace();
QName defaultGetQName();
+
+ void beforeSetLocalName();
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomAttributeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomAttributeMixin.java
index abd6648..c74bfdf 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomAttributeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomAttributeMixin.java
@@ -35,7 +35,8 @@ public abstract class AxiomAttributeMixin implements AxiomAttribute {
return (OMElement) coreGetOwnerElement();
}
- final void beforeSetLocalName() {}
+ @Override
+ public void beforeSetLocalName() {}
@Override
public final void setNamespace(OMNamespace namespace, boolean decl) {
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementMixin.java
index 1d5e80e..42bb60b 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomElementMixin.java
@@ -82,7 +82,8 @@ public abstract class AxiomElementMixin implements AxiomElement {
internalSetNamespace(generateNSDecl ? NSUtil.handleNamespace(this, ns, false, true) : ns);
}
- final void beforeSetLocalName() {
+ @Override
+ public final void beforeSetLocalName() {
forceExpand();
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
index bf8b78d..0a97b95 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/om/impl/mixin/AxiomNamedInformationItemMixin.java
@@ -106,8 +106,6 @@ public abstract class AxiomNamedInformationItemMixin implements AxiomNamedInform
return namespace;
}
- abstract void beforeSetLocalName();
-
@Override
public final void setLocalName(String localName) {
beforeSetLocalName();
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/intf/AxiomSOAPElement.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/intf/AxiomSOAPElement.java
index aa141ac..140efa1 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/intf/AxiomSOAPElement.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/intf/AxiomSOAPElement.java
@@ -18,8 +18,11 @@
*/
package org.apache.axiom.soap.impl.intf;
+import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.impl.intf.AxiomElement;
public interface AxiomSOAPElement extends AxiomElement {
SOAPHelper getSOAPHelper();
+
+ boolean isChildElementAllowed(OMElement child);
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11EnvelopeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11EnvelopeMixin.java
index db50ace..0666fb4 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11EnvelopeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11EnvelopeMixin.java
@@ -33,6 +33,7 @@ public abstract class AxiomSOAP11EnvelopeMixin implements AxiomSOAP11Envelope {
return AxiomSOAP11Envelope.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return !(child instanceof AxiomSOAPElement)
|| child instanceof SOAPHeader
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultCodeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultCodeMixin.java
index 8193d3c..5190aea 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultCodeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultCodeMixin.java
@@ -29,6 +29,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAP11FaultCodeMixin implements AxiomSOAP11FaultCode {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultReasonMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultReasonMixin.java
index cbb10c7..a9e9d69 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultReasonMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP11FaultReasonMixin.java
@@ -35,6 +35,7 @@ public abstract class AxiomSOAP11FaultReasonMixin implements AxiomSOAP11FaultRea
return AxiomSOAP11FaultReason.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12EnvelopeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12EnvelopeMixin.java
index 51e46ff..6a1f521 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12EnvelopeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12EnvelopeMixin.java
@@ -32,6 +32,7 @@ public abstract class AxiomSOAP12EnvelopeMixin implements AxiomSOAP12Envelope {
return AxiomSOAP12Envelope.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return child instanceof SOAPHeader || child instanceof SOAPBody;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultClassifierMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultClassifierMixin.java
index 90b5f9b..daf262b 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultClassifierMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultClassifierMixin.java
@@ -34,6 +34,7 @@ public abstract class AxiomSOAP12FaultClassifierMixin implements AxiomSOAP12Faul
private static final Sequence sequence =
new Sequence(SOAPFaultValue.class, SOAPFaultSubCode.class);
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return child instanceof SOAPFaultValue || child instanceof SOAPFaultSubCode;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java
index bd5ecd4..4c3bd5f 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultNodeMixin.java
@@ -30,6 +30,7 @@ public abstract class AxiomSOAP12FaultNodeMixin implements AxiomSOAP12FaultNode
return AxiomSOAP12FaultNode.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultReasonMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultReasonMixin.java
index be4c143..3cad761 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultReasonMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultReasonMixin.java
@@ -37,6 +37,7 @@ public abstract class AxiomSOAP12FaultReasonMixin implements AxiomSOAP12FaultRea
return AxiomSOAP12FaultReason.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return child instanceof SOAPFaultText;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultTextMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultTextMixin.java
index e874015..07efb6a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultTextMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultTextMixin.java
@@ -45,6 +45,7 @@ public abstract class AxiomSOAP12FaultTextMixin implements AxiomSOAP12FaultText
return AxiomSOAP12FaultText.class;
}
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultValueMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultValueMixin.java
index 898a505..261b2da 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultValueMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAP12FaultValueMixin.java
@@ -25,6 +25,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAP12FaultValueMixin implements AxiomSOAP12FaultValue {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPBodyMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPBodyMixin.java
index 953aeac..908f67a 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPBodyMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPBodyMixin.java
@@ -29,6 +29,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAPBodyMixin implements AxiomSOAPBody {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return !(child instanceof AxiomSOAPElement) || child instanceof SOAPFault;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPElementMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPElementMixin.java
index 8547a58..7a040e3 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPElementMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPElementMixin.java
@@ -54,6 +54,4 @@ public abstract class AxiomSOAPElementMixin implements AxiomSOAPElement {
}
}
}
-
- public abstract boolean isChildElementAllowed(OMElement child);
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultDetailMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultDetailMixin.java
index 823220e..6285aa3 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultDetailMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultDetailMixin.java
@@ -27,6 +27,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAPFaultDetailMixin implements AxiomSOAPFaultDetail {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return !(child instanceof AxiomSOAPElement);
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultMixin.java
index ef951db..9562110 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultMixin.java
@@ -37,6 +37,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAPFaultMixin implements AxiomSOAPFault {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return child instanceof SOAPFaultCode
|| child instanceof SOAPFaultDetail
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultRoleMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultRoleMixin.java
index b32bcf7..7c34649 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultRoleMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPFaultRoleMixin.java
@@ -24,6 +24,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAPFaultRoleMixin implements AxiomSOAPFaultRole {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return false;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockMixin.java
index 6b84035..7fd6f45 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderBlockMixin.java
@@ -36,6 +36,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
public abstract class AxiomSOAPHeaderBlockMixin implements AxiomSOAPHeaderBlock {
private boolean processed;
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return true;
}
diff --git a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderMixin.java b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderMixin.java
index 7e35348..4109680 100644
--- a/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderMixin.java
+++ b/mixins/om-mixins/src/main/java/org/apache/axiom/soap/impl/mixin/AxiomSOAPHeaderMixin.java
@@ -44,6 +44,7 @@ import org.apache.axiom.weaver.annotation.Mixin;
@Mixin
public abstract class AxiomSOAPHeaderMixin implements AxiomSOAPHeader {
+ @Override
public final boolean isChildElementAllowed(OMElement child) {
return child instanceof SOAPHeaderBlock;
}