Author: sergeyb
Date: Mon Jul 25 15:05:57 2011
New Revision: 1150739

URL: http://svn.apache.org/viewvc?rev=1150739&view=rev
Log:
[CXF-3681] More tests from Andi and a fix for PartialXMLStreamReader issue

Added:
    
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
   (with props)
Modified:
    
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java
    
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java
    
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java

Modified: 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java?rev=1150739&r1=1150738&r2=1150739&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java
 (original)
+++ 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/DelegatingNamespaceContext.java
 Mon Jul 25 15:05:57 2011
@@ -87,7 +87,6 @@ class DelegatingNamespaceContext impleme
         return prefix;
     }
 
-    @SuppressWarnings("unchecked")
     public Iterator getPrefixes(String ns) {
         return nc.getPrefixes(ns);
     }

Modified: 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java?rev=1150739&r1=1150738&r2=1150739&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java
 (original)
+++ 
cxf/trunk/common/common/src/main/java/org/apache/cxf/staxutils/transform/InTransformReader.java
 Mon Jul 25 15:05:57 2011
@@ -42,6 +42,7 @@ public class InTransformReader extends D
     private int previousDepth = -1;
     private boolean blockOriginalReader = true;
     private DelegatingNamespaceContext namespaceContext;
+    private boolean appendInProgress;
     
     public InTransformReader(XMLStreamReader reader, 
                              Map<String, String> inMap,
@@ -64,7 +65,8 @@ public class InTransformReader extends D
     }
     
     public int next() throws XMLStreamException {
-        if (currentQName != null) {
+        if (currentQName != null && appendInProgress) {
+            appendInProgress = false;
             return XMLStreamConstants.START_ELEMENT;
         } else if (previousDepth != -1 && previousDepth == getDepth() + 1) {
             previousDepth = -1;
@@ -140,6 +142,7 @@ public class InTransformReader extends D
         QName theName = readCurrentElement();
         QName appendQName = inAppendMap.remove(theName);
         if (appendQName != null) {
+            appendInProgress = true;
             previousDepth = getDepth();
             previousQName = theName;
             currentQName = appendQName;

Added: 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java?rev=1150739&view=auto
==============================================================================
--- 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
 (added)
+++ 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
 Mon Jul 25 15:05:57 2011
@@ -0,0 +1,90 @@
+/**
+ * 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.cxf.staxutils;
+
+import java.io.ByteArrayOutputStream;
+import java.io.StringReader;
+
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.w3c.dom.Document;
+
+import org.junit.Assert;
+import org.junit.Test;
+
+public class PartialXMLStreamReaderTest extends Assert {
+
+    @Test
+    public void testReader() throws Exception {
+        String test = 
+                "<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" 
+                + "<soap:Header>"
+                + "<ns2:SoapHeaderIn 
xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + "xmlns=\"http://cxf.apache.org/transform/test\";>"
+                + "<ns2:OperationalMode>SIMULATION1</ns2:OperationalMode>"
+                + "<ns2:SomeComplexHeaderType>"
+                + 
"<ns3:CallerCorrelationId>SomeComplexValue</ns3:CallerCorrelationId>"
+                + "</ns2:SomeComplexHeaderType>"
+                + "</ns2:SoapHeaderIn>"
+                + "</soap:Header>"
+                + "<soap:Body>"
+                + "<TransformTestRequest 
xmlns=\"http://cxf.apache.org/transform/test\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; />"
+                + "</soap:Body></soap:Envelope>";
+        
+        XMLStreamReader reader = 
+            StaxUtils.createXMLStreamReader(new StringReader(test));
+        QName bodyTag = new QName("http://schemas.xmlsoap.org/soap/envelope/";, 
"Body");
+        PartialXMLStreamReader filteredReader = new 
PartialXMLStreamReader(reader, bodyTag);
+        
+        Document doc = StaxUtils.read(filteredReader);
+        
+        assertNotNull(doc);
+        
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
+        XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(bos);
+        StaxUtils.copy(doc, writer);
+        writer.flush();
+        String value = bos.toString();
+        
+        System.out.println("value: " + value);
+        
+        assertTrue(("<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>"
+                + "<soap:Header>"
+                + "<ns2:SoapHeaderIn 
xmlns=\"http://cxf.apache.org/transform/test\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns4=\"http://cxf.apache.org/transform/fault\";>"
+                + "<ns2:OperationalMode>SIMULATION1</ns2:OperationalMode>"
+                + "<ns2:SomeComplexHeaderType>"
+                + 
"<ns3:CallerCorrelationId>SomeComplexValue</ns3:CallerCorrelationId>"
+                + 
"</ns2:SomeComplexHeaderType></ns2:SoapHeaderIn></soap:Header>"
+                + "<soap:Body/>"
+                + "</soap:Envelope>").
+                equals(value.trim()));
+        
+    }
+}
+

Propchange: 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/PartialXMLStreamReaderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java
URL: 
http://svn.apache.org/viewvc/cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java?rev=1150739&r1=1150738&r2=1150739&view=diff
==============================================================================
--- 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java
 (original)
+++ 
cxf/trunk/common/common/src/test/java/org/apache/cxf/staxutils/transform/InTransformReaderTest.java
 Mon Jul 25 15:05:57 2011
@@ -21,13 +21,25 @@ package org.apache.cxf.staxutils.transfo
 import java.io.ByteArrayInputStream;
 import java.io.ByteArrayOutputStream;
 import java.io.InputStream;
+import java.io.StringReader;
 import java.util.Collections;
 import java.util.HashMap;
 import java.util.Map;
 
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
 
+import org.w3c.dom.Document;
+import org.w3c.dom.Element;
+import org.w3c.dom.NamedNodeMap;
+import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
+
+import org.apache.cxf.helpers.DOMUtils;
+import org.apache.cxf.staxutils.PartialXMLStreamReader;
 import org.apache.cxf.staxutils.StaxUtils;
+
 import org.junit.Assert;
 import org.junit.Test;
 
@@ -63,6 +75,23 @@ public class InTransformReaderTest exten
     }
     
     @Test
+    public void testTransformAndAppend() throws Exception {
+        InputStream is = new ByteArrayInputStream("<test/>".getBytes());
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(is);
+        reader = new InTransformReader(reader, 
+                                       Collections.singletonMap("test", 
"test2"),
+                                       Collections.singletonMap("test", 
"wrapper"), 
+                                       false);
+        
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
+        StaxUtils.copy(reader, bos);
+        String value = bos.toString();
+        System.out.println(value);
+        assertTrue("<wrapper><test2/></wrapper>".equals(value));        
+    }
+    
+    
+    @Test
     public void testReadWithSameNamespace() throws Exception {
         InputStream is = new ByteArrayInputStream(
                 ("<test xmlns=\"http://bar\"; xmlns:ns1=\"http://foo\";>" 
@@ -241,4 +270,253 @@ public class InTransformReaderTest exten
                 + 
"xmlns:ns4=\"http://cxf.apache.org/transform/fault\"/></soap:Body></ps1:TheEnvelope>").
                 equals(value.trim()));
     }
+    
+    @Test
+    public void testReadPartialWithComplexRequestSameNamespace() throws 
Exception {
+        InputStream is = new ByteArrayInputStream(
+                ("<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" 
+                + "<soap:Header>"
+                + "<ns2:SoapHeaderIn 
xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + "xmlns=\"http://cxf.apache.org/transform/test\";>"
+                + "<ns2:OperationalMode>SIMULATION1</ns2:OperationalMode>"
+                + "<ns2:SomeComplexHeaderType>"
+                + 
"<ns3:CallerCorrelationId>SomeComplexValue</ns3:CallerCorrelationId>"
+                + "</ns2:SomeComplexHeaderType>"
+                + "</ns2:SoapHeaderIn>"
+                + "</soap:Header>"
+                + "<soap:Body>"
+                + "<TransformTestRequest 
xmlns=\"http://cxf.apache.org/transform/test\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; />"
+                + "</soap:Body></soap:Envelope>").getBytes());
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(is);
+        
+        Map<String, String> inMap = new HashMap<String, String>();
+        inMap.put("{http://cxf.apache.org/transform/header/element}*";, 
+                "{http://cxf.apache.org/transform/header/element}*";);
+        
+        reader = new InTransformReader(reader, 
+                                       inMap,
+                                       null, false);
+        
+        QName bodyTag = new QName("http://schemas.xmlsoap.org/soap/envelope/";, 
"Body");
+        PartialXMLStreamReader filteredReader = new 
PartialXMLStreamReader(reader, bodyTag);
+        
+        Document doc = StaxUtils.read(filteredReader);
+        
+        assertNotNull(doc);
+        
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
+        XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(bos);
+        StaxUtils.copy(doc, writer);
+        writer.flush();
+
+        String value = bos.toString();
+        
+        Document docTransformed = DOMUtils.readXml(new StringReader(value));
+        Element env = docTransformed.getDocumentElement();
+        assertEquals("http://schemas.xmlsoap.org/soap/envelope/";, 
env.getNamespaceURI());
+        assertEquals("soap", env.getPrefix());
+        
+        Element header = getElement(env, 
"http://schemas.xmlsoap.org/soap/envelope/";, "Header", "soap");
+        
+        Element customHeader = getElement(header, 
"http://cxf.apache.org/transform/header";, 
+                                          "SoapHeaderIn", "ns2");
+        NamedNodeMap map = customHeader.getAttributes();
+        assertEquals(4, map.getLength());
+        validateAttribute(map, "xmlns", 
"http://cxf.apache.org/transform/test";);
+        validateAttribute(map, "xmlns:ns2", 
"http://cxf.apache.org/transform/header";);
+        validateAttribute(map, "xmlns:ns4", 
"http://cxf.apache.org/transform/fault";);
+        validateAttribute(map, "xmlns:ps1", 
"http://cxf.apache.org/transform/header/element";);
+        
+        Element mode = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
"OperationalMode", "ns2");
+        assertEquals("SIMULATION1", mode.getTextContent());
+        Element headerType = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
+                       "SomeComplexHeaderType", "ns2");
+        
+        Element correlationId = 
+            getElement(headerType, 
"http://cxf.apache.org/transform/header/element";, 
+                       "CallerCorrelationId", "ps1");
+        assertEquals("SomeComplexValue", correlationId.getTextContent());
+        getElement(env, "http://schemas.xmlsoap.org/soap/envelope/";, "Body", 
"soap");
+    }
+    
+    @Test
+    public void testPartialReadWithComplexRequestMultipleNamespace() throws 
Exception {
+        InputStream is = new ByteArrayInputStream(
+                ("<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" 
+                + "<soap:Header>"
+                + "<ns2:SoapHeaderIn 
xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + "xmlns=\"http://cxf.apache.org/transform/test\";>"
+                + "<ns2:OperationalMode>SIMULATION1</ns2:OperationalMode>"
+                + "<ns2:SomeComplexHeaderType>"
+                + 
"<ns3:CallerCorrelationId>SomeComplexValue</ns3:CallerCorrelationId>"
+                + "</ns2:SomeComplexHeaderType>"
+                + "</ns2:SoapHeaderIn>"
+                + "</soap:Header>"
+                + "<soap:Body>"
+                + "<TransformTestRequest 
xmlns=\"http://cxf.apache.org/transform/test\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; />"
+                + "</soap:Body></soap:Envelope>").getBytes());
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(is);
+        
+        Map<String, String> inMap = new HashMap<String, String>();
+        inMap.put("{http://cxf.apache.org/transform/header/element}*";, 
+                "{http://cxf.apache.org/transform/header/otherelement}*";);
+        inMap.put("{http://cxf.apache.org/transform/test}*";, 
+                "{http://cxf.apache.org/transform/othertest}*";);
+        
+        reader = new InTransformReader(reader, 
+                                       inMap,
+                                       null, false);
+        
+        QName bodyTag = new QName("http://schemas.xmlsoap.org/soap/envelope/";, 
"Body");
+        PartialXMLStreamReader filteredReader = new 
PartialXMLStreamReader(reader, bodyTag);
+        
+        Document doc = StaxUtils.read(filteredReader);
+        
+        assertNotNull(doc);
+        
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
+        XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(bos);
+        StaxUtils.copy(doc, writer);
+        writer.flush();
+
+        String value = bos.toString();
+        
+        Document docTransformed = DOMUtils.readXml(new StringReader(value));
+        Element env = docTransformed.getDocumentElement();
+        assertEquals("http://schemas.xmlsoap.org/soap/envelope/";, 
env.getNamespaceURI());
+        assertEquals("soap", env.getPrefix());
+        
+        Element header = getElement(env, 
"http://schemas.xmlsoap.org/soap/envelope/";, "Header", "soap");
+        
+        Element customHeader = getElement(header, 
"http://cxf.apache.org/transform/header";, 
+                                          "SoapHeaderIn", "ns2");
+        NamedNodeMap map = customHeader.getAttributes();
+        assertEquals(4, map.getLength());
+        validateAttribute(map, "xmlns:ps2", 
"http://cxf.apache.org/transform/othertest";);
+        validateAttribute(map, "xmlns:ns2", 
"http://cxf.apache.org/transform/header";);
+        validateAttribute(map, "xmlns:ns4", 
"http://cxf.apache.org/transform/fault";);
+        validateAttribute(map, "xmlns:ps1", 
"http://cxf.apache.org/transform/header/otherelement";);
+        
+        Element mode = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
"OperationalMode", "ns2");
+        assertEquals("SIMULATION1", mode.getTextContent());
+        Element headerType = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
+                       "SomeComplexHeaderType", "ns2");
+        
+        Element correlationId = 
+            getElement(headerType, 
"http://cxf.apache.org/transform/header/otherelement";, 
+                       "CallerCorrelationId", "ps1");
+        assertEquals("SomeComplexValue", correlationId.getTextContent());
+        getElement(env, "http://schemas.xmlsoap.org/soap/envelope/";, "Body", 
"soap");
+        
+    }
+    
+    @Test
+    public void testPartialReadWithComplexTransformationNamespace() throws 
Exception {
+        InputStream is = new ByteArrayInputStream(
+                ("<soap:Envelope 
xmlns:soap=\"http://schemas.xmlsoap.org/soap/envelope/\";>" 
+                + "<soap:Header>"
+                + "<ns2:SoapHeaderIn 
xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + "xmlns=\"http://cxf.apache.org/transform/test\";>"
+                + "<ns2:OperationalMode>SIMULATION1</ns2:OperationalMode>"
+                + "<ns2:SomeComplexHeaderType>"
+                + 
"<ns3:CallerCorrelationId>SomeComplexValue</ns3:CallerCorrelationId>"
+                + "</ns2:SomeComplexHeaderType>"
+                + "</ns2:SoapHeaderIn>"
+                + "</soap:Header>"
+                + "<soap:Body>"
+                + "<TransformTestRequest 
xmlns=\"http://cxf.apache.org/transform/test\"; "
+                + "xmlns:ns2=\"http://cxf.apache.org/transform/header\"; "
+                + 
"xmlns:ns3=\"http://cxf.apache.org/transform/header/element\"; "
+                + "xmlns:ns4=\"http://cxf.apache.org/transform/fault\"; />"
+                + "</soap:Body></soap:Envelope>").getBytes());
+        XMLStreamReader reader = StaxUtils.createXMLStreamReader(is);
+        
+        Map<String, String> inMap = new HashMap<String, String>();
+        inMap.put("{http://cxf.apache.org/transform/header/element}*";, 
+                "{http://cxf.apache.org/transform/header/otherelement}*";);
+        inMap.put("{http://cxf.apache.org/transform/test}*";, 
+                "{http://cxf.apache.org/transform/othertest}*";);
+        inMap.put("{http://schemas.xmlsoap.org/soap/envelope/}Envelope";, 
+                "{http://schemas.xmlsoap.org/soap/envelope/}TheEnvelope";);
+        
+        // set the block original reader flag to true
+        reader = new InTransformReader(reader, 
+                                       inMap,
+                                       null, true);
+        
+        QName bodyTag = new QName("http://schemas.xmlsoap.org/soap/envelope/";, 
"Body");
+        PartialXMLStreamReader filteredReader = new 
PartialXMLStreamReader(reader, bodyTag);
+        
+        Document doc = StaxUtils.read(filteredReader);
+        
+        assertNotNull(doc);
+        
+        ByteArrayOutputStream bos = new ByteArrayOutputStream(); 
+        XMLStreamWriter writer = StaxUtils.createXMLStreamWriter(bos);
+        StaxUtils.copy(doc, writer);
+        writer.flush();
+        
+        String value = bos.toString();
+        
+        Document docTransformed = DOMUtils.readXml(new StringReader(value));
+        Element env = docTransformed.getDocumentElement();
+        assertEquals("http://schemas.xmlsoap.org/soap/envelope/";, 
env.getNamespaceURI());
+        assertEquals("ps1", env.getPrefix());
+        assertEquals("TheEnvelope", env.getLocalName());
+        
+        Element header = getElement(env, 
"http://schemas.xmlsoap.org/soap/envelope/";, "Header", "soap");
+        
+        Element customHeader = getElement(header, 
"http://cxf.apache.org/transform/header";, 
+                                          "SoapHeaderIn", "ns2");
+        NamedNodeMap map = customHeader.getAttributes();
+        assertEquals(4, map.getLength());
+        validateAttribute(map, "xmlns:ps3", 
"http://cxf.apache.org/transform/othertest";);
+        validateAttribute(map, "xmlns:ns2", 
"http://cxf.apache.org/transform/header";);
+        validateAttribute(map, "xmlns:ns4", 
"http://cxf.apache.org/transform/fault";);
+        validateAttribute(map, "xmlns:ps2", 
"http://cxf.apache.org/transform/header/otherelement";);
+        
+        Element mode = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
"OperationalMode", "ns2");
+        assertEquals("SIMULATION1", mode.getTextContent());
+        Element headerType = 
+            getElement(customHeader, "http://cxf.apache.org/transform/header";, 
+                       "SomeComplexHeaderType", "ns2");
+        
+        Element correlationId = 
+            getElement(headerType, 
"http://cxf.apache.org/transform/header/otherelement";, 
+                       "CallerCorrelationId", "ps2");
+        assertEquals("SomeComplexValue", correlationId.getTextContent());
+        getElement(env, "http://schemas.xmlsoap.org/soap/envelope/";, "Body", 
"soap");
+        
+    }
+    
+    
+    private Element getElement(Element parent, String namespace, String name, 
String prefix) {
+        NodeList list = parent.getElementsByTagNameNS(namespace, name);
+        assertEquals(1, list.getLength());
+        Element el = (Element)list.item(0);
+        assertEquals(prefix, el.getPrefix());
+        return el;
+    }
+    
+    private void validateAttribute(NamedNodeMap map, String name, String 
value) {
+        Node attr = map.getNamedItem(name);
+        assertEquals(attr.getTextContent(), value);
+    }
 }


Reply via email to