Author: veithen
Date: Mon Aug 31 17:06:01 2015
New Revision: 1700278
URL: http://svn.apache.org/r1700278
Log:
Fix an issue with cloning SOAPHeaderBlock instances.
Added:
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java
(with props)
Modified:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
Modified:
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj?rev=1700278&r1=1700277&r2=1700278&view=diff
==============================================================================
---
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj
(original)
+++
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj
Mon Aug 31 17:06:01 2015
@@ -262,12 +262,12 @@ public aspect CoreElementSupport {
// clonedAttr.coreSetSpecified(attr.coreGetSpecified());
attr = attr.coreGetNextAttribute();
}
- copyData(policy, options, clone);
+ clone.initAncillaryData(policy, options, this);
return clone;
}
abstract void CoreElement.copyName(CoreElement clone);
- public <T> void CoreElement.copyData(ClonePolicy<T> policy, T options,
CoreElement clone) {
+ public <T> void CoreElement.initAncillaryData(ClonePolicy<T> policy, T
options, CoreElement other) {
}
}
Modified:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj?rev=1700278&r1=1700277&r2=1700278&view=diff
==============================================================================
---
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
(original)
+++
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
Mon Aug 31 17:06:01 2015
@@ -547,7 +547,7 @@ public aspect AxiomElementSupport {
targetParent.coreAppendChild(clone, false);
}
clone.initName(getLocalName(), getNamespace(), namespaceRepairing);
- copyData(policy, options, clone);
+ clone.initAncillaryData(policy, options, this);
return clone;
}
Modified:
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj?rev=1700278&r1=1700277&r2=1700278&view=diff
==============================================================================
---
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
(original)
+++
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
Mon Aug 31 17:06:01 2015
@@ -121,12 +121,12 @@ public aspect AxiomSOAPHeaderBlockSuppor
}
}
- public final <T> void AxiomSOAPHeaderBlock.copyData(ClonePolicy<T> policy,
T options, CoreElement clone) {
+ public final <T> void
AxiomSOAPHeaderBlock.initAncillaryData(ClonePolicy<T> policy, T options,
CoreElement other) {
// Copy the processed flag. The other SOAPHeaderBlock information
// (e.g. role, mustUnderstand) are attributes on the tag and are
copied elsewhere.
Boolean processedFlag = options instanceof SOAPCloneOptions ?
((SOAPCloneOptions)options).getProcessedFlag() : null;
- if ((processedFlag == null && isProcessed()) || (processedFlag != null
&& processedFlag.booleanValue())) {
- ((SOAPHeaderBlock)clone).setProcessed();
+ if ((processedFlag == null && ((SOAPHeaderBlock)other).isProcessed())
|| (processedFlag != null && processedFlag.booleanValue())) {
+ setProcessed();
}
}
}
Modified:
webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java?rev=1700278&r1=1700277&r2=1700278&view=diff
==============================================================================
---
webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
(original)
+++
webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
Mon Aug 31 17:06:01 2015
@@ -48,7 +48,7 @@ public abstract class SOAPHeaderBlockImp
protected OMSourcedElement createClone(OMCloneOptions options,
OMDataSource ds) {
AxiomSOAPHeaderBlock clone =
(AxiomSOAPHeaderBlock)((SOAPFactory)getOMFactory()).createSOAPHeaderBlock(ds);
- copyData(Policies.CLONE_POLICY, options, clone);
+ clone.initAncillaryData(Policies.CLONE_POLICY, options, this);
return clone;
}
}
Modified:
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java?rev=1700278&r1=1700277&r2=1700278&view=diff
==============================================================================
---
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
(original)
+++
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/SOAPTestSuiteBuilder.java
Mon Aug 31 17:06:01 2015
@@ -261,6 +261,7 @@ public class SOAPTestSuiteBuilder extend
addTest(new
org.apache.axiom.ts.soap.headerblock.TestClone(metaFactory, spec,
Boolean.TRUE));
addTest(new
org.apache.axiom.ts.soap.headerblock.TestClone(metaFactory, spec,
Boolean.FALSE));
addTest(new
org.apache.axiom.ts.soap.headerblock.TestClone(metaFactory, spec, null));
+ addTest(new
org.apache.axiom.ts.soap.headerblock.TestCloneProcessedWithoutPreservingModel(metaFactory,
spec));
addTest(new
org.apache.axiom.ts.soap.headerblock.TestGetRole(metaFactory, spec));
addTest(new
org.apache.axiom.ts.soap.headerblock.TestGetVersion(metaFactory, spec));
for (int i=0; i<booleanLiterals.length; i++) {
Added:
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java
URL:
http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java?rev=1700278&view=auto
==============================================================================
---
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java
(added)
+++
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java
Mon Aug 31 17:06:01 2015
@@ -0,0 +1,49 @@
+/*
+ * 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.ts.soap.headerblock;
+
+import static com.google.common.truth.Truth.assertThat;
+
+import org.apache.axiom.om.OMElement;
+import org.apache.axiom.om.OMMetaFactory;
+import org.apache.axiom.soap.SOAPCloneOptions;
+import org.apache.axiom.soap.SOAPHeaderBlock;
+import org.apache.axiom.ts.soap.SOAPSpec;
+import org.apache.axiom.ts.soap.SOAPTestCase;
+
+/**
+ * Test cloning a {@link SOAPHeaderBlock} flagged as processed, but without
preserving the model. In
+ * this case the result is a plain {@link OMElement} instance and the
processed flag is ignored.
+ * <p>
+ * This is a regression test for an issue in older Axiom versions.
+ */
+public class TestCloneProcessedWithoutPreservingModel extends SOAPTestCase {
+ public TestCloneProcessedWithoutPreservingModel(OMMetaFactory metaFactory,
SOAPSpec spec) {
+ super(metaFactory, spec);
+ }
+
+ @Override
+ protected void runTest() throws Throwable {
+ SOAPHeaderBlock headerBlock = soapFactory.createSOAPHeaderBlock("test",
+ soapFactory.createOMNamespace("urn:test", "p"));
+ headerBlock.setProcessed();
+ OMElement clone = (OMElement)headerBlock.clone(new SOAPCloneOptions());
+ assertThat(clone).isNotInstanceOf(SOAPHeaderBlock.class);
+ }
+}
Propchange:
webservices/axiom/trunk/testing/axiom-testsuite/src/main/java/org/apache/axiom/ts/soap/headerblock/TestCloneProcessedWithoutPreservingModel.java
------------------------------------------------------------------------------
svn:eol-style = native