Author: scheu
Date: Fri Nov 16 07:36:10 2007
New Revision: 595705

URL: http://svn.apache.org/viewvc?rev=595705&view=rev
Log:
WSCOMMONS-276
Contributor:Rich Scheuerle
Test From:David Illsley
David's test revealed several minor problems with the new CustomBuilder code 
usage with
headers. 

Modified:
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
    
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/ds/custombuilder/ByteArrayCustomBuilder.java
 Fri Nov 16 07:36:10 2007
@@ -27,6 +27,8 @@
 import org.apache.axiom.om.impl.builder.CustomBuilder;
 import org.apache.axiom.om.impl.serialize.StreamingOMSerializer;
 import org.apache.axiom.om.util.StAXUtils;
+import org.apache.axiom.soap.SOAPFactory;
+import org.apache.axiom.soap.SOAPHeader;
 
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
@@ -79,7 +81,13 @@
             
             // Create an OMSourcedElement backed by the ByteArrayDataSource
             OMNamespace ns = factory.createOMNamespace(namespace, prefix);
-            OMElement om = factory.createOMElement(ds, localPart, ns);
+            
+            OMElement om = null;
+            if (parent instanceof SOAPHeader && factory instanceof 
SOAPFactory) {
+                om = ((SOAPFactory)factory).createSOAPHeaderBlock(localPart, 
ns, ds);
+            } else {
+                om = factory.createOMElement(ds, localPart, ns);
+            }
             
             // Add the new OMSourcedElement ot the parent
             parent.addChild(om);

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/om/impl/builder/StAXOMBuilder.java
 Fri Nov 16 07:36:10 2007
@@ -250,22 +250,24 @@
     protected OMNode createNextOMElement() {
         OMNode newElement = null;
         if (elementLevel == 1 && this.customBuilderForPayload != null) {
-            newElement = createWithCustomBuilder(customBuilderForPayload);
+            newElement = createWithCustomBuilder(customBuilderForPayload,  
omfactory);
         } else if (customBuilders != null && elementLevel <= 
this.maxDepthForCustomBuilders) {
             String namespace = parser.getNamespaceURI();
             String localPart = parser.getLocalName();
             CustomBuilder customBuilder = getCustomBuilder(namespace, 
localPart);
             if (customBuilder != null) {
-                createWithCustomBuilder(customBuilder);
+                newElement = createWithCustomBuilder(customBuilder, omfactory);
             }
         }
         if (newElement == null) {
             newElement = createOMElement();
+        } else {
+            elementLevel--; // Decrease level since custom builder read the 
end element event
         }
         return newElement;
     }
     
-    protected OMNode createWithCustomBuilder(CustomBuilder customBuilder) {
+    protected OMNode createWithCustomBuilder(CustomBuilder customBuilder, 
OMFactory factory) {
         String namespace = parser.getNamespaceURI();
         String localPart = parser.getLocalName();
         OMContainer parent = null;
@@ -277,7 +279,7 @@
             }
                 
         }
-        return customBuilder.create(namespace, localPart, parent, parser, 
omfactory);
+        return customBuilder.create(namespace, localPart, parent, parser, 
factory);
         
     }
 

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-api/src/main/java/org/apache/axiom/soap/impl/builder/StAXSOAPModelBuilder.java
 Fri Nov 16 07:36:10 2007
@@ -174,7 +174,7 @@
                 parent = (OMNode) lastNode.getParent();
             }
             if (parent instanceof SOAPBody) {
-                newElement = createWithCustomBuilder(customBuilderForPayload);
+                newElement = createWithCustomBuilder(customBuilderForPayload,  
soapFactory);
             }
         } 
         if (newElement == null && customBuilders != null && 
@@ -183,11 +183,13 @@
             String localPart = parser.getLocalName();
             CustomBuilder customBuilder = getCustomBuilder(namespace, 
localPart);
             if (customBuilder != null) {
-                createWithCustomBuilder(customBuilder);
+                newElement = createWithCustomBuilder(customBuilder, 
soapFactory);
             }
         }
         if (newElement == null) {
             newElement = createOMElement();
+        } else {
+            elementLevel--; // Decrease level since custom builder read the 
end element event
         }
         return newElement;
     }

Modified: 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
URL: 
http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java?rev=595705&r1=595704&r2=595705&view=diff
==============================================================================
--- 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
 (original)
+++ 
webservices/commons/trunk/modules/axiom/modules/axiom-tests/src/test/java/org/apache/axiom/om/impl/builder/CustomBuilderTest.java
 Fri Nov 16 07:36:10 2007
@@ -32,11 +32,13 @@
 import org.apache.axiom.soap.SOAPHeaderBlock;
 import org.apache.axiom.soap.impl.builder.StAXSOAPModelBuilder;
 
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLInputFactory;
 import javax.xml.stream.XMLStreamReader;
 
 import java.io.File;
 import java.io.FileReader;
+import java.util.ArrayList;
 import java.util.Iterator;
 
 /**
@@ -55,6 +57,25 @@
     public void testSample1() throws Exception {
         File file = getTestResourceFile(TestConstants.SAMPLE1);
         copyAndCheck(createEnvelope(file), true);
+    }
+    
+    public void testHeaderCustomBuilder() throws Exception{
+        XMLStreamReader parser =
+            XMLInputFactory.newInstance().createXMLStreamReader(new
+                                                                
FileReader(getTestResourceFile(TestConstants.SOAP_SOAPMESSAGE)));
+        StAXSOAPModelBuilder builder = new StAXSOAPModelBuilder(parser, null);
+        builder.registerCustomBuilder(new 
QName("http://schemas.xmlsoap.org/ws/2004/03/addressing","To";), 3, new
+                                      ByteArrayCustomBuilder("utf-8"));
+        SOAPEnvelope sourceEnv = (SOAPEnvelope) builder.getDocumentElement();
+        SOAPHeader header = sourceEnv.getHeader();
+        ArrayList al =
+            
header.getHeaderBlocksWithNSURI("http://schemas.xmlsoap.org/ws/2004/03/addressing";);
+        for(int i=0;i<al.size();i++){
+            SOAPHeaderBlock shb = (SOAPHeaderBlock)al.get(i);
+            if("To".equals(shb.getLocalName())){
+                assertNotNull(shb.getDataSource());
+            }
+        }
     }
     
     public void testSOAPMESSAGE() throws Exception {



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to