You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by bi...@apache.org on 2007/12/26 05:11:57 UTC

svn commit: r606836 - in /incubator/cxf/trunk: parent/ rt/databinding/aegis/ rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/ rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ rt/databinding/aegis/src/test/java/or...

Author: bimargulies
Date: Tue Dec 25 20:11:51 2007
New Revision: 606836

URL: http://svn.apache.org/viewvc?rev=606836&view=rev
Log:
Fix CXF-1333, Aegis services that accept arrays of JDOMElements.

Added:
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml   (with props)
    incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml   (with props)
Modified:
    incubator/cxf/trunk/parent/pom.xml
    incubator/cxf/trunk/rt/databinding/aegis/pom.xml
    incubator/cxf/trunk/rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/StaxBuilder.java
    incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementReader.java
    incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/integration/WrappedTest.java
    incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/services/ArrayService.java
    incubator/cxf/trunk/rt/javascript/pom.xml
    incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisService.java
    incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisServiceImpl.java
    incubator/cxf/trunk/rt/javascript/src/test/resources/org/apache/cxf/javascript/AegisTests.js

Modified: incubator/cxf/trunk/parent/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/parent/pom.xml?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/parent/pom.xml (original)
+++ incubator/cxf/trunk/parent/pom.xml Tue Dec 25 20:11:51 2007
@@ -57,6 +57,7 @@
         <activemq.version>4.1.1</activemq.version>
         <geronimo.version>1.1</geronimo.version>
         <rhino.version>1.6R7</rhino.version>
+        <jdom.version>1.0</jdom.version>
         <xmlbeans.version>2.2.0</xmlbeans.version>
 
         <spring.validation.mode>VALIDATION_AUTO</spring.validation.mode>

Modified: incubator/cxf/trunk/rt/databinding/aegis/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/pom.xml?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/pom.xml (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/pom.xml Tue Dec 25 20:11:51 2007
@@ -81,7 +81,7 @@
         <dependency>
             <groupId>jdom</groupId>
             <artifactId>jdom</artifactId>
-            <version>1.0</version>
+            <version>${jdom.version}</version>
         </dependency>
         <dependency>
             <groupId>net.java.dev.stax-utils</groupId>
@@ -154,4 +154,4 @@
             </plugin>
         </plugins>
     </build>
-</project>
\ No newline at end of file
+</project>

Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/StaxBuilder.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/StaxBuilder.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/StaxBuilder.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/generated/org/apache/cxf/aegis/util/jdom/StaxBuilder.java Tue Dec 25 20:11:51 2007
@@ -82,6 +82,7 @@
  *          2006) $
  * @author Tatu Saloranta
  * @author Bradley S. Huffman
+ * @author Benson I. Margulies, mods for CXF to allow reading a portion of a stream.
  */
 public class StaxBuilder {
 
@@ -126,6 +127,9 @@
     private XMLInputFactory xifactory;
 
     private Map additionalNamespaces;
+    // This is set to 'true' when we are reading the middle of a stream,
+    // and need to stop at the end of the element we start.
+    private boolean isReadingMidStream;
 
     /**
      * Default constructor.
@@ -173,9 +177,9 @@
     public JDOMFactory getFactory() {
         return factory;
     }
-
     /**
      * This will build a JDOM tree given a StAX stream reader.
+     * This API explicitly supports building mid-stream.
      * 
      * @param r Stream reader from which input is read.
      * @return <code>Document</code> - JDOM document object.
@@ -183,10 +187,24 @@
      *             indicate a parsing or I/O problem)
      */
     public Document build(XMLStreamReader r) throws XMLStreamException {
+        isReadingMidStream = true;
+        return buildInternal(r);
+    }
+
+    public Document build(InputStream is) throws XMLStreamException {
+        isReadingMidStream = false;
+        return buildInternal(xifactory.createXMLStreamReader(is));
+    }
+
+    public Document build(Reader reader) throws XMLStreamException {
+        isReadingMidStream = false;
+        return buildInternal(xifactory.createXMLStreamReader(reader));
+    }
+    
+    private Document buildInternal(XMLStreamReader r) throws XMLStreamException {
         /*
          * Should we do sanity checking to see that r is positioned at
-         * beginning? Not doing so will allow creating documents from sub-trees,
-         * though?
+         * beginning in the non-mid-stream case? 
          */
         JDOMFactory f = factory;
         if (f == null) {
@@ -197,14 +215,6 @@
         return doc;
     }
 
-    public Document build(InputStream is) throws XMLStreamException {
-        return build(xifactory.createXMLStreamReader(is));
-    }
-
-    public Document build(Reader reader) throws XMLStreamException {
-        return build(xifactory.createXMLStreamReader(reader));
-    }
-
     /**
      * This takes a <code>XMLStreamReader</code> and builds up a JDOM tree.
      * Recursion has been eliminated by using local stack of open elements; this
@@ -271,6 +281,8 @@
                     current = current.getParentElement();
                 }
                 noadd = true;
+                if(isReadingMidStream && current == null) 
+                    return;
                 break;
 
             case XMLStreamConstants.ENTITY_DECLARATION:

Modified: incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementReader.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementReader.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementReader.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/main/java/org/apache/cxf/aegis/xml/stax/ElementReader.java Tue Dec 25 20:11:51 2007
@@ -104,7 +104,7 @@
 
     private void extractXsiType() {
         /*
-         * We're making a conscious choice here -- garbage in == garbate out.
+         * We're making a conscious choice here -- garbage in == garbage out.
          */
         String xsiTypeQname = root.getAttributeValue(SOAPConstants.XSI_NS, "type");
         if (xsiTypeQname != null) {

Modified: incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/integration/WrappedTest.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/integration/WrappedTest.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/integration/WrappedTest.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/integration/WrappedTest.java Tue Dec 25 20:11:51 2007
@@ -33,11 +33,15 @@
  * @since Feb 21, 2004
  */
 public class WrappedTest extends AbstractAegisTest {
+    
+    private ArrayService arrayService;
+    
     @Before 
     public void setUp() throws Exception {
         super.setUp();
+        arrayService = new ArrayService();
         createService(BeanService.class, null, "BeanService", null);
-        createService(ArrayService.class, "Array", new QName("urn:Array", "Array"));
+        createService(ArrayService.class, arrayService, "Array", new QName("urn:Array", "Array"));
     }
 
     @Test
@@ -91,6 +95,41 @@
                         + "/xsd:complexType[@name=\"SimpleBean\"]/xsd:sequence/xsd:element"
                         + "[@type=\"xsd:string\"]",
                     doc);
+    }
+    
+    @Test 
+    public void testSubmitJDOMArray() throws Exception {
+        
+        org.jdom.xpath.XPath jxpathWalrus = 
+            org.jdom.xpath.XPath.newInstance("/a:anyType/iam:walrus");
+        jxpathWalrus.addNamespace("a", "urn:Array");
+        jxpathWalrus.addNamespace("iam", "uri:iam");
+        jxpathWalrus.addNamespace("linux", "uri:linux");
+        jxpathWalrus.addNamespace("planets", "uri:planets");
+
+        invoke("Array", "/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml");
+        assertEquals("before items", arrayService.getBeforeValue());
+        assertEquals(3, arrayService.getJdomArray().length);
+        org.jdom.Element e = (org.jdom.Element)
+            jxpathWalrus.selectSingleNode(arrayService.getJdomArray()[0]);
+        assertNotNull(e);
+        assertEquals("tusks", e.getText());
+        assertEquals("after items", arrayService.getAfterValue());
+    }
+    
+    @Test 
+    public void testSubmitW3CArray() throws Exception {
+        addNamespace("a", "urn:Array");
+        addNamespace("iam", "uri:iam");
+        addNamespace("linux", "uri:linux");
+        addNamespace("planets", "uri:planets");
+
+        invoke("Array", "/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml");
+        assertEquals("before items", arrayService.getBeforeValue());
+        assertEquals(3, arrayService.getW3cArray().length);
+        org.w3c.dom.Document e = arrayService.getW3cArray()[0];
+        assertValid("/a:anyType/iam:walrus", e);
+        assertEquals("after items", arrayService.getAfterValue());
     }
 
     // public void testGetArray()

Modified: incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/services/ArrayService.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/services/ArrayService.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/services/ArrayService.java (original)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/test/java/org/apache/cxf/aegis/services/ArrayService.java Tue Dec 25 20:11:51 2007
@@ -24,6 +24,12 @@
  * @author <a href="mailto:dan@envoisolutions.com">Dan Diephouse</a>
  */
 public class ArrayService {
+    
+    private org.jdom.Element[] jdomArray;
+    private org.w3c.dom.Document[] w3cArray;
+    private String beforeValue;
+    private String afterValue;
+    
     public SimpleBean[] getBeanArray() {
         SimpleBean bean = new SimpleBean();
         bean.setBleh("bleh");
@@ -31,6 +37,13 @@
 
         return new SimpleBean[] {bean};
     }
+    
+    public void resetValues() {
+        beforeValue = null;
+        afterValue = null;
+        jdomArray = null;
+        w3cArray = null;
+    }
 
     public String[] getStringArray() {
         return new String[] {"bleh", "bleh"};
@@ -42,5 +55,33 @@
 
     public boolean submitBeanArray(SimpleBean[] array) {
         return true;
+    }
+    
+    public void submitJDOMArray(String before, org.jdom.Element[] anything, String after) {
+        beforeValue = before;
+        jdomArray = anything;
+        afterValue = after;
+    }
+
+    public void submitW3CArray(String before, org.w3c.dom.Document[] anything, String after) {
+        beforeValue = before;
+        w3cArray = anything;
+        afterValue = after;
+    }
+
+    public org.jdom.Element[] getJdomArray() {
+        return jdomArray;
+    }
+
+    public org.w3c.dom.Document[] getW3cArray() {
+        return w3cArray;
+    }
+
+    public String getBeforeValue() {
+        return beforeValue;
+    }
+
+    public String getAfterValue() {
+        return afterValue;
     }
 }

Added: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml?rev=606836&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml (added)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml Tue Dec 25 20:11:51 2007
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" 
+                   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+ <soap-env:Body xmlns:jns0='urn:Array' >
+  <jns0:submitJDOMArray>
+   <jns0:before>before items</jns0:before>
+   <jns0:anything>
+       <jns0:anyType><walrus xmlns='uri:iam'>tusks</walrus></jns0:anyType>
+       <jns0:anyType><penguin xmlns='uri:linux'>emperor</penguin></jns0:anyType>
+       <jns0:anyType><moon xmlns='uri:planets'>blue</moon></jns0:anyType>
+    </jns0:anything>
+    <jns0:after>after items</jns0:after>
+    </jns0:submitJDOMArray>
+  </soap-env:Body>
+</soap-env:Envelope>

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayJDOM.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Added: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml?rev=606836&view=auto
==============================================================================
--- incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml (added)
+++ incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml Tue Dec 25 20:11:51 2007
@@ -0,0 +1,15 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<soap-env:Envelope xmlns:soap-env="http://schemas.xmlsoap.org/soap/envelope/" 
+                   xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/">
+ <soap-env:Body xmlns:jns0='urn:Array' >
+  <jns0:submitW3CArray>
+   <jns0:before>before items</jns0:before>
+   <jns0:anything>
+       <jns0:anyType><walrus xmlns='uri:iam'>tusks</walrus></jns0:anyType>
+       <jns0:anyType><penguin xmlns='uri:linux'>emperor</penguin></jns0:anyType>
+       <jns0:anyType><moon xmlns='uri:planets'>blue</moon></jns0:anyType>
+    </jns0:anything>
+    <jns0:after>after items</jns0:after>
+    </jns0:submitW3CArray>
+  </soap-env:Body>
+</soap-env:Envelope>

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Propchange: incubator/cxf/trunk/rt/databinding/aegis/src/test/resources/org/apache/cxf/aegis/integration/anyTypeArrayW3C.xml
------------------------------------------------------------------------------
    svn:mime-type = text/xml

Modified: incubator/cxf/trunk/rt/javascript/pom.xml
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/pom.xml?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/pom.xml (original)
+++ incubator/cxf/trunk/rt/javascript/pom.xml Tue Dec 25 20:11:51 2007
@@ -89,7 +89,7 @@
         <dependency>
             <groupId>jdom</groupId>
             <artifactId>jdom</artifactId>
-            <version>1.0</version>
+            <version>${jdom.version}</version>
         </dependency>
         <dependency>
             <groupId>net.java.dev.stax-utils</groupId>

Modified: incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisService.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisService.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisService.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisService.java Tue Dec 25 20:11:51 2007
@@ -23,5 +23,6 @@
 
 public interface AegisService {
     void acceptAny(String before, Collection<org.jdom.Element> anything);
+    void acceptStrings(Collection<String> someStrings);
 }
 

Modified: incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisServiceImpl.java
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisServiceImpl.java?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisServiceImpl.java (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/java/org/apache/cxf/javascript/fortest/AegisServiceImpl.java Tue Dec 25 20:11:51 2007
@@ -27,6 +27,7 @@
 public class AegisServiceImpl implements AegisService {
     private String acceptedString;
     private Collection<org.jdom.Element> acceptedCollection;
+    private Collection<String> acceptedStrings;
     
     public void reset() {
         acceptedString = null;
@@ -51,5 +52,15 @@
      */
     public String getAcceptedString() {
         return acceptedString;
+    }
+
+    public void acceptStrings(Collection<String> someStrings) {
+        acceptedStrings = someStrings;
+    }
+
+    /** * @return Returns the acceptedStrings.
+     */
+    public Collection<String> getAcceptedStrings() {
+        return acceptedStrings;
     }
 }

Modified: incubator/cxf/trunk/rt/javascript/src/test/resources/org/apache/cxf/javascript/AegisTests.js
URL: http://svn.apache.org/viewvc/incubator/cxf/trunk/rt/javascript/src/test/resources/org/apache/cxf/javascript/AegisTests.js?rev=606836&r1=606835&r2=606836&view=diff
==============================================================================
--- incubator/cxf/trunk/rt/javascript/src/test/resources/org/apache/cxf/javascript/AegisTests.js (original)
+++ incubator/cxf/trunk/rt/javascript/src/test/resources/org/apache/cxf/javascript/AegisTests.js Tue Dec 25 20:11:51 2007
@@ -50,6 +50,8 @@
 	service.url = url;
 	
 	var arrayItem = new fortest_javascript_cxf_apache_org__ArrayOfAnyType();
-	arrayItem.setAnyType(["<walrus xmlns='uri:iam'>tusks</walrus>", "<penguin xmlns='uri:linux'>emperor</penguin>"]); 
+	arrayItem.setAnyType(["<walrus xmlns='uri:iam'>tusks</walrus>",
+	                      "<penguin xmlns='uri:linux'>emperor</penguin>",
+	                      "<moon xmlns='uri:planets'>blue</moon>"]); 
 	service.acceptAny(success, error, "before items", arrayItem);
 }