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/07 20:37:55 UTC

svn commit: r602194 - in /incubator/tuscany/java/sca/modules/databinding-jaxb/src: main/java/org/apache/tuscany/sca/databinding/jaxb/ test/java/org/apache/tuscany/databinding/jaxb/

Author: rfeng
Date: Fri Dec  7 11:37:54 2007
New Revision: 602194

URL: http://svn.apache.org/viewvc?rev=602194&view=rev
Log:
Add more transformers for JAXB

Added:
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java   (with props)
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java   (with props)
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java   (with props)
Modified:
    incubator/tuscany/java/sca/modules/databinding-jaxb/src/test/java/org/apache/tuscany/databinding/jaxb/POJOTestCase.java

Added: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java?rev=602194&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2SAX.java Fri Dec  7 11:37:54 2007
@@ -0,0 +1,70 @@
+/*
+ * 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.jaxb;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Marshaller;
+
+import org.apache.tuscany.sca.databinding.PushTransformer;
+import org.apache.tuscany.sca.databinding.TransformationContext;
+import org.apache.tuscany.sca.databinding.TransformationException;
+import org.apache.tuscany.sca.databinding.impl.BaseTransformer;
+import org.xml.sax.ContentHandler;
+
+/**
+ * @version $Rev$ $Date$
+ */
+public class JAXB2SAX extends BaseTransformer<Object, ContentHandler> implements
+    PushTransformer<Object, ContentHandler> {
+
+    @Override
+    protected Class getSourceType() {
+        return Object.class;
+    }
+
+    @Override
+    protected Class getTargetType() {
+        return ContentHandler.class;
+    }
+
+    /**
+     * @see org.apache.tuscany.sca.databinding.PushTransformer#transform(java.lang.Object, java.lang.Object, org.apache.tuscany.sca.databinding.TransformationContext)
+     */
+    public void transform(Object source, ContentHandler target, TransformationContext tContext) {
+        try {
+            JAXBContext context = JAXBContextHelper.createJAXBContext(tContext, true);
+            Marshaller marshaller = context.createMarshaller();
+            JAXBElement<?> jaxbElement = JAXBContextHelper.createJAXBElement(tContext.getSourceDataType(), source);
+            marshaller.marshal(jaxbElement, target);
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+    }
+
+    public int getWeight() {
+        return 20;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return JAXBDataBinding.NAME;
+    }
+}

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

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

Added: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java?rev=602194&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/JAXB2String.java Fri Dec  7 11:37:54 2007
@@ -0,0 +1,74 @@
+/*
+ * 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.jaxb;
+
+import java.io.StringWriter;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Marshaller;
+import javax.xml.transform.stream.StreamResult;
+
+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.xml.XMLStringDataBinding;
+
+public class JAXB2String extends BaseTransformer<Object, String> implements PullTransformer<Object, String> {
+
+    public String transform(Object source, TransformationContext tContext) {
+        try {
+            JAXBContext context = JAXBContextHelper.createJAXBContext(tContext, true);
+            Marshaller marshaller = context.createMarshaller();
+            StringWriter writer = new StringWriter();
+            StreamResult result = new StreamResult(writer);
+            JAXBElement<?> jaxbElement = JAXBContextHelper.createJAXBElement(tContext.getSourceDataType(), source);
+            marshaller.marshal(jaxbElement, result);
+            return writer.toString();
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+    }
+
+    @Override
+    public Class getSourceType() {
+        return Object.class;
+    }
+
+    @Override
+    public Class getTargetType() {
+        return String.class;
+    }
+
+    @Override
+    public int getWeight() {
+        return 30;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return JAXBDataBinding.NAME;
+    }
+
+    @Override
+    public String getTargetDataBinding() {
+        return XMLStringDataBinding.NAME;
+    }
+}

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

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

Added: incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java
URL: http://svn.apache.org/viewvc/incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java?rev=602194&view=auto
==============================================================================
--- incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java (added)
+++ incubator/tuscany/java/sca/modules/databinding-jaxb/src/main/java/org/apache/tuscany/sca/databinding/jaxb/String2JAXB.java Fri Dec  7 11:37:54 2007
@@ -0,0 +1,76 @@
+/*
+ * 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.jaxb;
+
+import java.io.StringReader;
+
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.transform.stream.StreamSource;
+
+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.xml.XMLStringDataBinding;
+
+public class String2JAXB extends BaseTransformer<String, Object> implements
+    PullTransformer<String, Object> {
+
+    public Object transform(final String source, final TransformationContext context) {
+        if (source == null) {
+            return null;
+        }
+        try {
+            JAXBContext jaxbContext = JAXBContextHelper.createJAXBContext(context, false);
+            Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
+            StreamSource streamSource = new StreamSource(new StringReader(source));
+            Object result = unmarshaller.unmarshal(streamSource, JAXBContextHelper.getJavaType(context.getTargetDataType()));
+            return JAXBContextHelper.createReturnValue(context.getTargetDataType(), result);
+        } catch (Exception e) {
+            throw new TransformationException(e);
+        }
+    }
+
+    @Override
+    public Class getSourceType() {
+        return String.class;
+    }
+
+    @Override
+    public Class getTargetType() {
+        return Object.class;
+    }
+
+    @Override
+    public int getWeight() {
+        return 30;
+    }
+
+    @Override
+    public String getSourceDataBinding() {
+        return XMLStringDataBinding.NAME;
+    }    
+    
+    @Override
+    public String getTargetDataBinding() {
+        return JAXBDataBinding.NAME;
+    }    
+
+}

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

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

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=602194&r1=602193&r2=602194&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 Fri Dec  7 11:37:54 2007
@@ -35,7 +35,6 @@
 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;
@@ -71,7 +70,7 @@
         MyBean newBean = (MyBean)e2.getValue();
         assertEquals(bean, newBean);
     }
-    
+
     public void testXMLStreamReader() throws Exception {
         JAXBContext context = JAXBContext.newInstance(MyBean.class, MyInterfaceImpl.class);
 
@@ -86,20 +85,19 @@
         bean.setService(service);
         bean.setOtherService(service);
         JAXBElement<Object> element = new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, bean);
-        TransformationContext tContext  = new TransformationContextImpl();
+        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);
-        /*
+//        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);
-        */
+        // FIXME :To be implemented
+        // assertEquals(bean, newBean);
     }
 
     public void testString() throws Exception {
@@ -143,6 +141,22 @@
         assertTrue(e2.getValue() instanceof String[]);
     }
 
+    public void testByteArray() throws Exception {
+        JAXBContext context = JAXBContext.newInstance(byte[].class);
+        StringWriter writer = new StringWriter();
+        JAXBElement<Object> element =
+            new JAXBElement<Object>(new QName("http://ns1", "bean"), Object.class, "ABC".getBytes());
+        context.createMarshaller().marshal(element, writer);
+        String xml = writer.toString();
+        assertTrue(xml.contains("QUJD"));
+        assertTrue(xml.contains("base64Binary"));
+
+        Object result = context.createUnmarshaller().unmarshal(new StringReader(xml));
+        assertTrue(result instanceof JAXBElement);
+        JAXBElement e2 = (JAXBElement)result;
+        assertTrue(e2.getValue() instanceof byte[]);
+    }
+
     public void testPrimitive() throws Exception {
         JAXBContext context = JAXBContext.newInstance(int.class);
         StringWriter writer = new StringWriter();
@@ -193,10 +207,10 @@
         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());
+            // System.out.print(p.getName());
+            // System.out.println(" " + p.isCollection());
             if (p.getName().equals("notes")) {
-                Collection c = (Collection) p.getAccessor().get(bean);
+                Collection c = (Collection)p.getAccessor().get(bean);
                 c.add("123");
             }
         }



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