You are viewing a plain text version of this content. The canonical link for it is here.
Posted to axis-cvs@ws.apache.org by di...@apache.org on 2006/01/30 04:07:01 UTC

svn commit: r373418 - in /webservices/axis2/trunk/java/modules: adb/src/org/apache/axis2/databinding/ adb/src/org/apache/axis2/databinding/utils/ adb/test/org/apache/axis2/databinding/ doom/src/org/apache/axis2/soap/impl/dom/factory/ doom/src/org/apach...

Author: dims
Date: Sun Jan 29 19:06:52 2006
New Revision: 373418

URL: http://svn.apache.org/viewcvs?rev=373418&view=rev
Log:
- Getting rid of ugly hack(s) in ADBSOAPModelBuilder
- Added a getSoapVersionURI for SOAPFactory, so that given a soap factory, we can at least get to know which version of soap it is for.
- change access for 2 methods in StAXSOAPModelBuilder so that the can be overridden
- Extend ADBSOAPModelBuilder from StAXSOAPModelBuilder instead of StAXOMBuilder
- ADBSOAPModelBuilder used a few inner ADBbeans for Envelope/Header/Body and relies on ADBPullParser to generate the necessary StaX events.
- Added a test with getXMLStreamReaderWithoutCaching in ADBSOAPModelBuilderTest



Modified:
    webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/ADBSOAPModelBuilder.java
    webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ADBPullParser.java
    webservices/axis2/trunk/java/modules/adb/test/org/apache/axis2/databinding/ADBSOAPModelBuilderTest.java
    webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/factory/DOMSOAPFactory.java
    webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap11/SOAP11Factory.java
    webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap12/SOAP12Factory.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPFactory.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/builder/StAXSOAPModelBuilder.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/factory/SOAPLinkedListImplFactory.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap11/SOAP11Factory.java
    webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap12/SOAP12Factory.java

Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/ADBSOAPModelBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/ADBSOAPModelBuilder.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/ADBSOAPModelBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/ADBSOAPModelBuilder.java Sun Jan 29 19:06:52 2006
@@ -1,61 +1,87 @@
 package org.apache.axis2.databinding;
 
-import org.apache.axis2.om.OMException;
-import org.apache.axis2.om.impl.OMNodeEx;
-import org.apache.axis2.om.impl.llom.builder.StAXOMBuilder;
-import org.apache.axis2.soap.SOAPBody;
+import org.apache.axis2.soap.SOAPConstants;
 import org.apache.axis2.soap.SOAPEnvelope;
 import org.apache.axis2.soap.SOAPFactory;
+import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;
 
-import javax.xml.stream.XMLStreamException;
+import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 
 /**
  * Builds a SOAPEnvelope around an ADB pull parser
  */
-public class ADBSOAPModelBuilder extends StAXOMBuilder {
-    private SOAPBody body;
-    private SOAPEnvelope envelope;
-    
+public class ADBSOAPModelBuilder extends StAXSOAPModelBuilder {
     public ADBSOAPModelBuilder(XMLStreamReader parser, SOAPFactory factory) {
-        super(factory, parser);
+        super(new Envelope(parser).getPullParser(new QName(factory.getSoapVersionURI(), SOAPConstants.SOAPENVELOPE_LOCAL_NAME, SOAPConstants.SOAP_DEFAULT_NAMESPACE_PREFIX)),
+                factory,
+                factory.getSoapVersionURI());
+    }
 
-        document = factory.createSOAPMessage(this);
-        envelope = factory.getDefaultEnvelope();
-        document.addChild(envelope);
-        body = envelope.getBody();
-
-        envelope.setBuilder(this);
-        envelope.getHeader().setBuilder(this);
-        body.setBuilder(this);
-        lastNode = body;
-
-        ((OMNodeEx)envelope).setComplete(false);
-        ((OMNodeEx)body).setComplete(false);
-        
-    }
-
-    long count = -1;
-    public int next() throws OMException {
-        count++;
-        if(count == 0)
-            return 0;
-        
-        int ret = super.next();
-        try {
-            // Peek to see if the parser has any more and set the done flag.
-            if(!parser.hasNext()) {
-                done = true;
-                ((OMNodeEx)body).setComplete(true);
-                ((OMNodeEx)envelope).setComplete(true);
-            }
-        } catch (XMLStreamException e) {
-            throw new OMException(e);
+    public SOAPEnvelope getEnvelope() {
+        return getSOAPEnvelope();
+    }
+
+    public static class Envelope
+            implements org.apache.axis2.databinding.ADBBean {
+        Body body;
+
+        Envelope(XMLStreamReader parser) {
+            body = new Body(parser);
         }
-        return ret;
+
+        public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName) {
+            java.util.ArrayList elementList = new java.util.ArrayList();
+            elementList.add(new QName(qName.getNamespaceURI(), "Header", SOAPConstants.BODY_NAMESPACE_PREFIX));
+            elementList.add(new Header());
+            elementList.add(new QName(qName.getNamespaceURI(), "Body", SOAPConstants.BODY_NAMESPACE_PREFIX));
+            elementList.add(body);
+            return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(qName, elementList.toArray(), null);
+        }
+    }
+    
+    protected void parseHeaders() {
+        //Do nothing        
+    }
+    
+    protected void identifySOAPVersion(String soapVersionURIFromTransport) {
+        //Do nothing
     }
 
-    public SOAPEnvelope getEnvelope() {
-        return envelope;
+    public static class Body
+            implements org.apache.axis2.databinding.ADBBean {
+        Child child;
+
+        Body(XMLStreamReader parser) {
+            child = new Child(parser);
+        }
+
+        public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName) {
+            java.util.ArrayList elementList = new java.util.ArrayList();
+            elementList.add(qName);
+            elementList.add(child);
+            return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(qName, elementList.toArray(), null);
+        }
+    }
+
+    public static class Header
+            implements org.apache.axis2.databinding.ADBBean {
+        public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName) {
+            java.util.ArrayList elementList = new java.util.ArrayList();
+            return org.apache.axis2.databinding.utils.ADBPullParser.createPullParser(qName, elementList.toArray(), null);
+        }
+    }
+
+    public static class Child
+            implements org.apache.axis2.databinding.ADBBean {
+        XMLStreamReader parser;
+
+        Child(XMLStreamReader parser) {
+            this.parser = parser;
+        }
+
+        public javax.xml.stream.XMLStreamReader getPullParser(javax.xml.namespace.QName qName) {
+            return parser;
+        }
     }
 }

Modified: webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ADBPullParser.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ADBPullParser.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ADBPullParser.java (original)
+++ webservices/axis2/trunk/java/modules/adb/src/org/apache/axis2/databinding/utils/ADBPullParser.java Sun Jan 29 19:06:52 2006
@@ -643,7 +643,7 @@
         try {
             return next();
         } catch (XMLStreamException e) {
-            throw new RuntimeException("FIXME");
+            throw new RuntimeException(e);
         }
     }
 

Modified: webservices/axis2/trunk/java/modules/adb/test/org/apache/axis2/databinding/ADBSOAPModelBuilderTest.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/adb/test/org/apache/axis2/databinding/ADBSOAPModelBuilderTest.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/adb/test/org/apache/axis2/databinding/ADBSOAPModelBuilderTest.java (original)
+++ webservices/axis2/trunk/java/modules/adb/test/org/apache/axis2/databinding/ADBSOAPModelBuilderTest.java Sun Jan 29 19:06:52 2006
@@ -16,20 +16,10 @@
 
 package org.apache.axis2.databinding;
 
-import java.io.ByteArrayInputStream;
-import java.io.IOException;
-import java.util.ArrayList;
-
-import javax.xml.namespace.QName;
-import javax.xml.parsers.DocumentBuilder;
-import javax.xml.parsers.DocumentBuilderFactory;
-import javax.xml.parsers.ParserConfigurationException;
-import javax.xml.stream.XMLStreamReader;
-
 import org.apache.axis2.databinding.utils.ADBPullParser;
-import org.apache.axis2.om.DOOMAbstractFactory;
 import org.apache.axis2.om.OMAbstractFactory;
 import org.apache.axis2.om.OMElement;
+import org.apache.axis2.om.DOOMAbstractFactory;
 import org.apache.axis2.soap.SOAP11Constants;
 import org.apache.axis2.soap.SOAPEnvelope;
 import org.apache.axis2.soap.impl.llom.builder.StAXSOAPModelBuilder;
@@ -37,6 +27,15 @@
 import org.w3c.dom.Document;
 import org.xml.sax.SAXException;
 
+import javax.xml.namespace.QName;
+import javax.xml.parsers.DocumentBuilder;
+import javax.xml.parsers.DocumentBuilderFactory;
+import javax.xml.parsers.ParserConfigurationException;
+import javax.xml.stream.XMLStreamReader;
+import java.io.ByteArrayInputStream;
+import java.io.IOException;
+import java.util.ArrayList;
+
 public class ADBSOAPModelBuilderTest extends XMLTestCase {
     public void testSimpleArrayList() throws Exception {
         String expectedXML = "<?xml version='1.0' encoding='utf-8'?><soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\"><soapenv:Header /><soapenv:Body><Person xmlns=\"\"><Name xmlns=\"\">FooOne</Name><DependentOne xmlns=\"\"><Name xmlns=\"\">FooTwo</Name><Age xmlns=\"\">25</Age><Sex xmlns=\"\">Male</Sex></DependentOne><DependentTwo xmlns=\"\"><Name xmlns=\"\">FooTwo</Name><Age xmlns=\"\">25</Age><Sex xmlns=\"\">Male</Sex></DependentTwo><Organization xmlns=\"\">Apache</Organization></Person></soapenv:Body></soapenv:Envelope>";
@@ -61,7 +60,7 @@
         assertXMLEqual(actualDom, expectedDOM);
     }
     
-    public void testConvertToDOOM() {
+    public void testConvertToDOOM() throws Exception {
         
         CreateAccountRequest request = new CreateAccountRequest();
         ClientInfo clientInfo = new ClientInfo();
@@ -78,11 +77,33 @@
         env.build();
         
         StAXSOAPModelBuilder builder2 = new StAXSOAPModelBuilder(env.getXMLStreamReader(), DOOMAbstractFactory.getSOAP11Factory(), SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
-        
         SOAPEnvelope envelope = builder2.getSOAPEnvelope();
         envelope.build();
+        
+        envelope.serialize(System.out);
     }
     
+    public void testConvertToDOOM2() throws Exception {
+        
+        CreateAccountRequest request = new CreateAccountRequest();
+        ClientInfo clientInfo = new ClientInfo();
+        clientInfo.setName("bob");
+        clientInfo.setSsn("123456789");
+        request.setClientInfo(clientInfo);
+        request.setPassword("passwd");
+        
+        ADBSOAPModelBuilder builder = new ADBSOAPModelBuilder(request
+                .getPullParser(CreateAccountRequest.MY_QNAME),
+                OMAbstractFactory.getSOAP11Factory());
+        
+        SOAPEnvelope env = builder.getEnvelope();
+        
+        StAXSOAPModelBuilder builder2 = new StAXSOAPModelBuilder(env.getXMLStreamReaderWithoutCaching(), DOOMAbstractFactory.getSOAP11Factory(), SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI);
+        SOAPEnvelope envelope = builder2.getSOAPEnvelope();
+        envelope.build();
+        
+        envelope.serialize(System.out);
+    }
 
     public class DummyADBBean implements ADBBean {
         ArrayList propertyList = new ArrayList();
@@ -115,5 +136,4 @@
         DocumentBuilder db = dbf.newDocumentBuilder();
         return db.parse(new ByteArrayInputStream(xml.getBytes()));
     }
-    
 }

Modified: webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/factory/DOMSOAPFactory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/factory/DOMSOAPFactory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/factory/DOMSOAPFactory.java (original)
+++ webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/factory/DOMSOAPFactory.java Sun Jan 29 19:06:52 2006
@@ -45,12 +45,16 @@
 	public DOMSOAPFactory(DocumentImpl doc) {
 		super(doc);
 	}
-	
-	public SOAPMessage createSOAPMessage(OMXMLParserWrapper builder) {
-		SOAPMessageImpl messageImpl = new SOAPMessageImpl(builder);
-		this.document = messageImpl;
-		return messageImpl;
-	}
+
+    public String getSoapVersionURI() {
+        throw new UnsupportedOperationException();
+    }
+
+    public SOAPMessage createSOAPMessage(OMXMLParserWrapper builder) {
+        SOAPMessageImpl messageImpl = new SOAPMessageImpl(builder);
+        this.document = messageImpl;
+        return messageImpl;
+    }
 
 	public SOAPMessage createSOAPMessage(SOAPEnvelope envelope, OMXMLParserWrapper parserWrapper) {
 		SOAPMessageImpl messageImpl = new SOAPMessageImpl(envelope, parserWrapper);

Modified: webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap11/SOAP11Factory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap11/SOAP11Factory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap11/SOAP11Factory.java (original)
+++ webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap11/SOAP11Factory.java Sun Jan 29 19:06:52 2006
@@ -48,7 +48,11 @@
 	public SOAP11Factory(DocumentImpl doc) {
 		super(doc);
 	}
-	
+
+    public String getSoapVersionURI() {
+        return SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+    }
+
     public SOAPEnvelope createSOAPEnvelope() {
         return new SOAPEnvelopeImpl(
                 new NamespaceImpl(

Modified: webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap12/SOAP12Factory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap12/SOAP12Factory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap12/SOAP12Factory.java (original)
+++ webservices/axis2/trunk/java/modules/doom/src/org/apache/axis2/soap/impl/dom/soap12/SOAP12Factory.java Sun Jan 29 19:06:52 2006
@@ -46,6 +46,10 @@
 		super(doc);
 	}
 	
+    public String getSoapVersionURI() {
+        return SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+    }
+
     public SOAPEnvelope createSOAPEnvelope() {
         return new SOAPEnvelopeImpl(
                 new NamespaceImpl(

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPFactory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPFactory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPFactory.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/SOAPFactory.java Sun Jan 29 19:06:52 2006
@@ -22,6 +22,9 @@
 
 
 public interface SOAPFactory extends OMFactory {
+    
+    public String getSoapVersionURI();
+    
     /**
      * Eran Chinthaka (chinthaka@apache.org)
      */

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/builder/StAXSOAPModelBuilder.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/builder/StAXSOAPModelBuilder.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/builder/StAXSOAPModelBuilder.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/builder/StAXSOAPModelBuilder.java Sun Jan 29 19:06:52 2006
@@ -134,7 +134,7 @@
         parseHeaders();
     }
 
-    private void identifySOAPVersion(String soapVersionURIFromTransport) {
+    protected void identifySOAPVersion(String soapVersionURIFromTransport) {
 
         SOAPEnvelope soapEnvelope = getSOAPEnvelope();
         if (soapEnvelope == null) {
@@ -164,7 +164,7 @@
         }
     }
 
-    private void parseHeaders() {
+    protected void parseHeaders() {
         // by the time execution comes here the nullity of SOAPEnvelope has been cheched in the
         // identifySOAPVersion() method. So not checking getSOAPEnvelope() == null here
         SOAPHeader soapHeader = getSOAPEnvelope().getHeader();

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/factory/SOAPLinkedListImplFactory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/factory/SOAPLinkedListImplFactory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/factory/SOAPLinkedListImplFactory.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/factory/SOAPLinkedListImplFactory.java Sun Jan 29 19:06:52 2006
@@ -39,10 +39,15 @@
 import org.apache.axis2.soap.impl.llom.SOAPMessageImpl;
 
 public class SOAPLinkedListImplFactory extends OMLinkedListImplFactory implements SOAPFactory {
+    public String getSoapVersionURI() {
+        throw new UnsupportedOperationException();
+    }
+
     public SOAPMessage createSOAPMessage(OMXMLParserWrapper builder) {
         return new SOAPMessageImpl(builder);
     }
 
+    
     public SOAPMessage createSOAPMessage(SOAPEnvelope envelope, OMXMLParserWrapper parserWrapper) {
         return new SOAPMessageImpl(envelope, parserWrapper);
     }

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap11/SOAP11Factory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap11/SOAP11Factory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap11/SOAP11Factory.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap11/SOAP11Factory.java Sun Jan 29 19:06:52 2006
@@ -42,6 +42,10 @@
      * Eran Chinthaka (chinthaka@apache.org)
      */
 
+    public String getSoapVersionURI() {
+        return SOAP11Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+    }
+
     public SOAPEnvelope createSOAPEnvelope() {
         return new SOAPEnvelopeImpl(
                 new OMNamespaceImpl(

Modified: webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap12/SOAP12Factory.java
URL: http://svn.apache.org/viewcvs/webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap12/SOAP12Factory.java?rev=373418&r1=373417&r2=373418&view=diff
==============================================================================
--- webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap12/SOAP12Factory.java (original)
+++ webservices/axis2/trunk/java/modules/xml/src/org/apache/axis2/soap/impl/llom/soap12/SOAP12Factory.java Sun Jan 29 19:06:52 2006
@@ -42,6 +42,10 @@
      * Eran Chinthaka (chinthaka@apache.org)
      */
 
+    public String getSoapVersionURI() {
+        return SOAP12Constants.SOAP_ENVELOPE_NAMESPACE_URI;
+    }
+
     public SOAPEnvelope createSOAPEnvelope() {
         return new SOAPEnvelopeImpl(
                 new OMNamespaceImpl(