You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tuscany.apache.org by rf...@apache.org on 2006/10/18 17:59:33 UTC

svn commit: r465280 - in /incubator/tuscany/java/sca/services/databinding/databinding-jaxb/src: main/java/org/apache/tuscany/databinding/jaxb/JAXBContextHelper.java test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java

Author: rfeng
Date: Wed Oct 18 08:59:31 2006
New Revision: 465280

URL: http://svn.apache.org/viewvc?view=rev&rev=465280
Log:
Detect contextPath from physical type

Modified:
    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/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java

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=465280&r1=465279&r2=465280
==============================================================================
--- 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 Wed Oct 18 08:59:31 2006
@@ -18,6 +18,8 @@
  */
 package org.apache.tuscany.databinding.jaxb;
 
+import java.lang.reflect.Type;
+
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBException;
 
@@ -34,23 +36,36 @@
     private JAXBContextHelper() {
     }
 
-    public static JAXBContext createJAXBContext(TransformationContext tContext, boolean source) throws JAXBException {
+    public static JAXBContext createJAXBContext(TransformationContext tContext, boolean source)
+        throws JAXBException {
         if (tContext == null)
             throw new TransformationException("JAXB context is not set for the transformation.");
 
         // FIXME: We should check the context path or classes
         // FIXME: What should we do if JAXB is an intermediate node?
         DataType<?> bindingContext = source ? tContext.getSourceDataType() : tContext.getTargetDataType();
-        String contextPath = (String) bindingContext.getMetadata(JAXB_CONTEXT_PATH);
+        String contextPath = (String)bindingContext.getMetadata(JAXB_CONTEXT_PATH);
         JAXBContext context = null;
-        if (contextPath != null)
+        if (contextPath != null) {
             context = JAXBContext.newInstance(contextPath);
-        else {
-            Class[] classes = (Class[]) bindingContext.getMetadata(JAXB_CLASSES);
-            context = JAXBContext.newInstance(classes);
+        } else {
+            Class[] classes = (Class[])bindingContext.getMetadata(JAXB_CLASSES);
+            if (classes != null) {
+                context = JAXBContext.newInstance(classes);
+            } else {
+                Type type = bindingContext.getPhysical();
+                if (type instanceof Class) {
+                    Class cls = (Class)type;
+                    if (cls.getPackage() != null) {
+                        contextPath = cls.getPackage().getName();
+                        context = JAXBContext.newInstance(contextPath);
+                    }
+                }
+            }
         }
-        if (context == null)
+        if (context == null) {
             throw new TransformationException("JAXB context is not set for the transformation.");
+        }
         return context;
     }
 

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=465280&r1=465279&r2=465280
==============================================================================
--- 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 Wed Oct 18 08:59:31 2006
@@ -31,6 +31,8 @@
 import org.apache.tuscany.spi.model.DataType;
 import org.w3c.dom.Node;
 
+import com.example.ipo.jaxb.PurchaseOrderType;
+
 public class JAXBTestCase extends TestCase {
     private static final String IPO_XML =
         "<?xml version=\"1.0\"?>" + "<ipo:purchaseOrder"
@@ -98,6 +100,35 @@
 
     }
 
+    public void testTransform2() throws Exception {
+        Reader2JAXB t0 = new Reader2JAXB();
+
+        DataType targetDataType = new DataType<Class>(PurchaseOrderType.class, null);
+        // targetDataType.setMetadata(JAXBContextHelper.JAXB_CONTEXT_PATH, contextPath);
+
+        TransformationContext tContext = createMock(TransformationContext.class);
+        expect(tContext.getTargetDataType()).andReturn(targetDataType).anyTimes();
+        replay(tContext);
+
+        Object object1 = t0.transform(new StringReader(IPO_XML), tContext);
+
+        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();
+        Node node = t1.transform(object1, tContext1);
+
+        Assert.assertNotNull(node);
+
+        Node2JAXB t2 = new Node2JAXB();
+        Object object2 = t2.transform(node, tContext);
+        Assert.assertNotNull(object2);
+
+    }    
     protected void tearDown() throws Exception {
         super.tearDown();
     }



---------------------------------------------------------------------
To unsubscribe, e-mail: tuscany-commits-unsubscribe@ws.apache.org
For additional commands, e-mail: tuscany-commits-help@ws.apache.org