Author: rfeng
Date: Thu Oct 19 15:55:40 2006
New Revision: 465919

URL: http://svn.apache.org/viewvc?view=rev&rev=465919
Log:
Fix several issues for TUSCANY-874

Modified:
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
    
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
    
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
    
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/impl/DataBindingInteceptor.java
 Thu Oct 19 15:55:40 2006
@@ -73,7 +73,8 @@
         // FIXME: How to deal with faults?
         if (resultMsg.isFault()) {
             // We need to figure out what fault type it is and then transform 
it back the source fault type
-            throw new InvocationRuntimeException((Throwable) result);
+            // throw new InvocationRuntimeException((Throwable) result);
+            return resultMsg;
         } else if (result != null) {
             // FIXME: Should we fix the Operation model so that getOutputType 
returns DataType<DataType<T>>?
             DataType<DataType> targetType =

Modified: 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
 (original)
+++ 
incubator/tuscany/java/sca/kernel/core/src/main/java/org/apache/tuscany/core/databinding/xml/DOMXMLStreamReader.java
 Thu Oct 19 15:55:40 2006
@@ -1221,7 +1221,12 @@
             Attr attr = (Attr) nodeMap.item(i);
             if 
(XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(attr.getNamespaceURI())) {
                 // Skip xmlns:xxx
-                registerNamespace(attr.getLocalName(), attr.getValue());
+                if (!attr.getName().equals(attr.getLocalName())) {
+                    // Skip xmlns="..."
+                    registerNamespace(attr.getLocalName(), attr.getValue());
+                } else {
+                    registerNamespace(XMLConstants.DEFAULT_NS_PREFIX, 
attr.getValue());
+                }
                 continue;
             }
             QName attrName = new QName(attr.getNamespaceURI(), 
attr.getLocalName());

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-axiom/src/test/java/org/apache/tuscany/databinding/axiom/OMElementTestCase.java
 Thu Oct 19 15:55:40 2006
@@ -51,6 +51,19 @@
         Assert.assertNotNull(xml.indexOf("<ipo:comment>") != -1);
     }
 
+    public final void testStringTransform2() {
+        String str =
+            "<p0:firstName xmlns:xml=\"http://www.w3.org/XML/1998/namespace\"; 
" 
+            + "xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"; "
+            + "xmlns:p0=\"http://helloworld\";>Robert</p0:firstName>";
+        String2OMElement t1 = new String2OMElement();
+        OMElement element = t1.transform(str, null);
+        OMElement2String t2 = new OMElement2String();
+        String xml = t2.transform(element, null);
+        Assert.assertNotNull(xml);
+        Assert.assertNotNull(xml.indexOf("<ipo:comment>") != -1);
+    }    
+
     public final void testStAXTransform() {
         String2OMElement t1 = new String2OMElement();
         OMElement element = t1.transform(IPO_XML, null);

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXB2Node.java
 Thu Oct 19 15:55:40 2006
@@ -37,14 +37,15 @@
     public Node transform(Object source, TransformationContext tContext) {
         if (source == null) {
             return null;
-        }    
+        }
         try {
             JAXBContext context = 
JAXBContextHelper.createJAXBContext(tContext, true);
             Marshaller marshaller = context.createMarshaller();
             // FIXME: The default Marshaller doesn't support
             // marshaller.getNode()
             Document document = DOMHelper.newDocument();
-            marshaller.marshal(source, document);
+            
marshaller.marshal(JAXBContextHelper.createJAXBElement(tContext.getSourceDataType(),
 source),
+                               document);
             return document;
         } catch (Exception e) {
             throw new TransformationException(e);

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java
 Thu Oct 19 15:55:40 2006
@@ -21,7 +21,10 @@
 import java.lang.reflect.Type;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
 import javax.xml.bind.JAXBException;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.namespace.QName;
 
 import org.apache.tuscany.spi.databinding.TransformationContext;
 import org.apache.tuscany.spi.databinding.TransformationException;
@@ -29,6 +32,7 @@
 import org.apache.tuscany.spi.model.Operation;
 
 public class JAXBContextHelper {
+    private static final QName JAXB_ELEMENT = new QName("http://jaxb";, 
"element");
     // TODO: Do we need to set them for source and target?
     public static final String JAXB_CLASSES = "jaxb.classes";
 
@@ -72,6 +76,35 @@
             throw new TransformationException("JAXB context is not set for the 
transformation.");
         }
         return context;
+    }
+
+    @SuppressWarnings("unchecked")
+    public static JAXBElement createJAXBElement(DataType dataType, Object 
value) {
+        if (value instanceof JAXBElement) {
+            return (JAXBElement)value;
+        } else {
+            Object logical = dataType.getLogical();
+            if (!(logical instanceof QName)) {
+                logical = JAXB_ELEMENT;
+            }
+            return new JAXBElement((QName)logical, 
(Class)dataType.getPhysical(), value);
+        }
+    }
+
+    @SuppressWarnings("unchecked")
+    public static Object createReturnValue(DataType dataType, Object value) {
+        Class<?> cls = (Class)dataType.getPhysical();
+        XmlRootElement element = cls.getAnnotation(XmlRootElement.class);
+        if (element == null) {
+            if (value instanceof JAXBElement) {
+                return ((JAXBElement)value).getValue();
+            } else {
+                return value;
+            }
+        } else {
+            QName root = new QName(element.namespace(), element.name());
+            return new JAXBElement(root, (Class)dataType.getPhysical(), value);
+        }
     }
 
 }

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Node2JAXB.java
 Thu Oct 19 15:55:40 2006
@@ -42,7 +42,8 @@
         try {
             JAXBContext jaxbContext = 
JAXBContextHelper.createJAXBContext(context, false);
             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-            return unmarshaller.unmarshal(source);
+            Object result = unmarshaller.unmarshal(source);
+            return 
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
         } catch (Exception e) {
             throw new TransformationException(e);
         }

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/Reader2JAXB.java
 Thu Oct 19 15:55:40 2006
@@ -43,7 +43,8 @@
             JAXBContext jaxbContext = 
JAXBContextHelper.createJAXBContext(context, false);
             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
             StreamSource streamSource = new StreamSource(source);
-            return unmarshaller.unmarshal(streamSource);
+            Object result = unmarshaller.unmarshal(streamSource);
+            return 
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
         } catch (Exception e) {
             throw new TransformationException(e);
         }

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/main/java/org/apache/tuscany/databinding/jaxb/XMLStreamReader2JAXB.java
 Thu Oct 19 15:55:40 2006
@@ -19,6 +19,7 @@
 package org.apache.tuscany.databinding.jaxb;
 
 import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
 import javax.xml.bind.Unmarshaller;
 import javax.xml.stream.XMLStreamReader;
 
@@ -44,7 +45,8 @@
         try {
             JAXBContext jaxbContext = 
JAXBContextHelper.createJAXBContext(context, false);
             Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
-            return unmarshaller.unmarshal(source);
+            Object result = unmarshaller.unmarshal(source);
+            return 
JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
         } catch (Exception e) {
             throw new TransformationException(e);
         }

Modified: 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
URL: 
http://svn.apache.org/viewvc/incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java?view=diff&rev=465919&r1=465918&r2=465919
==============================================================================
--- 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
 (original)
+++ 
incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
 Thu Oct 19 15:55:40 2006
@@ -24,6 +24,8 @@
 
 import java.io.StringReader;
 
+import javax.xml.namespace.QName;
+
 import junit.framework.Assert;
 import junit.framework.TestCase;
 
@@ -31,6 +33,7 @@
 import org.apache.tuscany.spi.model.DataType;
 import org.w3c.dom.Node;
 
+import com.example.ipo.jaxb.ObjectFactory;
 import com.example.ipo.jaxb.PurchaseOrderType;
 
 public class JAXBTestCase extends TestCase {
@@ -103,7 +106,8 @@
     public void testTransform2() throws Exception {
         Reader2JAXB t0 = new Reader2JAXB();
 
-        DataType targetDataType = new DataType<Class>(PurchaseOrderType.class, 
null);
+        QName root = new QName("http://www.example.com/IPO";, "purchaseOrder");
+        DataType targetDataType = new DataType<QName>(PurchaseOrderType.class, 
root);
         // targetDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, 
contextPath);
 
         TransformationContext tContext = 
createMock(TransformationContext.class);
@@ -112,7 +116,7 @@
 
         Object object1 = t0.transform(new StringReader(IPO_XML), tContext);
 
-        DataType sourceDataType = new DataType<Class>(PurchaseOrderType.class, 
null);
+        DataType sourceDataType = new DataType<QName>(PurchaseOrderType.class, 
root);
         // sourceDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, 
contextPath);
 
         TransformationContext tContext1 = 
createMock(TransformationContext.class);
@@ -129,6 +133,24 @@
         Assert.assertNotNull(object2);
 
     }    
+
+    public void testTransform3() throws Exception {
+
+        DataType sourceDataType = new DataType<Class>(PurchaseOrderType.class, 
null);
+        sourceDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, 
contextPath);
+
+        TransformationContext tContext1 = 
createMock(TransformationContext.class);
+        
expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes();
+        replay(tContext1);
+
+        JAXB2Node t1 = new JAXB2Node();
+        PurchaseOrderType po = new ObjectFactory().createPurchaseOrderType();
+        Node node = t1.transform(po, tContext1);
+
+        Assert.assertNotNull(node);
+
+    }
+    
     protected void tearDown() throws Exception {
         super.tearDown();
     }



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

Reply via email to