You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cxf.apache.org by se...@apache.org on 2009/08/11 12:23:15 UTC

svn commit: r803056 - in /cxf/trunk: rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/ rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/ systests/ systests/src/test/java/org/apache/cxf/systest/jaxrs/ systests/src/test/java/org...

Author: sergeyb
Date: Tue Aug 11 10:23:15 2009
New Revision: 803056

URL: http://svn.apache.org/viewvc?rev=803056&view=rev
Log:
JAXRS : adding DataBindingJSONProvider

Added:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java   (with props)
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java   (with props)
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java   (with props)
Modified:
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
    cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
    cxf/trunk/systests/pom.xml
    cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSDataBindingTest.java
    cxf/trunk/systests/src/test/resources/jaxrs_databinding/WEB-INF/beans.xml

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Tue Aug 11 10:23:15 2009
@@ -143,7 +143,7 @@
             }
         }
         
-        return isSupported(type, genericType, anns);
+        return unmarshalAsJaxbElement || isSupported(type, genericType, anns);
     }
     
     protected JAXBContext getCollectionContext(Class<?> type) throws JAXBException {
@@ -329,6 +329,9 @@
     }
     
     protected boolean isSupported(Class<?> type, Type genericType, Annotation[] anns) {
+        if (jaxbElementClassMap != null && jaxbElementClassMap.containsKey(type.getName())) {
+            return true;
+        }
         return type.getAnnotation(XmlRootElement.class) != null
             || JAXBElement.class.isAssignableFrom(type)
             || objectFactoryForClass(type)

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AegisJSONProvider.java Tue Aug 11 10:23:15 2009
@@ -22,11 +22,8 @@
 
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
-import java.util.Collections;
-import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
 import java.util.concurrent.ConcurrentHashMap;
@@ -35,18 +32,11 @@
 import javax.ws.rs.Produces;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.ext.Provider;
-import javax.xml.namespace.NamespaceContext;
 import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamReader;
 import javax.xml.stream.XMLStreamWriter;
 
 import org.apache.cxf.jaxrs.utils.JAXRSUtils;
-import org.apache.cxf.staxutils.DepthXMLStreamReader;
-import org.codehaus.jettison.AbstractXMLStreamWriter;
-import org.codehaus.jettison.mapped.Configuration;
-import org.codehaus.jettison.mapped.MappedNamespaceConvention;
-import org.codehaus.jettison.mapped.MappedXMLInputFactory;
-import org.codehaus.jettison.mapped.MappedXMLStreamWriter;
 
 @Provider
 @Produces({"application/json" })
@@ -70,7 +60,7 @@
     
     @Override
     public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mt) {
-        return false;
+        return true;
     }
     
     public void setNamespaceMap(Map<String, String> nsMap) {
@@ -80,35 +70,14 @@
     @Override
     protected XMLStreamWriter createStreamWriter(Class<?> type, OutputStream os) throws Exception {
         QName qname = getQName(type);
-        if (writeXsiType) {
-            namespaceMap.putIfAbsent("http://www.w3.org/2001/XMLSchema-instance", "xsins");
-        }
-        Configuration c = new Configuration(namespaceMap);
-        MappedNamespaceConvention convention = new MappedNamespaceConvention(c);
-        AbstractXMLStreamWriter xsw = new MappedXMLStreamWriter(
-                                            convention, 
-                                            new OutputStreamWriter(os, "UTF-8"));
-        if (serializeAsArray) {
-            if (arrayKeys != null) {
-                for (String key : arrayKeys) {
-                    xsw.seriliazeAsArray(key);
-                }
-            } else {
-                String key = getKey(convention, qname);
-                xsw.seriliazeAsArray(key);
-            }
-        }
-        return xsw;
+        return JSONUtils.createStreamWriter(os, qname, writeXsiType, namespaceMap, 
+                                                           serializeAsArray, arrayKeys);
     }
     
     @Override
     protected XMLStreamReader createStreamReader(Class<?> type, InputStream is) throws Exception {
-        if (readXsiType) {
-            namespaceMap.putIfAbsent("http://www.w3.org/2001/XMLSchema-instance", "xsins");
-        }
         getQName(type);
-        MappedXMLInputFactory factory = new MappedXMLInputFactory(namespaceMap);
-        return new NamespaceContextReader(factory.createXMLStreamReader(is));
+        return JSONUtils.createStreamReader(is, readXsiType, namespaceMap);
     }
     
     private QName getQName(Class<?> type) {
@@ -116,42 +85,4 @@
         namespaceMap.putIfAbsent(qname.getNamespaceURI(), "ns1");
         return qname;
     }
-    
-    private String getKey(MappedNamespaceConvention convention, QName qname) throws Exception {
-        return convention.createKey(qname.getPrefix(), 
-                                    qname.getNamespaceURI(),
-                                    qname.getLocalPart());
-    }
-    
-    private class NamespaceContextReader extends DepthXMLStreamReader {
-        public NamespaceContextReader(XMLStreamReader reader) {
-            super(reader);
-        }
-        
-        @Override
-        public NamespaceContext getNamespaceContext() {
-            return new NamespaceContext() {
-
-                public String getNamespaceURI(String prefix) {
-                    for (Map.Entry<String, String> entry : namespaceMap.entrySet()) {
-                        if (entry.getValue().equals(prefix)) {
-                            return entry.getKey();
-                        }
-                    }
-                    return null;
-                }
-
-                public String getPrefix(String ns) {
-                    return namespaceMap.get(ns);
-                }
-
-                public Iterator getPrefixes(String ns) {
-                    String prefix = getPrefix(ns);
-                    return prefix == null ? null : Collections.singletonList(prefix).iterator();
-                }
-                
-            };
-        }
-    }
-    
 }

Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,101 @@
+/**
+ * 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.cxf.jaxrs.provider;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.lang.annotation.Annotation;
+import java.lang.reflect.Type;
+import java.util.List;
+import java.util.Map;
+import java.util.concurrent.ConcurrentHashMap;
+
+import javax.ws.rs.Consumes;
+import javax.ws.rs.Produces;
+import javax.ws.rs.core.MediaType;
+import javax.ws.rs.ext.Provider;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.cxf.jaxrs.utils.JAXRSUtils;
+
+@Provider
+@Produces("application/json")
+@Consumes("application/json")
+public class DataBindingJSONProvider extends DataBindingProvider {
+    
+    private List<String> arrayKeys;
+    private boolean serializeAsArray;
+    private ConcurrentHashMap<String, String> namespaceMap = new ConcurrentHashMap<String, String>();
+    private boolean writeXsiType = true;
+    private boolean readXsiType = true;
+    
+    public void setWriteXsiType(boolean write) {
+        writeXsiType = write;
+    }
+    
+    public void setReadXsiType(boolean read) {
+        readXsiType = read;
+    }
+    
+    public void setArrayKeys(List<String> keys) {
+        this.arrayKeys = keys;
+    }
+    
+    public void setSerializeAsArray(boolean asArray) {
+        this.serializeAsArray = asArray;
+    }
+    
+    @Override
+    public boolean isReadable(Class<?> type, Type genericType, Annotation[] annotations, MediaType mt) {
+        return true;
+    }
+    
+    public void setNamespaceMap(Map<String, String> nsMap) {
+        this.namespaceMap = new ConcurrentHashMap<String, String>(nsMap);
+    }
+    
+    @Override
+    protected XMLStreamWriter createWriter(Class<?> type, OutputStream os) throws Exception {
+        QName qname = getQName(type);
+        return JSONUtils.createStreamWriter(os, qname, writeXsiType, namespaceMap, 
+                                            serializeAsArray, arrayKeys);
+    }
+    
+    @Override
+    protected void writeToWriter(XMLStreamWriter writer, Object o) throws Exception {
+        writer.writeStartDocument();
+        super.writeToWriter(writer, o);
+        writer.writeEndDocument();
+    }
+    
+    @Override
+    protected XMLStreamReader createReader(Class<?> type, InputStream is) throws Exception {
+        getQName(type);
+        return JSONUtils.createStreamReader(is, readXsiType, namespaceMap);
+    }
+    
+    private QName getQName(Class<?> type) {
+        QName qname = JAXRSUtils.getClassQName(type); 
+        namespaceMap.putIfAbsent(qname.getNamespaceURI(), "ns1");
+        return qname;
+    }
+    
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProvider.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingProvider.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/DataBindingProvider.java Tue Aug 11 10:23:15 2009
@@ -26,6 +26,7 @@
 
 import javax.ws.rs.Consumes;
 import javax.ws.rs.Produces;
+import javax.ws.rs.WebApplicationException;
 import javax.ws.rs.core.MediaType;
 import javax.ws.rs.core.MultivaluedMap;
 import javax.ws.rs.ext.MessageBodyReader;
@@ -64,12 +65,16 @@
     public Object readFrom(Class<Object> clazz, Type genericType, Annotation[] annotations, MediaType type, 
                        MultivaluedMap<String, String> headers, InputStream is)
         throws IOException {
-        XMLStreamReader reader = createReader(clazz, is);
-        DataReader<XMLStreamReader> dataReader = binding.createReader(XMLStreamReader.class);
-        return dataReader.read(null, reader, clazz);
+        try {
+            XMLStreamReader reader = createReader(clazz, is);
+            DataReader<XMLStreamReader> dataReader = binding.createReader(XMLStreamReader.class);
+            return dataReader.read(null, reader, clazz);
+        } catch (Exception ex) {
+            throw new WebApplicationException(ex);
+        }
     }
 
-    protected XMLStreamReader createReader(Class<?> clazz, InputStream is) {
+    protected XMLStreamReader createReader(Class<?> clazz, InputStream is) throws Exception {
         return StaxUtils.createXMLStreamReader(is);
     }
     
@@ -87,20 +92,22 @@
     public void writeTo(Object o, Class<?> clazz, Type genericType, Annotation[] annotations, 
                         MediaType type, MultivaluedMap<String, Object> headers, OutputStream os)
         throws IOException {
-        XMLStreamWriter writer = createWriter(clazz, os);
-        DataWriter<XMLStreamWriter> dataWriter = binding.createWriter(XMLStreamWriter.class);
-        
-        dataWriter.write(o, writer);
         try {
-            writer.flush();
+            XMLStreamWriter writer = createWriter(clazz, os);
+            writeToWriter(writer, o);
         } catch (Exception ex) {
-            // ignore
+            throw new WebApplicationException(ex);
         }
     }
     
-    protected XMLStreamWriter createWriter(Class<?> clazz, OutputStream os) {
-        return StaxUtils.createXMLStreamWriter(os);
+    protected void writeToWriter(XMLStreamWriter writer, Object o) throws Exception {
+        DataWriter<XMLStreamWriter> dataWriter = binding.createWriter(XMLStreamWriter.class);
+        dataWriter.write(o, writer);
+        writer.flush();
     }
     
+    protected XMLStreamWriter createWriter(Class<?> clazz, OutputStream os) throws Exception {
+        return StaxUtils.createXMLStreamWriter(os);
+    }
 }
 

Modified: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java Tue Aug 11 10:23:15 2009
@@ -24,7 +24,6 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
-import java.io.OutputStreamWriter;
 import java.io.SequenceInputStream;
 import java.lang.annotation.Annotation;
 import java.lang.reflect.Type;
@@ -57,11 +56,7 @@
 import org.apache.cxf.jaxrs.utils.InjectionUtils;
 import org.apache.cxf.jaxrs.utils.schemas.SchemaHandler;
 import org.apache.cxf.staxutils.DelegatingXMLStreamWriter;
-import org.codehaus.jettison.AbstractXMLStreamWriter;
-import org.codehaus.jettison.mapped.Configuration;
-import org.codehaus.jettison.mapped.MappedNamespaceConvention;
 import org.codehaus.jettison.mapped.MappedXMLInputFactory;
-import org.codehaus.jettison.mapped.MappedXMLStreamWriter;
 
 @Produces("application/json")
 @Consumes("application/json")
@@ -314,22 +309,9 @@
     protected XMLStreamWriter createWriter(Object actualObject, Class<?> actualClass, 
         Type genericType, String enc, OutputStream os, boolean isCollection) throws Exception {
         QName qname = getQName(actualClass, genericType, actualObject, true);
-        Configuration c = new Configuration(namespaceMap);
-        MappedNamespaceConvention convention = new MappedNamespaceConvention(c);
-        AbstractXMLStreamWriter xsw = new MappedXMLStreamWriter(
-                                            convention, 
-                                            new OutputStreamWriter(os, enc));
-        if (serializeAsArray) {
-            if (arrayKeys != null) {
-                for (String key : arrayKeys) {
-                    xsw.seriliazeAsArray(key);
-                }
-            } else {
-                String key = getKey(convention, qname);
-                xsw.seriliazeAsArray(key);
-            }
-        }
-
+        XMLStreamWriter xsw = JSONUtils.createStreamWriter(os, qname, false, 
+                                                           namespaceMap, serializeAsArray, arrayKeys);
+        
         return isCollection || dropRootElement ? new JSONCollectionWriter(xsw, qname) : xsw; 
     }
     
@@ -345,14 +327,6 @@
         marshal(ms, actualObject, actualClass, genericType, enc, os, false);
     }
     
-    private String getKey(MappedNamespaceConvention convention, QName qname) throws Exception {
-        return convention.createKey(qname.getPrefix(), 
-                                    qname.getNamespaceURI(),
-                                    qname.getLocalPart());
-            
-        
-    }
-    
     private QName getQName(Class<?> cls, Type type, Object object, boolean allocatePrefix) 
         throws Exception {
         QName qname = getJaxbQName(cls, type, object, false);

Added: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,133 @@
+/**
+ * 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.cxf.jaxrs.provider;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.OutputStreamWriter;
+import java.util.Collections;
+import java.util.Iterator;
+import java.util.List;
+import java.util.Map;
+
+import javax.xml.namespace.NamespaceContext;
+import javax.xml.namespace.QName;
+import javax.xml.stream.XMLStreamReader;
+import javax.xml.stream.XMLStreamWriter;
+
+import org.apache.cxf.staxutils.DepthXMLStreamReader;
+import org.codehaus.jettison.AbstractXMLStreamWriter;
+import org.codehaus.jettison.mapped.Configuration;
+import org.codehaus.jettison.mapped.MappedNamespaceConvention;
+import org.codehaus.jettison.mapped.MappedXMLInputFactory;
+import org.codehaus.jettison.mapped.MappedXMLStreamWriter;
+
+public final class JSONUtils {
+
+    private JSONUtils() {
+    }
+    
+    public static XMLStreamWriter createStreamWriter(OutputStream os, 
+                                                     QName qname, boolean writeXsiType,
+                                                     Map<String, String> namespaceMap,
+                                                     boolean serializeAsArray,
+                                                     List<String> arrayKeys) throws Exception {
+        if (writeXsiType) {
+            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
+        }
+        Configuration c = new Configuration(namespaceMap);
+        MappedNamespaceConvention convention = new MappedNamespaceConvention(c);
+        AbstractXMLStreamWriter xsw = new MappedXMLStreamWriter(
+                                            convention, 
+                                            new OutputStreamWriter(os, "UTF-8"));
+        if (serializeAsArray) {
+            if (arrayKeys != null) {
+                for (String key : arrayKeys) {
+                    xsw.seriliazeAsArray(key);
+                }
+            } else {
+                String key = getKey(convention, qname);
+                xsw.seriliazeAsArray(key);
+            }
+        }
+        return xsw;
+    }    
+    
+    private static String getKey(MappedNamespaceConvention convention, QName qname) throws Exception {
+        return convention.createKey(qname.getPrefix(), 
+                                    qname.getNamespaceURI(),
+                                    qname.getLocalPart());
+            
+        
+    }
+    
+    public static XMLStreamReader createStreamReader(InputStream is, boolean readXsiType,
+                                               Map<String, String> namespaceMap) throws Exception {
+        if (readXsiType) {
+            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
+        }
+        MappedXMLInputFactory factory = new MappedXMLInputFactory(namespaceMap);
+        return new JettisonReader(namespaceMap, factory.createXMLStreamReader(is));
+    }
+    
+    private static class JettisonReader extends DepthXMLStreamReader {
+        private Map<String, String> namespaceMap;
+        public JettisonReader(Map<String, String> nsMap,
+                                      XMLStreamReader reader) {
+            super(reader);
+            this.namespaceMap = nsMap;
+        }
+        
+        @Override
+        public String getAttributePrefix(int n) {
+            QName name = getAttributeName(n);
+            if (name != null 
+                && "http://www.w3.org/2001/XMLSchema-instance".equals(name.getNamespaceURI())) {
+                return "xsi";
+            } else {
+                return super.getAttributePrefix(n);
+            }
+        }
+        
+        @Override
+        public NamespaceContext getNamespaceContext() {
+            return new NamespaceContext() {
+
+                public String getNamespaceURI(String prefix) {
+                    for (Map.Entry<String, String> entry : namespaceMap.entrySet()) {
+                        if (entry.getValue().equals(prefix)) {
+                            return entry.getKey();
+                        }
+                    }
+                    return null;
+                }
+
+                public String getPrefix(String ns) {
+                    return namespaceMap.get(ns);
+                }
+
+                public Iterator getPrefixes(String ns) {
+                    String prefix = getPrefix(ns);
+                    return prefix == null ? null : Collections.singletonList(prefix).iterator();
+                }
+                
+            };
+        }
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONUtils.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java (original)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/AegisJSONProviderTest.java Tue Aug 11 10:23:15 2009
@@ -48,7 +48,7 @@
     @Test
     public void testIsReadable() {
         MessageBodyReader<Object> p = new AegisJSONProvider();
-        assertFalse(p.isReadable(AegisTestBean.class, null, null, null));
+        assertTrue(p.isReadable(AegisTestBean.class, null, null, null));
     }
     
     
@@ -69,10 +69,10 @@
         if (setNsMap) {
             Map<String, String> namespaceMap = new HashMap<String, String>();
             namespaceMap.put("http://fortest.jaxrs.cxf.apache.org", "ns1");
-            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsins");
+            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
             p.setNamespaceMap(namespaceMap);
         }
-        String data = "{\"ns1.AegisTestBean\":{\"@xsins.type\":\"ns1:AegisTestBean\","
+        String data = "{\"ns1.AegisTestBean\":{\"@xsi.type\":\"ns1:AegisTestBean\","
             + "\"ns1.boolValue\":true,\"ns1.strValue\":\"hovercraft\"}}";
         
         byte[] simpleBytes = data.getBytes("utf-8");
@@ -85,14 +85,14 @@
     
     @Test
     public void testWriteToWithXsiType() throws Exception {
-        String data = "{\"ns1.AegisTestBean\":{\"@ns2.type\":\"ns1:AegisTestBean\","
+        String data = "{\"ns1.AegisTestBean\":{\"@xsi.type\":\"ns1:AegisTestBean\","
             + "\"ns1.boolValue\":true,\"ns1.strValue\":\"hovercraft\"}}";
         doTestWriteTo(data, true, true);
     }
     
     @Test
     public void testWriteToWithXsiTypeNoNamespaces() throws Exception {
-        String data = "{\"ns1.AegisTestBean\":{\"@xsins.type\":\"ns1:AegisTestBean\","
+        String data = "{\"ns1.AegisTestBean\":{\"@xsi.type\":\"ns1:AegisTestBean\","
             + "\"ns1.boolValue\":true,\"ns1.strValue\":\"hovercraft\"}}";
         doTestWriteTo(data, true, false);
     }
@@ -112,7 +112,7 @@
         if (setNsMap) {
             Map<String, String> namespaceMap = new HashMap<String, String>();
             namespaceMap.put("http://fortest.jaxrs.cxf.apache.org", "ns1");
-            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "ns2");
+            namespaceMap.put("http://www.w3.org/2001/XMLSchema-instance", "xsi");
             p.setNamespaceMap(namespaceMap);
         }    
         ByteArrayOutputStream os = new ByteArrayOutputStream();

Added: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,210 @@
+/**
+ * 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.cxf.jaxrs.provider;
+
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.lang.annotation.Annotation;
+import java.util.Collections;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.POST;
+import javax.ws.rs.Path;
+import javax.ws.rs.PathParam;
+import javax.ws.rs.core.MediaType;
+
+import org.apache.cxf.aegis.databinding.AegisDatabinding;
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.jaxb.JAXBDataBinding;
+import org.apache.cxf.jaxrs.JAXRSServiceImpl;
+import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.model.ClassResourceInfo;
+import org.apache.cxf.jaxrs.resources.Book;
+import org.apache.cxf.jaxrs.resources.sdo.Structure;
+import org.apache.cxf.jaxrs.resources.sdo.impl.StructureImpl;
+import org.apache.cxf.jaxrs.utils.ResourceUtils;
+import org.apache.cxf.sdo.SDODataBinding;
+import org.apache.cxf.service.Service;
+
+import org.junit.Assert;
+import org.junit.Before;
+import org.junit.Ignore;
+import org.junit.Test;
+
+public class DataBindingJSONProviderTest extends Assert {
+
+    private ClassResourceInfo c;
+    private ClassResourceInfo c2;
+    
+    @Before
+    public void setUp() {
+        c = ResourceUtils.createClassResourceInfo(TheBooks.class, TheBooks.class, true, true);
+        c2 = ResourceUtils.createClassResourceInfo(TheSDOBooks.class, TheSDOBooks.class, true, true);
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testSDOWrite() throws Exception {
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c2));
+        DataBinding binding = new SDODataBinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        p.setNamespaceMap(Collections.singletonMap("http://apache.org/structure/types", "p0"));
+        Structure struct = new StructureImpl();
+        struct.getTexts().add("text1");
+        struct.setText("sdo");
+        struct.setInt(3);
+        struct.setDbl(123.5);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        p.writeTo(struct, Structure.class, Structure.class,
+            new Annotation[0], MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), bos);
+        String data = "{\"p0.Structure\":{\"@xsi.type\":\"p0:Structure\",\"p0.text\":\"sdo\",\"p0.int\":3"
+            + ",\"p0.dbl\":123.5,\"p0.texts\":\"text1\"}}";
+        assertEquals(bos.toString(), data);
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testSDORead() throws Exception {
+        String data = "{\"p0.Structure\":{\"@xsi.type\":\"p0:Structure\",\"p0.text\":\"sdo\",\"p0.int\":3"
+            + ",\"p0.dbl\":123.5,\"p0.texts\":\"text1\"}}";
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c2));
+        DataBinding binding = new SDODataBinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        p.setNamespaceMap(Collections.singletonMap("http://apache.org/structure/types", "p0"));
+        ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+        Structure struct = (Structure)p.readFrom((Class)Structure.class, Structure.class,
+                                      new Annotation[0], MediaType.APPLICATION_JSON_TYPE, 
+                                      new MetadataMap<String, String>(), is);
+        assertEquals("sdo", struct.getText());
+        assertEquals(123.5, struct.getDbl(), 0.01);
+        assertEquals(3, struct.getInt());
+    }
+    
+    @Test
+    public void testJAXBWrite() throws Exception {
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c));
+        DataBinding binding = new JAXBDataBinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        Book b = new Book("CXF", 127L);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        p.writeTo(b, Book.class, Book.class,
+            new Annotation[0], MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), bos);
+        String data = "{\"Book\":{\"id\":127,\"name\":\"CXF\",\"state\":\"\"}}";
+        assertEquals(bos.toString(), data);
+    }
+    
+    @SuppressWarnings("unchecked")
+    @Test
+    public void testJAXBRead() throws Exception {
+        String data = "{\"Book\":{\"id\":127,\"name\":\"CXF\",\"state\":\"\"}}";
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c));
+        DataBinding binding = new JAXBDataBinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+        Book book = (Book)p.readFrom((Class)Book.class, Book.class,
+                                      new Annotation[0], MediaType.APPLICATION_JSON_TYPE, 
+                                      new MetadataMap<String, String>(), is);
+        assertEquals("CXF", book.getName());
+        assertEquals(127L, book.getId());
+    }
+    
+    @Test
+    public void testAegisWrite() throws Exception {
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c));
+        s.put("writeXsiType", true);
+        AegisDatabinding binding = new AegisDatabinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        Book b = new Book("CXF", 127L);
+        ByteArrayOutputStream bos = new ByteArrayOutputStream();
+        p.writeTo(b, Book.class, Book.class,
+            new Annotation[0], MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), bos);
+        doTestAegisRead(bos.toString());
+    }
+    
+    @Test
+    public void testAegisRead() throws Exception {
+        String data = "{\"ns1.Book\":{\"@xsi.type\":\"ns1:Book\",\"ns1.id\":127,"
+            + "\"ns1.name\":\"CXF\",\"ns1.state\":\"\"}}";
+        doTestAegisRead(data);
+    }
+    
+    @SuppressWarnings("unchecked")
+    public void doTestAegisRead(String data) throws Exception {
+        Service s = new JAXRSServiceImpl(Collections.singletonList(c));
+        s.put("readXsiType", true);
+        AegisDatabinding binding = new AegisDatabinding();
+        binding.initialize(s);
+        DataBindingJSONProvider p = new DataBindingJSONProvider();
+        p.setDataBinding(binding);
+        ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+        Book book = (Book)p.readFrom((Class)Book.class, Book.class,
+                                      new Annotation[0], MediaType.APPLICATION_XML_TYPE, 
+                                      new MetadataMap<String, String>(), is);
+        assertEquals("CXF", book.getName());
+        assertEquals(127L, book.getId());
+    }
+    
+    @Path("/")
+    @Ignore
+    public static class TheBooks {
+
+        @Path("/books/{bookId}/{new}")
+        public Book getNewBook(Book b) {
+            return new Book();
+        }
+        
+        @Path("/books/{bookId}/{new}")
+        public Book getNewBook2() {
+            return new Book();
+        }
+        
+        @POST
+        public void setNewBook(Book b) {
+        }
+        
+        @Path("/books/{bookId}/{new}")
+        @POST
+        public void setNewBook2(@PathParam("new") String id, Book b) {
+        }
+    }
+    
+    @Path("/")
+    @Ignore
+    public static class TheSDOBooks {
+
+        @GET
+        @Path("/books/{bookId}/{new}")
+        public Structure getStructure() {
+            return null;
+        }
+        
+    }
+}

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingJSONProviderTest.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/systests/pom.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/pom.xml?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/systests/pom.xml (original)
+++ cxf/trunk/systests/pom.xml Tue Aug 11 10:23:15 2009
@@ -503,6 +503,13 @@
         
 
         <dependency>
+            <groupId>org.apache.cxf</groupId>
+            <artifactId>cxf-rt-databinding-sdo</artifactId>
+            <version>${project.version}</version>
+            <scope>test</scope>
+        </dependency>
+
+        <dependency>
             <groupId>org.springframework.security</groupId>
             <artifactId>spring-security-acl</artifactId>
             <version>2.0.4</version>

Modified: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSDataBindingTest.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSDataBindingTest.java?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSDataBindingTest.java (original)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/JAXRSDataBindingTest.java Tue Aug 11 10:23:15 2009
@@ -19,10 +19,20 @@
 
 package org.apache.cxf.systest.jaxrs;
 
+import java.util.ArrayList;
 import java.util.Collections;
+import java.util.List;
 
+import org.apache.cxf.databinding.DataBinding;
+import org.apache.cxf.interceptor.Interceptor;
+import org.apache.cxf.interceptor.LoggingInInterceptor;
+import org.apache.cxf.jaxrs.client.JAXRSClientFactoryBean;
 import org.apache.cxf.jaxrs.client.WebClient;
 import org.apache.cxf.jaxrs.provider.AegisElementProvider;
+import org.apache.cxf.jaxrs.provider.DataBindingJSONProvider;
+import org.apache.cxf.sdo.SDODataBinding;
+import org.apache.cxf.systest.jaxrs.sdo.SDOResource;
+import org.apache.cxf.systest.jaxrs.sdo.Structure;
 import org.apache.cxf.testutil.common.AbstractBusClientServerTestBase;
 
 import org.junit.BeforeClass;
@@ -56,5 +66,39 @@
         assertEquals("CXF in Action", book.getName());
     }
     
+    @Test
+    public void testSDOStructure() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        bean.setDataBinding(new SDODataBinding());
+        bean.setAddress("http://localhost:9080/databinding/sdo");
+        bean.setResourceClass(SDOResource.class);
+        SDOResource client = bean.create(SDOResource.class);
+        Structure struct = client.getStructure();
+        assertEquals("sdo", struct.getText());
+        assertEquals(123.5, struct.getDbl(), 0.01);
+        assertEquals(3, struct.getInt());
+    }
+    
+    @Test
+    public void testSDOStructureJSON() throws Exception {
+        JAXRSClientFactoryBean bean = new JAXRSClientFactoryBean();
+        DataBinding db = new SDODataBinding();
+        bean.setDataBinding(db);
+        DataBindingJSONProvider provider = new DataBindingJSONProvider();
+        provider.setNamespaceMap(Collections.singletonMap("http://apache.org/structure/types", "p0"));
+        provider.setDataBinding(db);
+        bean.setProvider(provider);
+        bean.setAddress("http://localhost:9080/databinding/sdo");
+        bean.setResourceClass(SDOResource.class);
+        List<Interceptor> list = new ArrayList<Interceptor>();
+        list.add(new LoggingInInterceptor());
+        bean.setInInterceptors(list);
+        SDOResource client = bean.create(SDOResource.class);
+        WebClient.client(client).accept("application/json");
+        Structure struct = client.getStructure();
+        assertEquals("sdo", struct.getText());
+        assertEquals(123.5, struct.getDbl(), 0.01);
+        assertEquals(3, struct.getInt());
+    }
     
 }

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,46 @@
+/**
+ * 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.cxf.systest.jaxrs.sdo;
+
+import javax.ws.rs.GET;
+import javax.ws.rs.Path;
+import javax.ws.rs.Produces;
+
+import org.apache.cxf.systest.jaxrs.sdo.impl.StructureImpl;
+
+
+@Path("/structures")
+public class SDOResource {
+    
+    @SuppressWarnings("unchecked")
+    @GET
+    @Path("/structure")
+    @Produces({"application/xml", "application/json" })
+    public Structure getStructure() {
+        Structure struct = new StructureImpl();
+        struct.getTexts().add("text1");
+        struct.setText("sdo");
+        struct.setInt(3);
+        struct.setDbl(123.5);
+        return struct;
+    }
+        
+    
+}

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SDOResource.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,30 @@
+/**
+ * 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.cxf.systest.jaxrs.sdo;
+
+import commonj.sdo.helper.HelperContext;
+
+public interface SdoFactory {
+
+    SdoFactory INSTANCE = org.apache.cxf.systest.jaxrs.sdo.impl.SdoFactoryImpl.init();
+    Structure createStructure();
+    
+    void register(HelperContext scope);
+}
+

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/SdoFactory.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,58 @@
+/**
+ * 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.
+ */
+/**
+ * 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.cxf.systest.jaxrs.sdo;
+
+import java.io.Serializable;
+
+import java.util.List;
+
+public interface Structure extends Serializable {
+    String getText();
+    void setText(String value);
+    void unsetText();
+    boolean isSetText();
+    int getInt();
+    void setInt(int value);
+    void unsetInt();
+    boolean isSetInt();
+    double getDbl();
+    void setDbl(double value);
+    void unsetDbl();
+    boolean isSetDbl();
+    List getTexts();
+}
+

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/Structure.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,185 @@
+/**
+ * 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.cxf.systest.jaxrs.sdo.impl;
+
+import org.apache.cxf.systest.jaxrs.sdo.SdoFactory;
+import org.apache.cxf.systest.jaxrs.sdo.Structure;
+import org.apache.tuscany.sdo.helper.HelperContextImpl;
+import org.apache.tuscany.sdo.impl.FactoryBase;
+import org.apache.tuscany.sdo.model.ModelFactory;
+import org.apache.tuscany.sdo.model.impl.ModelFactoryImpl;
+
+import commonj.sdo.DataObject;
+import commonj.sdo.Property;
+import commonj.sdo.Type;
+import commonj.sdo.helper.HelperContext;
+
+//CHECKSTYLE:OFF
+public class SdoFactoryImpl extends FactoryBase implements SdoFactory {
+    public static final String NAMESPACE_URI = "http://apache.org/structure/types";
+    public static final String NAMESPACE_PREFIX = "tns";
+    public static final String PATTERN_VERSION = "1.2";
+    public static final int STRUCTURE = 1;      
+    private static SdoFactoryImpl instance = null;
+    protected Type structureType = null;
+    private boolean isCreated = false;
+    private boolean isInitialized = false;
+  
+    public SdoFactoryImpl() {
+        super(NAMESPACE_URI, NAMESPACE_PREFIX, "org.apache.cxf.systest.jaxrs.sdo");
+    }
+    
+    public void register(HelperContext scope) {
+    if(scope == null) {
+            throw new IllegalArgumentException("Scope can not be null");
+    }
+    
+    if (((HelperContextImpl)scope).getExtendedMetaData().getPackage(NAMESPACE_URI) != null) {
+            return;
+        }
+    // Register this package with provided scope   
+    ((HelperContextImpl)scope).getExtendedMetaData().putPackage(NAMESPACE_URI, this);
+    
+    //Register dependent packages with provided scope
+        ModelFactory.INSTANCE.register(scope);
+        }
+        
+        public DataObject create(int typeNumber) {
+            switch (typeNumber) {
+            case STRUCTURE : 
+                    return (DataObject)createStructure();
+            default :
+                return super.create(typeNumber);
+            }
+        }
+    
+        public Structure createStructure() {
+            return new StructureImpl();
+        }
+        
+        public Type getStructure() {
+        return structureType;
+        }
+                
+        public static SdoFactoryImpl init() {
+            if (instance != null) {
+                return instance;
+            }
+            instance = new SdoFactoryImpl();
+    
+            instance.createMetaData();
+            instance.initializeMetaData();
+            return instance;
+        }
+      
+        public void createMetaData() {
+            if (isCreated) {
+                return;
+            }
+            isCreated = true;   
+    
+            structureType = createType(false, STRUCTURE);
+            createProperty(true, structureType,StructureImpl._INTERNAL_TEXT); 
+            createProperty(true, structureType,StructureImpl._INTERNAL_INT); 
+            createProperty(true, structureType,StructureImpl._INTERNAL_DBL); 
+            createProperty(true, structureType,StructureImpl._INTERNAL_TEXTS); 
+        }
+        
+        public void initializeMetaData() {
+            if (isInitialized) {
+                return;
+            }
+            isInitialized = true;
+        
+            ModelFactoryImpl theModelPackageImpl = (ModelFactoryImpl)ModelFactoryImpl.init();
+                Property property = null;
+        
+                // Add supertypes to types
+    
+    
+        initializeType(structureType, Structure.class, "Structure", false);
+        property = getLocalProperty(structureType, 0);
+        initializeProperty(property, theModelPackageImpl.getString(), "text", null, 1, 1, 
+                           Structure.class, false, true, false);
+    
+        property = getLocalProperty(structureType, 1);
+        initializeProperty(property, theModelPackageImpl.getInt(), "int", null, 1, 1, 
+                           Structure.class, false, true, false);
+    
+        property = getLocalProperty(structureType, 2);
+        initializeProperty(property, theModelPackageImpl.getDouble(), "dbl", null, 1, 1, 
+                           Structure.class, false, true, false);
+    
+        property = getLocalProperty(structureType, 3);
+        initializeProperty(property, theModelPackageImpl.getString(), "texts", null, 1, -1, 
+                           Structure.class, false, false, false);
+    
+    
+        createXSDMetaData(theModelPackageImpl);
+    }
+      
+    protected void createXSDMetaData(ModelFactoryImpl theModelPackageImpl)
+    {
+        super.initXSD();
+        
+        addXSDMapping
+          (structureType,
+                 new String[] {
+                     "name", "Structure",
+                     "kind", "elementOnly"
+                 });
+    
+        addXSDMapping
+                (getLocalProperty(structureType, 0),
+                 new String[] {
+                     "kind", "element",
+                     "name", "text",
+                     "namespace", "##targetNamespace"
+                 });
+    
+        addXSDMapping
+                (getLocalProperty(structureType, 1),
+                 new String[] {
+                     "kind", "element",
+                     "name", "int",
+                     "namespace", "##targetNamespace"
+                 });
+    
+        addXSDMapping
+                (getLocalProperty(structureType, 2),
+                 new String[] {
+                     "kind", "element",
+                     "name", "dbl",
+                     "namespace", "##targetNamespace"
+                 });
+    
+        addXSDMapping
+                (getLocalProperty(structureType, 3),
+                 new String[] {
+                     "kind", "element",
+                     "name", "texts",
+                     "namespace", "##targetNamespace"
+                 });
+      }
+    
+    
+    
+} //SdoFactoryImpl
+//CHECKSTYLE:ON
\ No newline at end of file

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/SdoFactoryImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Added: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java?rev=803056&view=auto
==============================================================================
--- cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java (added)
+++ cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java Tue Aug 11 10:23:15 2009
@@ -0,0 +1,495 @@
+/**
+ * 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.cxf.systest.jaxrs.sdo.impl;
+
+import java.util.Collection;
+import java.util.List;
+
+import org.apache.cxf.systest.jaxrs.sdo.SdoFactory;
+import org.apache.cxf.systest.jaxrs.sdo.Structure;
+import org.apache.tuscany.sdo.impl.DataObjectBase;
+
+import commonj.sdo.Type;
+
+//CHECKSTYLE:OFF
+public class StructureImpl extends DataObjectBase implements Structure {
+
+    public final static int TEXT = 0;
+    
+    public final static int INT = 1;
+    
+    public final static int DBL = 2;
+    
+    public final static int TEXTS = 3;
+    
+    public final static int SDO_PROPERTY_COUNT = 4;
+    
+    public final static int EXTENDED_PROPERTY_COUNT = 0;
+
+
+    /**
+     * The internal feature id for the '<em><b>Text</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */ 
+    public final static int _INTERNAL_TEXT = 0;
+    
+    /**
+     * The internal feature id for the '<em><b>Int</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */ 
+    public final static int _INTERNAL_INT = 1;
+    
+    /**
+     * The internal feature id for the '<em><b>Dbl</b></em>' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */ 
+    public final static int _INTERNAL_DBL = 2;
+    
+    /**
+     * The internal feature id for the '<em><b>Texts</b></em>' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */ 
+    public final static int _INTERNAL_TEXTS = 3;
+    
+    /**
+     * The number of properties for this type.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    public final static int INTERNAL_PROPERTY_COUNT = 4;
+    
+    /**
+     * The default value of the '{@link #getText() <em>Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getText()
+     * @generated
+     * @ordered
+     */
+    protected static final String TEXT_DEFAULT_ = null;
+    
+    /**
+     * The cached value of the '{@link #getText() <em>Text</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getText()
+     * @generated
+     * @ordered
+     */
+    protected String text = TEXT_DEFAULT_;
+    
+    /**
+     * This is true if the Text attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean text_set_ = false;
+    
+    /**
+     * The default value of the '{@link #getInt() <em>Int</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInt()
+     * @generated
+     * @ordered
+     */
+    protected static final int INT_DEFAULT_ = 0;
+    
+    /**
+     * The cached value of the '{@link #getInt() <em>Int</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getInt()
+     * @generated
+     * @ordered
+     */
+    protected int int_ = INT_DEFAULT_;
+    
+    /**
+     * This is true if the Int attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean int_set_ = false;
+    
+    /**
+     * The default value of the '{@link #getDbl() <em>Dbl</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDbl()
+     * @generated
+     * @ordered
+     */
+    protected static final double DBL_DEFAULT_ = 0.0;
+    
+    /**
+     * The cached value of the '{@link #getDbl() <em>Dbl</em>}' attribute.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getDbl()
+     * @generated
+     * @ordered
+     */
+    protected double dbl = DBL_DEFAULT_;
+    
+    /**
+     * This is true if the Dbl attribute has been set.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     * @ordered
+     */
+    protected boolean dbl_set_ = false;
+    
+    /**
+     * The cached value of the '{@link #getTexts() <em>Texts</em>}' attribute list.
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @see #getTexts()
+     * @generated
+     * @ordered
+     */
+    
+    protected List texts = null;
+    
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public StructureImpl() {
+        super();
+    }
+    
+    
+    protected int internalConvertIndex(int internalIndex) {
+        switch (internalIndex) {
+            case _INTERNAL_TEXT: 
+                return TEXT;
+            case _INTERNAL_INT: 
+                return INT;
+            case _INTERNAL_DBL: 
+                return DBL;
+            case _INTERNAL_TEXTS: 
+                return TEXTS;
+        }
+        return super.internalConvertIndex(internalIndex);
+    }
+    
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Type getStaticType() {
+        return ((SdoFactoryImpl)SdoFactory.INSTANCE).getStructure();
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getStaticPropertyCount() {
+        return INTERNAL_PROPERTY_COUNT;
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String getText() {
+        return text;
+    }
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setText(String newText) {
+        String oldText = text;
+        text = newText;
+        boolean oldText_set_ = text_set_;
+        text_set_ = true;
+        if (isNotifying()) {
+            notify(ChangeKind.SET, _INTERNAL_TEXT, oldText, text, !oldText_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetText() {
+        String oldText = text;
+        boolean oldText_set_ = text_set_;
+        text = TEXT_DEFAULT_;
+        text_set_ = false;
+        if (isNotifying()) {
+            notify(ChangeKind.UNSET, _INTERNAL_TEXT, oldText, TEXT_DEFAULT_, oldText_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetText() {
+        return text_set_;
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public int getInt() {
+        return int_;
+    }
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setInt(int newInt) {
+        int oldInt = int_;
+        int_ = newInt;
+        boolean oldInt_set_ = int_set_;
+        int_set_ = true;
+        if (isNotifying()) {
+            notify(ChangeKind.SET, _INTERNAL_INT, oldInt, int_, !oldInt_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetInt() {
+        int oldInt = int_;
+        boolean oldInt_set_ = int_set_;
+        int_ = INT_DEFAULT_;
+        int_set_ = false;
+        if (isNotifying()) {
+            notify(ChangeKind.UNSET, _INTERNAL_INT, oldInt, INT_DEFAULT_, oldInt_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetInt() {
+        return int_set_;
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public double getDbl() {
+        return dbl;
+    }
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void setDbl(double newDbl) {
+        double oldDbl = dbl;
+        dbl = newDbl;
+        boolean oldDbl_set_ = dbl_set_;
+        dbl_set_ = true;
+        if (isNotifying()) {
+            notify(ChangeKind.SET, _INTERNAL_DBL, oldDbl, dbl, !oldDbl_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unsetDbl() {
+        double oldDbl = dbl;
+        boolean oldDbl_set_ = dbl_set_;
+        dbl = DBL_DEFAULT_;
+        dbl_set_ = false;
+        if (isNotifying()) {
+            notify(ChangeKind.UNSET, _INTERNAL_DBL, oldDbl, DBL_DEFAULT_, oldDbl_set_);
+        }
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSetDbl() {
+        return dbl_set_;
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public List getTexts() {
+        if (texts == null) {
+          texts = createPropertyList(ListKind.DATATYPE, String.class, TEXTS, 0);
+        }
+        return texts;
+    }
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public Object get(int propertyIndex, boolean resolve) {
+        switch (propertyIndex) {
+            case TEXT :
+                return getText();
+            case INT :
+                return new Integer(getInt());
+            case DBL :
+                return new Double(getDbl());
+            case TEXTS :
+                return getTexts();
+        }
+        return super.get(propertyIndex, resolve);
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    @SuppressWarnings("unchecked")
+    public void set(int propertyIndex, Object newValue) {
+        switch (propertyIndex) {
+            case TEXT :
+                setText((String)newValue);
+                return;
+            case INT :
+                setInt(((Integer)newValue).intValue());
+                return;
+            case DBL :
+                setDbl(((Double)newValue).doubleValue());
+                return;
+            case TEXTS :
+                getTexts().clear();
+                getTexts().addAll((Collection)newValue);
+            return;
+        }
+        super.set(propertyIndex, newValue);
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public void unset(int propertyIndex) {
+        switch (propertyIndex) {
+            case TEXT :
+                unsetText();
+                return;
+            case INT :
+                unsetInt();
+                return;
+            case DBL :
+                unsetDbl();
+                return;
+            case TEXTS :
+                getTexts().clear();
+                return;
+        }
+        super.unset(propertyIndex);
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public boolean isSet(int propertyIndex) {
+        switch (propertyIndex) {
+            case TEXT :
+                return isSetText();
+            case INT :
+                return isSetInt();
+            case DBL :
+                return isSetDbl();
+            case TEXTS :
+                return texts != null && !texts.isEmpty();
+        }
+        return super.isSet(propertyIndex);
+    }
+    
+    /**
+     * <!-- begin-user-doc -->
+     * <!-- end-user-doc -->
+     * @generated
+     */
+    public String toString() {
+        if (isProxy(this)) {
+            return super.toString();
+        }
+    
+        StringBuffer result = new StringBuffer(super.toString());
+        result.append(" (text: ");
+        if (text_set_) result.append(text); else result.append("<unset>");
+        result.append(", int: ");
+        if (int_set_) result.append(int_); else result.append("<unset>");
+        result.append(", dbl: ");
+        if (dbl_set_) result.append(dbl); else result.append("<unset>");
+        result.append(", texts: ");
+        result.append(texts);
+        result.append(')');
+        return result.toString();
+    }
+
+}
+//CHECKSTYLE:ON
\ No newline at end of file

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java
------------------------------------------------------------------------------
    svn:eol-style = native

Propchange: cxf/trunk/systests/src/test/java/org/apache/cxf/systest/jaxrs/sdo/impl/StructureImpl.java
------------------------------------------------------------------------------
    svn:keywords = Rev Date

Modified: cxf/trunk/systests/src/test/resources/jaxrs_databinding/WEB-INF/beans.xml
URL: http://svn.apache.org/viewvc/cxf/trunk/systests/src/test/resources/jaxrs_databinding/WEB-INF/beans.xml?rev=803056&r1=803055&r2=803056&view=diff
==============================================================================
--- cxf/trunk/systests/src/test/resources/jaxrs_databinding/WEB-INF/beans.xml (original)
+++ cxf/trunk/systests/src/test/resources/jaxrs_databinding/WEB-INF/beans.xml Tue Aug 11 10:23:15 2009
@@ -45,6 +45,8 @@
 
   <bean class="org.apache.cxf.systest.jaxrs.BookStoreSpring" id="serviceBean"/>
   
+  <bean class="org.apache.cxf.systest.jaxrs.sdo.SDOResource" id="sdoBean"/>
+  
   <jaxrs:server id="jaxbbook" address="/jaxb">
     <jaxrs:serviceBeans>
       <ref bean="serviceBean" />
@@ -67,7 +69,29 @@
         </bean> 
     </jaxrs:dataBinding> 
   </jaxrs:server>
+  
+  
+  <jaxrs:server id="sdo" address="/sdo">
+    <jaxrs:serviceBeans>
+      <ref bean="sdoBean" />
+    </jaxrs:serviceBeans>		   
+    <jaxrs:dataBinding> 
+      <ref bean="sdoDatabinding"/>
+    </jaxrs:dataBinding> 
+    <jaxrs:providers>
+      <ref bean="jsonSdoBean" />
+    </jaxrs:providers>
+  </jaxrs:server>
+
+  <bean id="sdoDatabinding" class="org.apache.cxf.sdo.SDODataBinding"/>
+  <bean id="jsonSdoBean" class="org.apache.cxf.jaxrs.provider.DataBindingJSONProvider">
+      <property name="dataBinding" ref="sdoDatabinding"/>
+      <property name="namespaceMap" ref="jsonNamespaceMap"/>
+  </bean>
 
+  <util:map id="jsonNamespaceMap" map-class="java.util.Hashtable">
+       <entry key="http://apache.org/structure/types" value="p0"/>
+  </util:map>
 
 </beans>
 <!-- END SNIPPET: beans -->