Author: ips
Date: Mon Feb 28 16:17:55 2005
New Revision: 155720

URL: http://svn.apache.org/viewcvs?view=rev&rev=155720
Log:
fixed insidious XmlBeansResourceProperty add/remove bug

Modified:
    
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/impl/XmlBeansResourceProperty.java
    
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/query/xpath/impl/XmlBeansXPathExpressionEvaluator.java
    incubator/apollo/trunk/src/java/org/apache/ws/util/XmlBeanUtils.java
    
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/AbstractResourcePropertiesTestCase.java
    
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/impl/XmlBeansResourcePropertyTestCase.java

Modified: 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/impl/XmlBeansResourceProperty.java
URL: 
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/impl/XmlBeansResourceProperty.java?view=diff&r1=155719&r2=155720
==============================================================================
--- 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/impl/XmlBeansResourceProperty.java
 (original)
+++ 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/impl/XmlBeansResourceProperty.java
 Mon Feb 28 16:17:55 2005
@@ -123,9 +123,9 @@
     {
         XmlObject propXBean = toPropXBean( propElem );
         trimValue( propXBean );
+        propXBean = XmlBeanUtils.addChildElement( m_propSet.toXmlObject(),
+                    propXBean );
         load( propXBean );
-        XmlBeanUtils.addChildElement( m_propSet.toXmlObject(),
-                propXBean );
     }
 
     /**

Modified: 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/query/xpath/impl/XmlBeansXPathExpressionEvaluator.java
URL: 
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/query/xpath/impl/XmlBeansXPathExpressionEvaluator.java?view=diff&r1=155719&r2=155720
==============================================================================
--- 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/query/xpath/impl/XmlBeansXPathExpressionEvaluator.java
 (original)
+++ 
incubator/apollo/trunk/src/java/org/apache/ws/resource/properties/query/xpath/impl/XmlBeansXPathExpressionEvaluator.java
 Mon Feb 28 16:17:55 2005
@@ -32,16 +32,14 @@
 import org.apache.ws.util.XmlBeanUtils;
 import org.apache.ws.util.i18n.Messages;
 import org.apache.xmlbeans.XmlObject;
-import org.w3c.dom.Document;
-import org.w3c.dom.Element;
 
 import javax.xml.rpc.JAXRPCException;
 import java.net.URI;
 
 /**
- * LOG-DONE
- * Evaluator supporting XPath queries using Xalan-J XPathAPI. The 
implementation creates resource property document on
- * the fly and runs the query against it.
+ * XPath expression evaluator that leverages the XMLBeans [EMAIL PROTECTED] 
XmlObject#selectPath(String)} API.
+ *
+ * @author Ian P. Springer
  */
 public class XmlBeansXPathExpressionEvaluator
    extends AbstractXPathExpressionEvaluator
@@ -121,11 +119,10 @@
                                     cce ));
       }
       XmlObject propsDocXBean = XmlBeanUtils.getRootElement( 
xBeanPropSet.toXmlObject(  ) );
-      Element nsContextElem = xpathExpr.getNamespaceContext(  );
-      if ( nsContextElem == null )
-      {
-         nsContextElem = ( (Document) propsDocXBean.newDomNode(  ) 
).getDocumentElement(  );
-      }
+
+      // NOTE: the expression's namespace context is currently not used by 
this evaluator,
+      //       since XMLBeans v1 does not support specifying a namespace 
context when calling
+      //       selectPath()
 
       try
       {

Modified: incubator/apollo/trunk/src/java/org/apache/ws/util/XmlBeanUtils.java
URL: 
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/java/org/apache/ws/util/XmlBeanUtils.java?view=diff&r1=155719&r2=155720
==============================================================================
--- incubator/apollo/trunk/src/java/org/apache/ws/util/XmlBeanUtils.java 
(original)
+++ incubator/apollo/trunk/src/java/org/apache/ws/util/XmlBeanUtils.java Mon 
Feb 28 16:17:55 2005
@@ -296,13 +296,14 @@
     }
 
     /**
-     * TODO
+     * Adds a copy of the specified XmlBean as the last child element of the
+     * specified parent XmlBean.
      *
      * @param parentXBean
-     * @param childXBean
+     * @param xBean
      */
-    public static void addChildElement( XmlObject parentXBean,
-                                        XmlObject childXBean )
+    public static XmlObject addChildElement( XmlObject parentXBean,
+                                             XmlObject xBean )
     {
         parentXBean = getRootElement( parentXBean );
         XmlCursor xCursor = parentXBean.newCursor();
@@ -311,21 +312,24 @@
             xCursor.toEndToken();
         }
         xCursor.toNextToken();
-        childXBean = getRootElement( childXBean );
-        xCursor.insertElement( getName( childXBean ) );
+        xBean = getRootElement( xBean );
+        XmlCursor yCursor = xBean.newCursor();
+        yCursor.copyXml( xCursor );
         xCursor.toPrevSibling();
-        xCursor.getObject().set( childXBean );
+        XmlObject childXBean = xCursor.getObject();
         xCursor.dispose();
+        yCursor.dispose();
+        return childXBean;
     }
 
     /**
-     * Adds a child element to the specified XmlBean with the give name.
+     * Adds an XmlBean with the specified name as the last of the specified 
parent XmlBean.
      *
      * @param parentXBean
-     * @param childName
+     * @param name
      */
     public static XmlObject addChildElement( XmlObject parentXBean,
-                                             QName childName )
+                                             QName name )
     {
         parentXBean = getRootElement( parentXBean );
         XmlCursor xCursor = parentXBean.newCursor();
@@ -334,7 +338,7 @@
             xCursor.toEndToken();
         }
         xCursor.toNextToken();
-        xCursor.insertElement( childName );
+        xCursor.insertElement( name );
         xCursor.toPrevSibling();
         XmlObject childXBean = xCursor.getObject();
         xCursor.dispose();

Modified: 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/AbstractResourcePropertiesTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/AbstractResourcePropertiesTestCase.java?view=diff&r1=155719&r2=155720
==============================================================================
--- 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/AbstractResourcePropertiesTestCase.java
 (original)
+++ 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/AbstractResourcePropertiesTestCase.java
 Mon Feb 28 16:17:55 2005
@@ -52,7 +52,7 @@
    protected static final File SRC_DIR = new File( BASE_TMP_DIR, 
"generated_src" );
    protected static final File CLASSES_DIR = new File( BASE_TMP_DIR, 
"generated_classes" );
 
-   protected ResourcePropertySet m_resourcePropSet;
+   protected XmlBeansResourcePropertySet m_resourcePropSet;
    protected SushiResourceContext m_resourceContext;
 
    static

Modified: 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/impl/XmlBeansResourcePropertyTestCase.java
URL: 
http://svn.apache.org/viewcvs/incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/impl/XmlBeansResourcePropertyTestCase.java?view=diff&r1=155719&r2=155720
==============================================================================
--- 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/impl/XmlBeansResourcePropertyTestCase.java
 (original)
+++ 
incubator/apollo/trunk/src/test/org/apache/ws/resource/properties/impl/XmlBeansResourcePropertyTestCase.java
 Mon Feb 28 16:17:55 2005
@@ -153,7 +153,27 @@
       ResourceProperty prop = m_resourcePropSet.get( 
SushiPropertyQNames.HAMACHI );
       prop.remove( prop.get( 0 ) );
       assertTrue( prop.isEmpty() );
+      assertEquals( 0, m_resourcePropSet.toXmlObject().selectPath( 
"//*[local-name()='Hamachi';]" ).length );
    }
+
+    /**
+     * Test for XmlBeansResourceProperty#remove.
+     */
+    public void testRemoveAddedElement()
+          throws Exception
+    {
+        ResourceProperty prop = m_resourcePropSet.get( 
SushiPropertyQNames.HAMACHI );
+        prop.clear();
+        XmlObject hamachiDoc = XmlObject.Factory.parse( "<Hamachi 
xmlns=\"http://ws.apache.org/resource/properties/test/sushi\";>\n" +
+                                         "  <Flavor>disgusting</Flavor>\n" +
+                                         "</Hamachi>" );
+        prop.add( hamachiDoc );
+        assertEquals( 1, prop.size() );
+        assertEquals( 1, m_resourcePropSet.toXmlObject().selectPath( 
"//*[local-name()='Hamachi';]" ).length );
+        prop.remove( prop.get( 0 ) );
+        assertTrue( prop.isEmpty() );
+        assertEquals( 0, m_resourcePropSet.toXmlObject().selectPath( 
"//*[local-name()='Hamachi';]" ).length );
+    }
 
    /**
     * Test for XmlBeansResourceProperty#set.



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

Reply via email to