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