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


Reply via email to