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 2007/12/05 21:23:26 UTC

svn commit: r601501 [2/3] - in /incubator/tuscany/java/sca: demos/xml-bigbank/src/main/resources/wsdl/ itest/properties/src/main/java/org/apache/tuscany/sca/itest/ itest/properties/src/main/resources/ itest/ws-void-args-return/src/main/java/voidtest/ m...

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/JAXBTestCase.java Wed Dec  5 12:23:21 2007
@@ -92,6 +92,7 @@
 
         TransformationContext tContext1 = createMock(TransformationContext.class);
         expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes();
+        expect(tContext1.getTargetDataType()).andReturn(null).anyTimes();
         replay(tContext1);
 
         JAXB2Node t1 = new JAXB2Node();
@@ -123,6 +124,7 @@
 
         TransformationContext tContext1 = createMock(TransformationContext.class);
         expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes();
+        expect(tContext1.getTargetDataType()).andReturn(null).anyTimes();
         replay(tContext1);
 
         JAXB2Node t1 = new JAXB2Node();
@@ -142,6 +144,7 @@
 
         TransformationContext tContext1 = createMock(TransformationContext.class);
         expect(tContext1.getSourceDataType()).andReturn(sourceDataType).anyTimes();
+        expect(tContext1.getTargetDataType()).andReturn(null).anyTimes();
         replay(tContext1);
 
         JAXB2Node t1 = new JAXB2Node();

Modified: incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/POJOTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/POJOTestCase.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/POJOTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/POJOTestCase.java Wed Dec  5 12:23:21 2007
@@ -20,14 +20,32 @@
 
 import java.io.StringReader;
 import java.io.StringWriter;
+import java.lang.reflect.Type;
+import java.util.Collection;
+import java.util.Collections;
 
 import javax.xml.bind.JAXBContext;
 import javax.xml.bind.JAXBElement;
 import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.stream.StreamSource;
 
 import junit.framework.TestCase;
 
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.impl.TransformationContextImpl;
+import org.apache.tuscany.sca.databinding.jaxb.JAXB2XMLStreamReader;
+import org.apache.tuscany.sca.databinding.xml.XMLStreamReader2String;
+
+import com.sun.xml.bind.v2.model.annotation.RuntimeInlineAnnotationReader;
+import com.sun.xml.bind.v2.model.core.Ref;
+import com.sun.xml.bind.v2.model.impl.RuntimeModelBuilder;
+import com.sun.xml.bind.v2.model.runtime.RuntimeClassInfo;
+import com.sun.xml.bind.v2.model.runtime.RuntimePropertyInfo;
+import com.sun.xml.bind.v2.model.runtime.RuntimeTypeInfoSet;
+import com.sun.xml.bind.v2.runtime.IllegalAnnotationsException;
+import com.sun.xml.bind.v2.runtime.JAXBContextImpl;
+
 public class POJOTestCase extends TestCase {
     public void testPOJO() throws Exception {
         JAXBContext context = JAXBContext.newInstance(MyBean.class, MyInterfaceImpl.class);
@@ -50,9 +68,39 @@
         assertTrue(result instanceof JAXBElement);
         JAXBElement e2 = (JAXBElement)result;
         assertTrue(e2.getValue() instanceof MyBean);
-        MyBean newBean = (MyBean) e2.getValue();
+        MyBean newBean = (MyBean)e2.getValue();
         assertEquals(bean, newBean);
     }
+    
+    public void testXMLStreamReader() throws Exception {
+        JAXBContext context = JAXBContext.newInstance(MyBean.class, MyInterfaceImpl.class);
+
+        MyBean bean = new MyBean();
+        bean.setName("Test");
+        bean.setAge(20);
+        bean.getNotes().add("1");
+        bean.getNotes().add("2");
+        bean.getMap().put("1", 1);
+        MyInterface service = new MyInterfaceImpl();
+        service.setId("ID001");
+        bean.setService(service);
+        bean.setOtherService(service);
+        JAXBElement<Object> element = new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, bean);
+        TransformationContext tContext  = new TransformationContextImpl();
+        XMLStreamReader reader = new JAXB2XMLStreamReader().transform(element, tContext);
+
+        XMLStreamReader2String t2 = new XMLStreamReader2String();
+        String xml = t2.transform(reader, null);
+        System.out.println(xml);
+        /*
+        Object result = context.createUnmarshaller().unmarshal(reader, MyBean.class);
+        assertTrue(result instanceof JAXBElement);
+        JAXBElement e2 = (JAXBElement)result;
+        assertTrue(e2.getValue() instanceof MyBean);
+        MyBean newBean = (MyBean)e2.getValue();
+        assertEquals(bean, newBean);
+        */
+    }
 
     public void testString() throws Exception {
         JAXBContext context = JAXBContext.newInstance(String.class);
@@ -66,7 +114,7 @@
         JAXBElement e2 = (JAXBElement)result;
         assertEquals("ABC", e2.getValue());
     }
-    
+
     public void testNull() throws Exception {
         JAXBContext context = JAXBContext.newInstance(String.class);
         StringWriter writer = new StringWriter();
@@ -80,11 +128,12 @@
         JAXBElement e2 = (JAXBElement)result;
         assertNull(e2.getValue());
     }
-    
+
     public void testArray() throws Exception {
         JAXBContext context = JAXBContext.newInstance(String[].class);
         StringWriter writer = new StringWriter();
-        JAXBElement<Object> element = new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, new String[] {"ABC", "123"});
+        JAXBElement<Object> element =
+            new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, new String[] {"ABC", "123"});
         context.createMarshaller().marshal(element, writer);
         // System.out.println(writer.toString());
 
@@ -93,7 +142,7 @@
         JAXBElement e2 = (JAXBElement)result;
         assertTrue(e2.getValue() instanceof String[]);
     }
-    
+
     public void testPrimitive() throws Exception {
         JAXBContext context = JAXBContext.newInstance(int.class);
         StringWriter writer = new StringWriter();
@@ -122,4 +171,35 @@
         assertTrue(e2.getValue() instanceof Exception);
     }
     */
+
+    private static RuntimeTypeInfoSet create(Class... classes) throws Exception {
+        IllegalAnnotationsException.Builder errorListener = new IllegalAnnotationsException.Builder();
+        RuntimeInlineAnnotationReader reader = new RuntimeInlineAnnotationReader();
+        JAXBContextImpl context =
+            new JAXBContextImpl(classes, null, Collections.<Class, Class> emptyMap(), null, false, reader, false, false);
+        RuntimeModelBuilder builder =
+            new RuntimeModelBuilder(context, reader, Collections.<Class, Class> emptyMap(), null);
+        builder.setErrorHandler(errorListener);
+        for (Class c : classes)
+            builder.getTypeInfo(new Ref<Type, Class>(c));
+
+        RuntimeTypeInfoSet r = builder.link();
+        errorListener.check();
+        return r;
+    }
+
+    public void testReflection() throws Exception {
+        MyBean bean = new MyBean();
+        RuntimeTypeInfoSet model = create(MyBean.class);
+        RuntimeClassInfo clsInfo = (RuntimeClassInfo)model.getTypeInfo(MyBean.class);
+        for (RuntimePropertyInfo p : clsInfo.getProperties()) {
+            System.out.print(p.getName());
+            System.out.println(" " + p.isCollection());
+            if (p.getName().equals("notes")) {
+                Collection c = (Collection) p.getAccessor().get(bean);
+                c.add("123");
+            }
+        }
+
+    }
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/pom.xml?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/pom.xml Wed Dec  5 12:23:21 2007
@@ -41,6 +41,13 @@
         </dependency>
 
         <dependency>
+            <groupId>com.metaparadigm</groupId>
+            <artifactId>json-rpc</artifactId>
+            <version>1.0</version>
+            <scope>compile</scope>
+        </dependency>
+        
+        <dependency>
             <groupId>org.codehaus.jettison</groupId>
             <artifactId>jettison</artifactId>
             <version>1.0-RC2</version>
@@ -69,7 +76,7 @@
         <dependency>
             <groupId>junit</groupId>
             <artifactId>junit</artifactId>
-            <version>4.1</version>
+            <version>4.2</version>
         </dependency>
     </dependencies>
 

Added: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java?rev=601501&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java Wed Dec  5 12:23:21 2007
@@ -0,0 +1,82 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.json;
+
+import org.apache.tuscany.sca.databinding.PullTransformer;
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.TransformationException;
+import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
+
+import com.metaparadigm.jsonrpc.JSONSerializer;
+import com.metaparadigm.jsonrpc.SerializerState;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSON2JavaBean extends BaseTransformer<Object, Object> implements PullTransformer<Object, Object> {
+    private JSONSerializer serializer;
+
+    public JSON2JavaBean() {
+        super();
+        serializer = new JSONSerializer();
+        try {
+            serializer.registerDefaultSerializers();
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+        serializer.setMarshallClassHints(true);
+        serializer.setMarshallNullAttributes(true);
+    }
+
+    public Object transform(Object source, TransformationContext context) {
+        if (source == null) {
+            return null;
+        }
+
+        try {
+            SerializerState state = new SerializerState();
+            return serializer.unmarshall(state, context.getTargetDataType().getPhysical(), source);
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+
+    }
+
+    @Override
+    protected Class getSourceType() {
+        return Object.class;
+    }
+
+    @Override
+    protected Class getTargetType() {
+        return Object.class;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return JSONDataBinding.NAME;
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return JavaBeansDataBinding.NAME;
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2JavaBean.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2String.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2String.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2String.java Wed Dec  5 12:23:21 2007
@@ -23,17 +23,16 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
-import org.codehaus.jettison.json.JSONObject;
 
 /**
  * @version $Rev$ $Date$
  */
-public class JSON2String extends BaseTransformer<JSONObject, String> implements
-    PullTransformer<JSONObject, String> {
+public class JSON2String extends BaseTransformer<Object, String> implements
+    PullTransformer<Object, String> {
     
     @Override
     protected Class getSourceType() {
-        return JSONObject.class;
+        return Object.class;
     }
 
     @Override
@@ -41,7 +40,7 @@
         return String.class;
     }
 
-    public String transform(JSONObject source, TransformationContext context) {
+    public String transform(Object source, TransformationContext context) {
         try {
             return source.toString();
         } catch (Exception e) {
@@ -52,6 +51,10 @@
     @Override
     public int getWeight() {
         return 500;
+    }
+    @Override
+    public String getSourceDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2XMLStreamReader.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2XMLStreamReader.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2XMLStreamReader.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSON2XMLStreamReader.java Wed Dec  5 12:23:21 2007
@@ -31,12 +31,12 @@
 /**
  * @version $Rev$ $Date$
  */
-public class JSON2XMLStreamReader extends BaseTransformer<JSONObject, XMLStreamReader> implements
-    PullTransformer<JSONObject, XMLStreamReader> {
+public class JSON2XMLStreamReader extends BaseTransformer<Object, XMLStreamReader> implements
+    PullTransformer<Object, XMLStreamReader> {
     
     @Override
     protected Class getSourceType() {
-        return JSONObject.class;
+        return Object.class;
     }
 
     @Override
@@ -44,9 +44,10 @@
         return XMLStreamReader.class;
     }
 
-    public XMLStreamReader transform(JSONObject source, TransformationContext context) {
+    public XMLStreamReader transform(Object source, TransformationContext context) {
         try {
-            return new BadgerFishXMLStreamReader(source);
+            JSONObject json = JSONHelper.toJettison(source);
+            return new BadgerFishXMLStreamReader(json);
         } catch (Exception e) {
             throw new TransformationException(e);
         } 
@@ -55,6 +56,10 @@
     @Override
     public int getWeight() {
         return 500;
+    }
+    @Override
+    public String getSourceDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONDataBinding.java Wed Dec  5 12:23:21 2007
@@ -19,31 +19,51 @@
 
 package org.apache.tuscany.sca.databinding.json;
 
+import java.lang.annotation.Annotation;
+
 import javax.xml.namespace.QName;
 
 import org.apache.tuscany.sca.databinding.impl.BaseDataBinding;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.codehaus.jettison.json.JSONObject;
 
 /**
  * JAXB DataBinding
  */
 public class JSONDataBinding extends BaseDataBinding {
-    public static final String NAME = JSONObject.class.getName();
+    public static final String NAME = "JSON";
     public static final String[] ALIASES = new String[] {"json"};
 
     public static final String ROOT_NAMESPACE = "http://tuscany.apache.org/xmlns/sca/databinding/json/1.0";
     public static final QName ROOT_ELEMENT = new QName(ROOT_NAMESPACE, "root");
 
     public JSONDataBinding() {
-        super(NAME, ALIASES, JSONObject.class);
+        super(NAME, ALIASES, org.json.JSONObject.class);
+    }
+
+    public boolean introspect(DataType type, Annotation[] annotations) {
+        assert type != null;
+        Class cls = type.getPhysical();
+        if (JSONObject.class.isAssignableFrom(cls) || org.json.JSONObject.class.isAssignableFrom(cls)) {
+            type.setDataBinding(getName());
+            if (type.getLogical() == null) {
+                type.setLogical(XMLType.UNKNOWN);
+            }
+            return true;
+        }
+        return false;
     }
 
     @SuppressWarnings("unchecked")
     @Override
     public Object copy(Object arg) {
+        if (arg == null) {
+            return null;
+        }
         try {
-            JSONObject src = (JSONObject)arg;
-            return new JSONObject(src.toString());
+            Class type = arg != null ? arg.getClass() : null;
+            return JSONHelper.toJSON(arg.toString(), type);
         } catch (Exception e) {
             throw new IllegalArgumentException(e);
         }

Added: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java?rev=601501&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java Wed Dec  5 12:23:21 2007
@@ -0,0 +1,91 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.json;
+
+import java.text.ParseException;
+
+import org.codehaus.jettison.json.JSONException;
+import org.codehaus.jettison.json.JSONObject;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JSONHelper {
+    private JSONHelper() {
+
+    }
+
+    /**
+     * Convert to Jettison JSONObject
+     * @param source
+     * @return
+     */
+    public static JSONObject toJettison(Object source) {
+        JSONObject json = null;
+        if (source instanceof JSONObject) {
+            json = (JSONObject)source;
+        } else if (source instanceof org.json.JSONObject) {
+            try {
+                json = new JSONObject(((org.json.JSONObject)source).toString());
+            } catch (JSONException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+        return json;
+    }
+
+    /**
+     * Convert to org.json.JSONObject
+     * @param source
+     * @return
+     */
+    public static org.json.JSONObject toJSONOrg(Object source) {
+        org.json.JSONObject json = null;
+        if (source instanceof JSONObject) {
+            try {
+                json = new org.json.JSONObject(((JSONObject)source).toString());
+            } catch (ParseException e) {
+                throw new IllegalArgumentException(e);
+            }
+        } else if (source instanceof org.json.JSONObject) {
+            json = (org.json.JSONObject)source;
+        }
+        return json;
+    }
+
+    public static <T> T toJSON(String json, Class<T> type) {
+        if (type == JSONObject.class) {
+            try {
+                return type.cast(new JSONObject(json));
+            } catch (JSONException e) {
+                throw new IllegalArgumentException(e);
+            }
+        } else {
+            if (type == null) {
+                type = (Class<T>)org.json.JSONObject.class;
+            }
+            try {
+                return type.cast(new org.json.JSONObject(json));
+            } catch (ParseException e) {
+                throw new IllegalArgumentException(e);
+            }
+        }
+    }
+}

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JSONHelper.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSON.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSON.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSON.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSON.java Wed Dec  5 12:23:21 2007
@@ -19,82 +19,32 @@
 
 package org.apache.tuscany.sca.databinding.json;
 
-import java.beans.BeanInfo;
-import java.beans.Introspector;
-import java.beans.PropertyDescriptor;
-import java.lang.reflect.Array;
-import java.util.Arrays;
-import java.util.Collection;
-import java.util.Collections;
-import java.util.Comparator;
-
 import org.apache.tuscany.sca.databinding.PullTransformer;
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
-import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
 import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
-import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
-import org.codehaus.jettison.json.JSONArray;
-import org.codehaus.jettison.json.JSONObject;
-
-public class JavaBean2JSON extends BaseTransformer<Object, Object> implements PullTransformer<Object, Object> {
-    private final static Comparator<PropertyDescriptor> COMPARATOR = new Comparator<PropertyDescriptor>() {
-        public int compare(PropertyDescriptor o1, PropertyDescriptor o2) {
-            return o1.getName().compareTo(o2.getName());
-        }
-    };
 
-    private static final Object[] NULL = null;
-    private static final SimpleTypeMapperImpl MAPPER = new SimpleTypeMapperImpl();
+import com.metaparadigm.jsonrpc.JSONSerializer;
+import com.metaparadigm.jsonrpc.SerializerState;
 
-    public Object transform(Object source, TransformationContext context) {
+public class JavaBean2JSON extends BaseTransformer<Object, Object> implements PullTransformer<Object, Object> {
+    private JSONSerializer serializer;
+    
+    public JavaBean2JSON() {
+        serializer = new JSONSerializer();
         try {
-            return toJSON(source);
+            serializer.registerDefaultSerializers();
         } catch (Exception e) {
             throw new TransformationException(e);
         }
+        serializer.setMarshallClassHints(true);
+        serializer.setMarshallNullAttributes(true);
     }
 
-    public Object toJSON(Object source) throws Exception {
-        if (source == null) {
-            return JSONObject.NULL;
-        }
-        Class<?> type = source.getClass();
-        if (isSimpleType(type)) {
-            return source;
-        } else if (type.isArray()) {
-            JSONArray array = new JSONArray();
-            int i1 = Array.getLength(source);
-            for (int j = 0; j < i1; j++) {
-                Object o = Array.get(source, j);
-                array.put(toJSON(o));
-            }
-            return array;
-        } else if (Collection.class.isAssignableFrom(type)) {
-            Collection c = (Collection)source;
-            JSONArray array = new JSONArray();
-            for (Object element : c) {
-                array.put(toJSON(element));
-            }
-            return array;
-        }
-        JSONObject json = new JSONObject();
-        BeanInfo beanInfo = Introspector.getBeanInfo(type);
-        PropertyDescriptor[] propDescs = beanInfo.getPropertyDescriptors();
-        Collections.sort(Arrays.asList(propDescs), COMPARATOR);
-
-        for (int i = 0; i < propDescs.length; i++) {
-            PropertyDescriptor propDesc = propDescs[i];
-            Class<?> pType = propDesc.getPropertyType();
-            if ("class".equals(propDesc.getName())) {
-                continue;
-            }
-            Object pValue = propDesc.getReadMethod().invoke(source, NULL);
-            json.put(propDesc.getName(), toJSON(pValue));
-        }
-        return json;
-
+    @Override
+    public String getSourceDataBinding() {
+        return JavaBeansDataBinding.NAME;
     }
 
     @Override
@@ -103,37 +53,30 @@
     }
 
     @Override
-    protected Class getTargetType() {
-        return Object.class;
-    }
-
-    public JavaBean2JSON() {
+    public String getTargetDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
-    private static boolean isSimpleType(Class<?> javaType) {
-        return SimpleTypeMapperImpl.getXMLType(javaType) != null;
+    @Override
+    protected Class getTargetType() {
+        return Object.class;
     }
 
-    private static String getStringValue(Object o) {
-        if (o == null) {
-            return null;
-        }
-        TypeInfo info = SimpleTypeMapperImpl.getXMLType(o.getClass());
-        if (info != null) {
-            return MAPPER.toXMLLiteral(info.getQName(), o, null);
-        } else {
-            return String.valueOf(o);
+    public Object toJSON(Object source) throws Exception {
+        if (source == null) {
+            return org.json.JSONObject.NULL;
         }
-    }
 
-    @Override
-    public String getSourceDataBinding() {
-        return JavaBeansDataBinding.NAME;
+        SerializerState state = new SerializerState();
+        return serializer.marshall(state, source);
     }
 
-    @Override
-    public String getTargetDataBinding() {
-        return JSONDataBinding.NAME;
+    public Object transform(Object source, TransformationContext context) {
+        try {
+            return toJSON(source);
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
     }
 
 }

Added: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java?rev=601501&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java Wed Dec  5 12:23:21 2007
@@ -0,0 +1,139 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.    
+ */
+
+package org.apache.tuscany.sca.databinding.json;
+
+import java.beans.BeanInfo;
+import java.beans.Introspector;
+import java.beans.PropertyDescriptor;
+import java.lang.reflect.Array;
+import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
+import java.util.Comparator;
+
+import org.apache.tuscany.sca.databinding.PullTransformer;
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.TransformationException;
+import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.apache.tuscany.sca.databinding.impl.SimpleTypeMapperImpl;
+import org.apache.tuscany.sca.databinding.javabeans.JavaBeansDataBinding;
+import org.apache.tuscany.sca.interfacedef.util.TypeInfo;
+import org.codehaus.jettison.json.JSONArray;
+import org.codehaus.jettison.json.JSONObject;
+
+public class JavaBean2JSONObject extends BaseTransformer<Object, Object> implements PullTransformer<Object, Object> {
+    private final static Comparator<PropertyDescriptor> COMPARATOR = new Comparator<PropertyDescriptor>() {
+        public int compare(PropertyDescriptor o1, PropertyDescriptor o2) {
+            return o1.getName().compareTo(o2.getName());
+        }
+    };
+
+    private static final SimpleTypeMapperImpl MAPPER = new SimpleTypeMapperImpl();
+    private static final Object[] NULL = null;
+
+    private static String getStringValue(Object o) {
+        if (o == null) {
+            return null;
+        }
+        TypeInfo info = SimpleTypeMapperImpl.getXMLType(o.getClass());
+        if (info != null) {
+            return MAPPER.toXMLLiteral(info.getQName(), o, null);
+        } else {
+            return String.valueOf(o);
+        }
+    }
+
+    private static boolean isSimpleType(Class<?> javaType) {
+        return SimpleTypeMapperImpl.getXMLType(javaType) != null;
+    }
+
+    public JavaBean2JSONObject() {
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return JavaBeansDataBinding.NAME;
+    }
+
+    @Override
+    protected Class getSourceType() {
+        return Object.class;
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return JSONDataBinding.NAME;
+    }
+
+    @Override
+    protected Class getTargetType() {
+        return Object.class;
+    }
+
+    public Object toJSON(Object source) throws Exception {
+        if (source == null) {
+            return JSONObject.NULL;
+        }
+        Class<?> type = source.getClass();
+        if (isSimpleType(type)) {
+            return source;
+        } else if (type.isArray()) {
+            JSONArray array = new JSONArray();
+            int i1 = Array.getLength(source);
+            for (int j = 0; j < i1; j++) {
+                Object o = Array.get(source, j);
+                array.put(toJSON(o));
+            }
+            return array;
+        } else if (Collection.class.isAssignableFrom(type)) {
+            Collection c = (Collection)source;
+            JSONArray array = new JSONArray();
+            for (Object element : c) {
+                array.put(toJSON(element));
+            }
+            return array;
+        }
+        JSONObject json = new JSONObject();
+        BeanInfo beanInfo = Introspector.getBeanInfo(type);
+        PropertyDescriptor[] propDescs = beanInfo.getPropertyDescriptors();
+        Collections.sort(Arrays.asList(propDescs), COMPARATOR);
+
+        for (int i = 0; i < propDescs.length; i++) {
+            PropertyDescriptor propDesc = propDescs[i];
+            Class<?> pType = propDesc.getPropertyType();
+            if ("class".equals(propDesc.getName())) {
+                continue;
+            }
+            Object pValue = propDesc.getReadMethod().invoke(source, NULL);
+            json.put(propDesc.getName(), toJSON(pValue));
+        }
+        return json;
+
+    }
+
+    public Object transform(Object source, TransformationContext context) {
+        try {
+            return toJSON(source);
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+    }
+
+}

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONObject.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/String2JSON.java Wed Dec  5 12:23:21 2007
@@ -23,14 +23,12 @@
 import org.apache.tuscany.sca.databinding.TransformationContext;
 import org.apache.tuscany.sca.databinding.TransformationException;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
-import org.codehaus.jettison.json.JSONObject;
 
 /**
  * @version $Rev$ $Date$
  */
-public class String2JSON extends BaseTransformer<String, JSONObject> implements
-    PullTransformer<String, JSONObject> {
-    
+public class String2JSON extends BaseTransformer<String, Object> implements PullTransformer<String, Object> {
+
     @Override
     protected Class getSourceType() {
         return String.class;
@@ -38,20 +36,29 @@
 
     @Override
     protected Class getTargetType() {
-        return JSONObject.class;
+        return Object.class;
     }
 
-    public JSONObject transform(String source, TransformationContext context) {
+    public Object transform(String source, TransformationContext context) {
         try {
-            return new JSONObject(source);
+            Class type = null;
+            if (context != null && context.getTargetDataType() != null) {
+                type = context.getTargetDataType().getPhysical();
+            }
+            return JSONHelper.toJSON(source, type);
         } catch (Exception e) {
             throw new TransformationException(e);
-        } 
+        }
     }
 
     @Override
     public int getWeight() {
         return 500;
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/XMLStreamReader2JSON.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/XMLStreamReader2JSON.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/XMLStreamReader2JSON.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/XMLStreamReader2JSON.java Wed Dec  5 12:23:21 2007
@@ -30,13 +30,12 @@
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
 import org.apache.tuscany.sca.databinding.xml.XMLStreamSerializer;
 import org.codehaus.jettison.badgerfish.BadgerFishXMLStreamWriter;
-import org.codehaus.jettison.json.JSONObject;
 
 /**
  * @version $Rev$ $Date$
  */
-public class XMLStreamReader2JSON extends BaseTransformer<XMLStreamReader, JSONObject> implements
-    PullTransformer<XMLStreamReader, JSONObject> {
+public class XMLStreamReader2JSON extends BaseTransformer<XMLStreamReader, Object> implements
+    PullTransformer<XMLStreamReader, Object> {
     
     @Override
     protected Class getSourceType() {
@@ -45,17 +44,21 @@
 
     @Override
     protected Class getTargetType() {
-        return JSONObject.class;
+        return Object.class;
     }
 
-    public JSONObject transform(XMLStreamReader source, TransformationContext context) {
+    public Object transform(XMLStreamReader source, TransformationContext context) {
         try {
             StringWriter writer = new StringWriter();
             XMLStreamWriter jsonWriter = new BadgerFishXMLStreamWriter(writer);
             XMLStreamSerializer serializer = new XMLStreamSerializer();
             serializer.serialize(source, jsonWriter);
             source.close();
-            return new JSONObject(writer.toString());
+            Class type = null;
+            if (context != null && context.getTargetDataType() != null) {
+                type = context.getTargetDataType().getPhysical();
+            }
+            return JSONHelper.toJSON(writer.toString(), type);
         } catch (Exception e) {
             throw new TransformationException(e);
         } 
@@ -64,6 +67,11 @@
     @Override
     public int getWeight() {
         return 500;
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/axiom/JSON2OMElement.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/axiom/JSON2OMElement.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/axiom/JSON2OMElement.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/java/org/apache/tuscany/sca/databinding/json/axiom/JSON2OMElement.java Wed Dec  5 12:23:21 2007
@@ -19,6 +19,7 @@
 
 package org.apache.tuscany.sca.databinding.json.axiom;
 
+
 import org.apache.axiom.om.OMAbstractFactory;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
@@ -29,6 +30,7 @@
 import org.apache.tuscany.sca.databinding.Transformer;
 import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
 import org.apache.tuscany.sca.databinding.json.JSONDataBinding;
+import org.apache.tuscany.sca.databinding.json.JSONHelper;
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.codehaus.jettison.json.JSONObject;
@@ -38,14 +40,13 @@
  * @version $Rev$ $Date$
  */
 @Service(Transformer.class)
-public class JSON2OMElement extends BaseTransformer<JSONObject, OMElement> implements
-    PullTransformer<JSONObject, OMElement> {
+public class JSON2OMElement extends BaseTransformer<Object, OMElement> implements PullTransformer<Object, OMElement> {
 
     private OMFactory factory = OMAbstractFactory.getOMFactory();
 
     @Override
     protected Class getSourceType() {
-        return JSONObject.class;
+        return Object.class;
     }
 
     @Override
@@ -53,8 +54,12 @@
         return OMElement.class;
     }
 
-    public OMElement transform(JSONObject source, TransformationContext context) {
+    public OMElement transform(Object source, TransformationContext context) {
         try {
+            JSONObject json = JSONHelper.toJettison(source);
+            if (json == null) {
+                return null;
+            }
             String ns = JSONDataBinding.ROOT_ELEMENT.getNamespaceURI();
             String name = JSONDataBinding.ROOT_ELEMENT.getLocalPart();
             if (context != null) {
@@ -68,7 +73,7 @@
                     }
                 }
             }
-            JSONBadgerfishDataSource ds = new JSONBadgerfishDataSource(source);
+            JSONBadgerfishDataSource ds = new JSONBadgerfishDataSource(json);
             OMNamespace namespace = factory.createOMNamespace(ns, "");
             return factory.createOMElement(ds, name, namespace);
         } catch (Exception e) {
@@ -79,6 +84,11 @@
     @Override
     public int getWeight() {
         return 500;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return JSONDataBinding.NAME;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.DataBinding Wed Dec  5 12:23:21 2007
@@ -16,4 +16,4 @@
 # under the License.
 
 # implementation classes for the databindings
-org.apache.tuscany.sca.databinding.json.JSONDataBinding;type=org.codehaus.jettison.json.JSONObject,name=json
\ No newline at end of file
+org.apache.tuscany.sca.databinding.json.JSONDataBinding;type=JSON,name=json
\ No newline at end of file

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/main/resources/META-INF/services/org.apache.tuscany.sca.databinding.PullTransformer Wed Dec  5 12:23:21 2007
@@ -16,9 +16,14 @@
 # under the License.
 
 # Implementation classes for the transformers
-org.apache.tuscany.sca.databinding.json.JSON2XMLStreamReader;source=org.codehaus.jettison.json.JSONObject,target=javax.xml.stream.XMLStreamReader,weight=500
-org.apache.tuscany.sca.databinding.json.XMLStreamReader2JSON;source=javax.xml.stream.XMLStreamReader,target=org.codehaus.jettison.json.JSONObject,weight=500
-org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:complexType,target=org.codehaus.jettison.json.JSONObject,weight=80000
-org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:simpleType,target=org.codehaus.jettison.json.JSONObject,weight=80000
-org.apache.tuscany.sca.databinding.json.axiom.JSON2OMElement;source=org.codehaus.jettison.json.JSONObject,target=org.apache.axiom.om.OMElement,weight=500
-org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:array,target=org.codehaus.jettison.json.JSONObject,weight=80000
+org.apache.tuscany.sca.databinding.json.JSON2XMLStreamReader;source=JSON,target=javax.xml.stream.XMLStreamReader,weight=5000
+org.apache.tuscany.sca.databinding.json.XMLStreamReader2JSON;source=javax.xml.stream.XMLStreamReader,target=JSON,weight=5000,public=false
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:complexType,target=JSON,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:simpleType,target=JSON,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.axiom.JSON2OMElement;source=JSON,target=org.apache.axiom.om.OMElement,weight=500
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=java:array,target=JSON,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=commonj.sdo.DataObject,target=JSON,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JavaBean2JSON;source=javax.xml.bind.JAXBElement,target=JSON,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JSON2JavaBean;source=JSON,target=java:complexType,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JSON2JavaBean;source=JSON,target=commonj.sdo.DataObject,weight=80000,public=false
+org.apache.tuscany.sca.databinding.json.JSON2JavaBean;source=JSON,target=javax.xml.bind.JAXBElement,weight=80000,public=false

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JSONTransformerTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JSONTransformerTestCase.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JSONTransformerTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JSONTransformerTestCase.java Wed Dec  5 12:23:21 2007
@@ -39,7 +39,7 @@
 import org.apache.tuscany.sca.interfacedef.DataType;
 import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
 import org.apache.tuscany.sca.interfacedef.util.XMLType;
-import org.codehaus.jettison.json.JSONObject;
+import org.json.JSONObject;
 
 public class JSONTransformerTestCase extends TestCase {
     private static final String IPO_XML = "<?xml version=\"1.0\"?>" + "<ipo:purchaseOrder"
@@ -76,7 +76,7 @@
     public void testXML2JSON() throws Exception {
         XMLStreamReader reader = XMLInputFactory.newInstance().createXMLStreamReader(new StringReader(IPO_XML));
         XMLStreamReader2JSON t1 = new XMLStreamReader2JSON();
-        JSONObject json = t1.transform(reader, null);
+        JSONObject json = (JSONObject) t1.transform(reader, null);
         Assert.assertNotNull(json);
 
         // Cannot round-trip as we hit a bug in Jettison
@@ -117,11 +117,12 @@
     public void testString2JSON() throws Exception {
         String json = "{\"name\":\"John\",\"age\":25}";
         String2JSON t1 = new String2JSON();
-        JSONObject jsonObject = t1.transform(json, null);
+        JSONObject jsonObject = (JSONObject) t1.transform(json, null);
         assertEquals(jsonObject.getString("name"), "John");
         assertEquals(jsonObject.getInt("age"), 25);
         JSON2String t2 = new JSON2String();
         String str = t2.transform(jsonObject, null);
-        assertEquals(json, str);
+        assertTrue(str.contains("\"name\":\"John\""));
+        assertTrue(str.contains("\"age\":25"));
     }
 }

Modified: incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONTestCase.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONTestCase.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONTestCase.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-json/src/test/java/org/apache/tuscany/sca/databinding/json/JavaBean2JSONTestCase.java Wed Dec  5 12:23:21 2007
@@ -24,7 +24,10 @@
 
 import junit.framework.Assert;
 
-import org.codehaus.jettison.json.JSONObject;
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.impl.TransformationContextImpl;
+import org.apache.tuscany.sca.interfacedef.impl.DataTypeImpl;
+import org.json.JSONObject;
 import org.junit.Test;
 
 /**
@@ -32,7 +35,7 @@
  */
 public class JavaBean2JSONTestCase {
 
-    private static class MyBean {
+    public static class MyBean {
         private String name;
         private int age;
         private boolean vip;
@@ -90,7 +93,7 @@
 
     }
 
-    private static class YourBean {
+    public static class YourBean {
         private int id;
         private String name;
 
@@ -110,10 +113,9 @@
             this.name = name;
         }
     }
-    
+
     @Test
     public void testBean2JSON() throws Exception {
-        JavaBean2JSON converter = new JavaBean2JSON();
         MyBean me = new MyBean();
         me.setAge(30);
         me.setBooks(new ArrayList<String>());
@@ -124,11 +126,45 @@
         you.setId(123);
         you.setName(null);
         me.setYou(you);
-        Object result = converter.transform(me, null);
-        Assert.assertTrue(result instanceof JSONObject);
+        JavaBean2JSON t1 = new JavaBean2JSON();
+        Object result = t1.transform(me, null);
+        System.out.println(result);
+        JSON2JavaBean t2 = new JSON2JavaBean();
+        TransformationContext context = new TransformationContextImpl();
+        context.setTargetDataType(new DataTypeImpl(MyBean.class, null));
+        Object v = t2.transform(new JSONObject(result.toString()), context);
+        Assert.assertTrue(v instanceof MyBean);
+        //        String json =
+        //            "{\"age\":30,\"books\":[],\"friends\":[\"John\",\"Mike\"],\"name\":\"Me\",\"vip\":true,\"you\":{\"id\":123,\"name\":null}}";
+        //        Assert.assertEquals(json, result.toString());
+    }
+
+    @Test
+    public void testString2JSON() throws Exception {
+        JavaBean2JSONObject t1 = new JavaBean2JSONObject();
+        Object result = t1.transform("ABC", null);
         System.out.println(result);
-        String json =
-            "{\"age\":30,\"books\":[],\"friends\":[\"John\",\"Mike\"],\"name\":\"Me\",\"vip\":true,\"you\":{\"id\":123,\"name\":null}}";
-        Assert.assertEquals(json, result.toString());
+        JSON2JavaBean t2 = new JSON2JavaBean();
+        TransformationContext context = new TransformationContextImpl();
+        context.setTargetDataType(new DataTypeImpl(String.class, null));
+        Object v = t2.transform(result, context);
+        Assert.assertTrue(v instanceof String);
+        Assert.assertEquals("ABC", v);
     }
+
+    @Test
+    public void testStringArray2JSON() throws Exception {
+        JavaBean2JSON t1 = new JavaBean2JSON();
+        Object result = t1.transform(new String[] {"ABC", "DF"}, null);
+        System.out.println(result);
+        JSON2JavaBean t2 = new JSON2JavaBean();
+        TransformationContext context = new TransformationContextImpl();
+        context.setTargetDataType(new DataTypeImpl(String[].class, null));
+        Object v = t2.transform(result, context);
+        Assert.assertTrue(v instanceof String[]);
+        String[] strs = (String[])v;
+        Assert.assertEquals("ABC", strs[0]);
+        Assert.assertEquals("DF", strs[1]);
+    }
+
 }

Added: incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml?rev=601501&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml (added)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml Wed Dec  5 12:23:21 2007
@@ -0,0 +1,81 @@
+<?xml version="1.0" encoding="UTF-8"?>
+<!--
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+-->
+<project name="DojoZipInstaller">
+
+
+	<property name="saxon.version" value="9.0.0.2" />
+	<property name="saxon.dir" value="${basedir}/target/saxon-download" />
+	<property name="saxon.url" value="http://prdownloads.sourceforge.net/saxon/saxonb9-0-0-2j.zip" />
+
+
+	<target name="check-saxon-installed">
+		<condition property="already.installed">
+			<and>
+				<available file="${localRepository}/net/sf/saxon/saxon/${saxon.version}/saxon-${saxon.version}.jar" />
+				<available file="${localRepository}/net/sf/saxon/saxon-dom/${saxon.version}/saxon-dom-${saxon.version}.jar" />
+				<available file="${localRepository}/net/sf/saxon/saxon-api/${saxon.version}/saxon-api-${saxon.version}.jar" />
+			</and>
+		</condition>
+		<condition property="maven.suffix" value="">
+			<os family="unix" />
+		</condition>
+		<condition property="maven.suffix" value=".bat">
+			<os family="windows" />
+		</condition>
+	</target>
+
+
+	<target name="check-saxon-unpacked">
+		<condition property="already.unpacked">
+			<available file="${saxon.dir}" />
+		</condition>
+	</target>
+
+	<target name="install-saxon" depends="check-saxon-installed" unless="already.installed">
+		<mkdir dir="${saxon.dir}" />
+		<get src="${saxon.url}" dest="${saxon.dir}/saxon-${saxon.version}.zip" verbose="true" usetimestamp="true" />
+		<unzip src="${saxon.dir}/saxon-${saxon.version}.zip" dest="${saxon.dir}" overwrite="false">
+		</unzip>
+		<exec executable="mvn${maven.suffix}" dir="${basedir}" failonerror="false">
+			<arg line="install:install-file -DgroupId=net.sf.saxon  -DartifactId=saxon -Dversion=${saxon.version} -Dpackaging=jar -DgeneratePom=true -Dfile=${saxon.dir}/saxon9.jar" />
+		</exec>
+		<exec executable="mvn${maven.suffix}" dir="${basedir}" failonerror="false">
+			<arg line="install:install-file -DgroupId=net.sf.saxon  -DartifactId=saxon-dom -Dversion=${saxon.version} -Dpackaging=jar -DgeneratePom=true -Dfile=${saxon.dir}/saxon9-dom.jar" />
+		</exec>
+		<exec executable="mvn${maven.suffix}" dir="${basedir}" failonerror="false">
+			<arg line="install:install-file -DgroupId=net.sf.saxon  -DartifactId=saxon-api -Dversion=${saxon.version} -Dpackaging=jar -DgeneratePom=true -Dfile=${saxon.dir}/saxon9-s9api.jar" />
+		</exec>
+	</target>
+
+	<target name="install-saxon-nomaven" depends="check-saxon-installed" unless="already.installed">
+		<mkdir dir="${saxon.dir}" />
+		<get src="${saxon.url}" dest="${saxon.dir}/saxon-${saxon.version}.zip" verbose="true" usetimestamp="true" />
+		<unzip src="${saxon.dir}/saxon-${saxon.version}.zip" dest="${saxon.dir}" overwrite="false">
+		</unzip>
+		<copy file="${saxon.dir}/saxon9.jar" tofile="${localRepository}/net/sf/saxon/saxon/${saxon.version}/saxon-${saxon.version}.jar" />
+		<copy file="${saxon.dir}/saxon9-dom.jar" tofile="${localRepository}/net/sf/saxon/saxon-dom/${saxon.version}/saxon-dom-${saxon.version}.jar" />
+		<copy file="${saxon.dir}/saxon9-s9api.jar" tofile="${localRepository}/net/sf/saxon/saxon-api/${saxon.version}/saxon-api-${saxon.version}.jar" />
+
+	</target>
+
+	<target name="clean-saxon-files">
+		<delete dir="${saxon.dir}" />
+	</target>
+</project>

Propchange: incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: incubator/tuscany/java/sca/modules/databinding-saxon/build-saxon.xml
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/pom.xml
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/pom.xml?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/pom.xml (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/pom.xml Wed Dec  5 12:23:21 2007
@@ -34,7 +34,7 @@
             <artifactId>tuscany-core-spi</artifactId>
             <version>1.1-incubating-SNAPSHOT</version>
         </dependency>
-        
+
         <dependency>
             <groupId>org.apache.tuscany.sca</groupId>
             <artifactId>tuscany-databinding</artifactId>
@@ -44,20 +44,26 @@
         <dependency>
             <groupId>net.sf.saxon</groupId>
             <artifactId>saxon</artifactId>
-            <version>8.7</version>
+            <version>9.0.0.2</version>
         </dependency>
-        
+
+        <dependency>
+            <groupId>net.sf.saxon</groupId>
+            <artifactId>saxon-api</artifactId>
+            <version>9.0.0.2</version>
+        </dependency>
+
         <dependency>
             <groupId>net.sf.saxon</groupId>
             <artifactId>saxon-dom</artifactId>
-            <version>8.7</version>
+            <version>9.0.0.2</version>
         </dependency>
-        
+
         <dependency>
             <groupId>org.apache.tuscany.sdo</groupId>
             <artifactId>tuscany-sdo-lib</artifactId>
             <version>1.0-incubating-SNAPSHOT</version>
-        </dependency>                    
+        </dependency>
 
         <dependency>
             <groupId>org.apache.tuscany.sdo</groupId>
@@ -73,4 +79,44 @@
         </dependency>
     </dependencies>
 
+    <build>
+        <plugins>
+            <plugin>
+                <groupId>org.apache.maven.plugins</groupId>
+                <artifactId>maven-antrun-plugin</artifactId>
+                <version>1.1</version>
+
+                <executions>
+                    <execution>
+                        <id>install-saxon</id>
+                        <phase>validate</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <tasks>
+                                <ant antfile="./build-saxon.xml" target="install-saxon">
+                                    <property name="localRepository" value="${settings.localRepository}" />
+                                </ant>
+                            </tasks>
+                        </configuration>
+                    </execution>
+                    <execution>
+                        <id>clean-saxon-files</id>
+                        <phase>clean</phase>
+                        <goals>
+                            <goal>run</goal>
+                        </goals>
+                        <configuration>
+                            <tasks>
+                                <ant antfile="./build-saxon.xml" target="clean-saxon-files">
+                                    <property name="localRepository" value="${settings.localRepository}" />
+                                </ant>
+                            </tasks>
+                        </configuration>
+                    </execution>
+                </executions>
+            </plugin>
+        </plugins>
+    </build>
 </project>

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Node2NodeInfoTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Node2NodeInfoTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Node2NodeInfoTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Node2NodeInfoTransformer.java Wed Dec  5 12:23:21 2007
@@ -21,7 +21,6 @@
 import javax.xml.transform.dom.DOMSource;
 
 import net.sf.saxon.Configuration;
-import net.sf.saxon.event.Builder;
 import net.sf.saxon.om.NodeInfo;
 import net.sf.saxon.trans.XPathException;
 
@@ -42,14 +41,12 @@
     PullTransformer<Node, NodeInfo> {
 
     public NodeInfo transform(Node source, TransformationContext context) {
-        Configuration configuration = SaxonDataBindingHelper.CURR_EXECUTING_CONFIG;
-        if (configuration == null) {
-            configuration = new Configuration();
-        }
+        Configuration configuration = new Configuration();
+        
         NodeInfo docInfo = null;
         try {
             source = DOMHelper.promote(source);
-            docInfo = Builder.build(new DOMSource(source), null, configuration);
+            docInfo = configuration.buildDocument(new DOMSource(source));
         } catch (XPathException e) {
             throw new TransformationException(e);
         }

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/NodeInfo2NodeTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/NodeInfo2NodeTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/NodeInfo2NodeTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/NodeInfo2NodeTransformer.java Wed Dec  5 12:23:21 2007
@@ -45,7 +45,7 @@
             Properties props = new Properties();
             props.setProperty(OutputKeys.METHOD, "xml");
             props.setProperty(OutputKeys.INDENT, "yes");
-            QueryResult.serialize(source, destination, props, source.getConfiguration());
+            QueryResult.serialize(source, destination, props);
         } catch (Exception e) {
             throw new TransformationException(e);
         }

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Object2ValueTransformer.java Wed Dec  5 12:23:21 2007
@@ -18,6 +18,7 @@
  */
 package org.apache.tuscany.sca.databinding.saxon;
 
+import net.sf.saxon.value.FloatValue;
 import net.sf.saxon.value.ObjectValue;
 import net.sf.saxon.value.Value;
 
@@ -41,7 +42,7 @@
     protected Class getTargetType() {
         return Value.class;
     }
-    
+
     @Override
     public String getSourceDataBinding() {
         return JavaBeansDataBinding.NAME;
@@ -53,6 +54,10 @@
     }
 
     public Value transform(Object source, TransformationContext context) {
+        // WORKAROUND for ClassCastException in ObjectValue.toJavaObject(float)
+        if (source instanceof Float) {
+            return new FloatValue(((Float)source).floatValue());
+        }
         return new ObjectValue(source);
     }
 

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SimpleType2ValueTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SimpleType2ValueTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SimpleType2ValueTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/SimpleType2ValueTransformer.java Wed Dec  5 12:23:21 2007
@@ -23,7 +23,7 @@
 import net.sf.saxon.value.DecimalValue;
 import net.sf.saxon.value.DoubleValue;
 import net.sf.saxon.value.FloatValue;
-import net.sf.saxon.value.IntegerValue;
+import net.sf.saxon.value.Int64Value;
 import net.sf.saxon.value.ObjectValue;
 import net.sf.saxon.value.StringValue;
 import net.sf.saxon.value.Value;
@@ -63,13 +63,13 @@
     public Value transform(Object source, TransformationContext context) {
         Value result = null;
         if (source instanceof Integer) {
-            result = new IntegerValue((Integer)source);
+            result = new Int64Value((Integer)source);
         } else if (source instanceof Long) {
-            result = new IntegerValue((Long)source);
+            result = new Int64Value((Long)source);
         } else if (source instanceof Short) {
-            result = new IntegerValue((Short)source);
+            result = new Int64Value((Short)source);
         } else if (source instanceof Byte) {
-            result = new IntegerValue((Byte)source);
+            result = new Int64Value((Byte)source);
         } else if (source instanceof Double) {
             result = new DoubleValue((Double)source);
         } else if (source instanceof Float) {

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2ObjectTransformer.java Wed Dec  5 12:23:21 2007
@@ -36,7 +36,7 @@
     public Object transform(Value source, TransformationContext context) {
         Object object;
         try {
-            object = Value.convert(Value.asItem(source));
+            object = Value.convertToJava(Value.asItem(source));
         } catch (XPathException e) {
             throw new TransformationException(e);
         }

Modified: incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2SimpleTypeTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2SimpleTypeTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2SimpleTypeTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding-saxon/src/main/java/org/apache/tuscany/sca/databinding/saxon/Value2SimpleTypeTransformer.java Wed Dec  5 12:23:21 2007
@@ -36,7 +36,7 @@
     public Object transform(Value source, TransformationContext context) {
         Object object;
         try {
-            object = Value.convert(Value.asItem(source));
+            object = Value.convertToJava(Value.asItem(source));
         } catch (XPathException e) {
             throw new TransformationException(e);
         }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/DefaultTransformerExtensionPoint.java Wed Dec  5 12:23:21 2007
@@ -43,19 +43,19 @@
     public DefaultTransformerExtensionPoint() {
     }
 
-    public void addTransformer(String sourceType, String resultType, int weight, Transformer transformer) {
-    	if (logger.isLoggable(Level.FINE)) {
-			String className = transformer.getClass().getName();
-			boolean lazy = false;
-			boolean pull = (transformer instanceof PullTransformer);
-			if (transformer instanceof LazyPullTransformer) {
-				className = ((LazyPullTransformer) transformer).transformerDeclaration.getClassName();
-				lazy = true;
-			}
-			if (transformer instanceof LazyPushTransformer) {
-				className = ((LazyPushTransformer) transformer).transformerDeclaration.getClassName();
-				lazy = true;
-			}
+    public void addTransformer(String sourceType, String resultType, int weight, Transformer transformer, boolean publicTransformer) {
+        if (logger.isLoggable(Level.FINE)) {
+            String className = transformer.getClass().getName();
+            boolean lazy = false;
+            boolean pull = (transformer instanceof PullTransformer);
+            if (transformer instanceof LazyPullTransformer) {
+                className = ((LazyPullTransformer)transformer).transformerDeclaration.getClassName();
+                lazy = true;
+            }
+            if (transformer instanceof LazyPushTransformer) {
+                className = ((LazyPushTransformer)transformer).transformerDeclaration.getClassName();
+                lazy = true;
+            }
 
             logger.fine("Adding transformer: " + className
                 + ";source="
@@ -69,14 +69,14 @@
                 + ",lazy="
                 + lazy);
         }
-        graph.addEdge(sourceType, resultType, transformer, weight);
+        graph.addEdge(sourceType, resultType, transformer, weight, publicTransformer);
     }
 
-    public void addTransformer(Transformer transformer) {
+    public void addTransformer(Transformer transformer, boolean publicTransformer) {
         addTransformer(transformer.getSourceDataBinding(),
                        transformer.getTargetDataBinding(),
                        transformer.getWeight(),
-                       transformer);
+                       transformer, publicTransformer);
     }
 
     public boolean removeTransformer(String sourceType, String resultType) {
@@ -111,7 +111,7 @@
     private void loadTransformers(Class<?> transformerClass) {
 
         // Get the transformer service declarations
-        Set<ServiceDeclaration> transformerDeclarations; 
+        Set<ServiceDeclaration> transformerDeclarations;
 
         try {
             transformerDeclarations = ServiceDiscovery.getInstance().getServiceDeclarations(transformerClass);
@@ -121,12 +121,17 @@
         }
 
         // Load transformers
-        for (ServiceDeclaration transformerDeclaration: transformerDeclarations) {
+        for (ServiceDeclaration transformerDeclaration : transformerDeclarations) {
             Map<String, String> attributes = transformerDeclaration.getAttributes();
 
             String source = attributes.get("source");
             String target = attributes.get("target");
             int weight = Integer.valueOf(attributes.get("weight"));
+            String b = attributes.get("public");
+            boolean pub = true;
+            if (b != null) {
+                pub = Boolean.valueOf(b);
+            }
 
             // Create a transformer wrapper and register it
             Transformer transformer;
@@ -135,7 +140,7 @@
             } else {
                 transformer = new LazyPushTransformer(source, target, weight, transformerDeclaration);
             }
-            addTransformer(transformer);
+            addTransformer(transformer, pub);
         }
     }
 

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/TransformerExtensionPoint.java Wed Dec  5 12:23:21 2007
@@ -32,18 +32,21 @@
      * @param targetDataBinding
      * @param weight
      * @param transformer
+     * @param publicTransformer TODO
      */
     void addTransformer(String sourceDataBinding,
-                             String targetDataBinding,
-                             int weight,
-                             Transformer transformer);
+                        String targetDataBinding,
+                        int weight,
+                        Transformer transformer,
+                        boolean publicTransformer);
 
     /**
      * Register a transformer
      * 
      * @param transformer
+     * @param publicTransformer TODO
      */
-    void addTransformer(Transformer transformer);
+    void addTransformer(Transformer transformer, boolean publicTransformer);
 
     /**
      * Unregister a transformer

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DOMHelper.java Wed Dec  5 12:23:21 2007
@@ -18,16 +18,23 @@
  */
 package org.apache.tuscany.sca.databinding.impl;
 
+import java.util.ArrayList;
+import java.util.List;
+
 import javax.xml.namespace.QName;
 import javax.xml.parsers.DocumentBuilder;
 import javax.xml.parsers.DocumentBuilderFactory;
 import javax.xml.parsers.ParserConfigurationException;
 
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.interfacedef.DataType;
+import org.apache.tuscany.sca.interfacedef.util.XMLType;
 import org.w3c.dom.Attr;
 import org.w3c.dom.Document;
 import org.w3c.dom.Element;
 import org.w3c.dom.NamedNodeMap;
 import org.w3c.dom.Node;
+import org.w3c.dom.NodeList;
 
 /**
  * Helper for DOM
@@ -108,6 +115,53 @@
             parent = parent.getParentNode();
         }
         return doc;
+    }
+
+    /**
+     * @param context
+     * @param element
+     */
+    public static Element adjustElementName(TransformationContext context, Element element) {
+        if (context != null) {
+            DataType dataType = context.getTargetDataType();
+            Object logical = dataType == null ? null : dataType.getLogical();
+            if (!(logical instanceof XMLType)) {
+                return element;
+            }
+            XMLType xmlType = (XMLType)logical;
+            QName name = new QName(element.getNamespaceURI(), element.getLocalName());
+            if (xmlType.isElement() && !xmlType.getElementName().equals(name)) {
+                QName newName = xmlType.getElementName();
+                String prefix = element.getPrefix();
+                String qname = newName.getLocalPart();
+                if (prefix != null && !prefix.equals("")) {
+                    qname = prefix + ":" + qname;
+                }
+                Element newElement = element.getOwnerDocument().createElementNS(newName.getNamespaceURI(), qname);
+                newElement.setPrefix(prefix);
+                NodeList nodeList = element.getChildNodes();
+                // Need to copy the nodes from the list fisrt as the appendChild() will change the list
+                int length = nodeList.getLength();
+                List<Node> nodes = new ArrayList<Node>();
+                for (int i = 0; i < length; i++) {
+                    nodes.add(nodeList.item(i));
+                }
+                NamedNodeMap attrs = element.getAttributes();
+                for (int i = 0; i < attrs.getLength(); i++) {
+                    nodes.add(attrs.item(i));
+                }
+                for (int i = 0; i < nodes.size(); i++) {
+                    Node node = nodes.get(i);
+                    if (node.getNodeType() == Node.ATTRIBUTE_NODE) {
+                        newElement.setAttributeNodeNS((Attr)node.cloneNode(true));
+                    } else {
+                        newElement.appendChild(nodes.get(i));
+                    }
+                }
+                return newElement;
+            }
+        }
+        return element;
     }
 
 }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/impl/DirectedGraph.java Wed Dec  5 12:23:21 2007
@@ -114,11 +114,14 @@
 
         private int weight;
 
-        public Edge(Vertex source, Vertex target, E value, int weight) {
+        private boolean pub = true;
+
+        public Edge(Vertex source, Vertex target, E value, int weight, boolean pub) {
             this.sourceVertex = source;
             this.targetVertex = target;
             this.value = value;
             this.weight = weight;
+            this.pub = pub;
         }
 
         @Override
@@ -157,6 +160,14 @@
         public void setSourceVertex(Vertex sourceVertex) {
             this.sourceVertex = sourceVertex;
         }
+
+        public boolean isPublic() {
+            return pub;
+        }
+
+        public void setPublic(boolean pub) {
+            this.pub = pub;
+        }
     }
 
     private final class Node implements Comparable<Node> {
@@ -176,7 +187,7 @@
         }
     }
 
-    public void addEdge(V source, V target, E edgeValue, int weight) {
+    public void addEdge(V source, V target, E edgeValue, int weight, boolean publicEdge) {
         Vertex s = getVertex(source);
         if (s == null) {
             s = new Vertex(source);
@@ -187,7 +198,7 @@
             t = new Vertex(target);
             vertices.put(target, t);
         }
-        Edge edge = new Edge(s, t, edgeValue, weight);
+        Edge edge = new Edge(s, t, edgeValue, weight, publicEdge);
         s.outEdges.put(t, edge);
     }
 
@@ -252,13 +263,11 @@
             return paths.get(pair);
         }
 
-        // HACK: To support same vertex
-        if (source == target) {
-            Path path = new Path();
-            Edge edge = getEdge(source, target);
-            if (edge != null) {
-                path.addEdge(edge);
-            }
+        // Check if there is a direct link, if yes, use it instead
+        Edge direct = getEdge(source, target);
+        Path path = new Path();
+        if (direct != null) {
+            path.addEdge(direct);
             paths.put(pair, path);
             return path;
         }
@@ -274,19 +283,23 @@
 
         Set<Node> otherNodes = new HashSet<Node>(nodes.values());
         Set<Node> nodesOnPath = new HashSet<Node>();
+        Node nextNode = null;
         while (!otherNodes.isEmpty()) {
-            Node nextNode = extractMin(otherNodes);
+            nextNode = extractMin(otherNodes);
             if (nextNode.vertex == target) {
-                Path path = getPath(nextNode);
+                path = getPath(nextNode);
                 paths.put(pair, path); // Cache it
                 return path;
             }
             nodesOnPath.add(nextNode);
             for (Edge edge : nextNode.vertex.outEdges.values()) {
                 Node adjacentNode = nodes.get(edge.targetVertex);
-                if (nextNode.distance + edge.weight < adjacentNode.distance) {
-                    adjacentNode.distance = nextNode.distance + edge.weight;
-                    adjacentNode.previous = nextNode;
+                // Only look for public edge
+                if (edge.isPublic()) {
+                    if (nextNode.distance + edge.weight < adjacentNode.distance) {
+                        adjacentNode.distance = nextNode.distance + edge.weight;
+                        adjacentNode.previous = nextNode;
+                    }
                 }
             }
         }
@@ -364,7 +377,7 @@
     public void addGraph(DirectedGraph<V, E> otherGraph) {
         for (Vertex v : otherGraph.vertices.values()) {
             for (Edge e : v.outEdges.values()) {
-                addEdge(e.sourceVertex.value, e.targetVertex.value, e.value, e.weight);
+                addEdge(e.sourceVertex.value, e.targetVertex.value, e.value, e.weight, true);
             }
         }
     }

Modified: incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java?rev=601501&r1=601500&r2=601501&view=diff
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java (original)
+++ incubator/tuscany/java/sca/modules/databinding/src/main/java/org/apache/tuscany/sca/databinding/javabeans/JavaBean2XMLTransformer.java Wed Dec  5 12:23:21 2007
@@ -122,7 +122,7 @@
                     }
                 }
 
-                Method[] methods = javaType.getDeclaredMethods();
+                Method[] methods = javaType.getMethods();
                 String fieldName = null;
                 for (Method aMethod : methods) {
                     try {



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