Author: sergeyb
Date: Mon Dec 27 17:46:13 2010
New Revision: 1053114
URL: http://svn.apache.org/viewvc?rev=1053114&view=rev
Log:
[CXF-2626] Adding DataBindingProvider and XmlBeansDataBinding tests
Added:
cxf/trunk/rt/frontend/jaxrs/src/test/xsd/
cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/
cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd (with
props)
Modified:
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
cxf/trunk/rt/frontend/jaxrs/pom.xml
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingProviderTest.java
Modified:
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java?rev=1053114&r1=1053113&r2=1053114&view=diff
==============================================================================
---
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
(original)
+++
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataReaderImpl.java
Mon Dec 27 17:46:13 2010
@@ -19,7 +19,9 @@
package org.apache.cxf.xmlbeans;
+import java.lang.reflect.Field;
import java.lang.reflect.Method;
+import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.logging.Logger;
@@ -58,6 +60,34 @@ public class DataReaderImpl implements D
typeClass =
(Class<?>)part.getProperty(XmlAnySimpleType.class.getName());
unwrap = true;
}
+ return doRead(reader,
+ part.getTypeClass(),
+ typeClass,
+
(SchemaType)part.getProperty(SchemaType.class.getName()),
+ unwrap);
+ }
+
+ public Object read(QName name, XMLStreamReader reader, Class typeClass) {
+ SchemaType st = null;
+ try {
+ Field f = typeClass.getField("type");
+ if (Modifier.isStatic(f.getModifiers())) {
+ st = (SchemaType)f.get(null);
+ }
+ } catch (Exception es) {
+ es.printStackTrace();
+ return null;
+ }
+
+ return doRead(reader,
+ typeClass,
+ typeClass,
+ st,
+ false);
+ }
+
+ private Object doRead(XMLStreamReader reader, Class<?> partTypeClass,
+ Class<?> typeClass, SchemaType st, boolean unwrap) {
boolean isOutClass = false;
Class<?> encClass = typeClass.getEnclosingClass();
if (encClass != null) {
@@ -69,8 +99,6 @@ public class DataReaderImpl implements D
for (Class<?> c : cls) {
if ("Factory".equals(c.getSimpleName())) {
try {
-
- SchemaType st =
(SchemaType)part.getProperty(SchemaType.class.getName());
XmlOptions options = new XmlOptions();
if (validate) {
options.setValidateOnSet();
@@ -82,13 +110,13 @@ public class DataReaderImpl implements D
obj = meth.invoke(null, reader, options);
break;
} catch (Exception e) {
- throw new Fault(new Message("UNMARSHAL_ERROR", LOG,
part.getTypeClass()), e);
+ throw new Fault(new Message("UNMARSHAL_ERROR", LOG,
partTypeClass, e));
}
}
}
if (unwrap && obj != null) {
try {
- Class<?> tc = part.getTypeClass();
+ Class<?> tc = partTypeClass;
String methName;
if (tc.equals(Integer.TYPE) || tc.equals(Integer.class)) {
methName = "getIntValue";
@@ -108,7 +136,7 @@ public class DataReaderImpl implements D
for (Method m : encClass.getDeclaredMethods()) {
if (m.getName().startsWith("get")
&& m.getParameterTypes().length == 0
- && m.getReturnType().equals(part.getTypeClass())) {
+ && m.getReturnType().equals(partTypeClass)) {
try {
obj = m.invoke(obj);
} catch (Exception e) {
@@ -126,11 +154,6 @@ public class DataReaderImpl implements D
}
return obj;
}
-
- public Object read(QName name, XMLStreamReader input, Class type) {
- return null;
- }
-
public void setAttachments(Collection<Attachment> attachments) {
}
Modified:
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java?rev=1053114&r1=1053113&r2=1053114&view=diff
==============================================================================
---
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
(original)
+++
cxf/trunk/rt/databinding/xmlbeans/src/main/java/org/apache/cxf/xmlbeans/DataWriterImpl.java
Mon Dec 27 17:46:13 2010
@@ -26,6 +26,7 @@ import java.lang.reflect.Modifier;
import java.util.Collection;
import java.util.logging.Logger;
+import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamException;
import javax.xml.stream.XMLStreamReader;
import javax.xml.stream.XMLStreamWriter;
@@ -70,7 +71,7 @@ public class DataWriterImpl implements D
public void write(Object obj, MessagePartInfo part, XMLStreamWriter
output) {
try {
- Class<?> typeClass = part.getTypeClass();
+ Class<?> typeClass = part != null ? part.getTypeClass() : null;
if (typeClass == null) {
typeClass = obj.getClass();
}
@@ -158,7 +159,9 @@ public class DataWriterImpl implements D
Field f = typeClass.getField("type");
if (Modifier.isStatic(f.getModifiers())) {
st = (SchemaType)f.get(null);
- part.setProperty(SchemaType.class.getName(), st);
+ if (part != null) {
+ part.setProperty(SchemaType.class.getName(),
st);
+ }
}
} catch (Exception es) {
//ignore
@@ -172,20 +175,23 @@ public class DataWriterImpl implements D
if (st != null && !st.isDocumentType()
|| reader.getEventType() == XMLStreamReader.CHARACTERS) {
- if
(StringUtils.isEmpty(part.getConcreteName().getNamespaceURI())) {
-
output.writeStartElement(part.getConcreteName().getLocalPart());
+
+ QName elementName = part != null ? part.getConcreteName()
: st.getName();
+
+ if (StringUtils.isEmpty(elementName.getNamespaceURI())) {
+ output.writeStartElement(elementName.getLocalPart());
} else {
- String pfx =
output.getPrefix(part.getConcreteName().getNamespaceURI());
+ String pfx =
output.getPrefix(elementName.getNamespaceURI());
if (StringUtils.isEmpty(pfx)) {
output.writeStartElement("tns",
-
part.getConcreteName().getLocalPart(),
-
part.getConcreteName().getNamespaceURI());
- output.writeNamespace("tns",
part.getConcreteName().getNamespaceURI());
+
elementName.getLocalPart(),
+
elementName.getNamespaceURI());
+ output.writeNamespace("tns",
elementName.getNamespaceURI());
} else {
output.writeStartElement(pfx,
-
part.getConcreteName().getLocalPart(),
-
part.getConcreteName().getNamespaceURI());
+
elementName.getLocalPart(),
+
elementName.getNamespaceURI());
}
}
StaxUtils.copy(reader, output, true);
Modified: cxf/trunk/rt/frontend/jaxrs/pom.xml
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/pom.xml?rev=1053114&r1=1053113&r2=1053114&view=diff
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/pom.xml (original)
+++ cxf/trunk/rt/frontend/jaxrs/pom.xml Mon Dec 27 17:46:13 2010
@@ -161,9 +161,38 @@
<artifactId>xmlbeans</artifactId>
</dependency>
<dependency>
+ <groupId>org.apache.cxf</groupId>
+ <artifactId>cxf-rt-databinding-xmlbeans</artifactId>
+ <version>${project.version}</version>
+ <scope>test</scope>
+ </dependency>
+ <dependency>
<groupId>org.easymock</groupId>
<artifactId>easymockclassextension</artifactId>
<scope>test</scope>
</dependency>
</dependencies>
+ <build>
+ <plugins>
+ <plugin>
+ <groupId>org.codehaus.mojo</groupId>
+ <artifactId>xmlbeans-maven-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>xmlbeans-test</goal>
+ </goals>
+ </execution>
+ </executions>
+ <configuration>
+ <schemaDirectory>src/test/xsd/xmlbeans</schemaDirectory>
+
<sourceGenerationDirectory>${project.build.directory}/generated/src/test/java</sourceGenerationDirectory>
+
<classGenerationDirectory>${project.build.directory}/generated/src/test/resources</classGenerationDirectory>
+ <!--noJavac>true</noJavac-->
+ <javaSource>1.5</javaSource>
+ </configuration>
+ </plugin>
+
+ </plugins>
+ </build>
</project>
Modified:
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingProviderTest.java
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingProviderTest.java?rev=1053114&r1=1053113&r2=1053114&view=diff
==============================================================================
---
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingProviderTest.java
(original)
+++
cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/DataBindingProviderTest.java
Mon Dec 27 17:46:13 2010
@@ -40,12 +40,14 @@ import org.apache.cxf.jaxb.JAXBDataBindi
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.providers.xmlbeans.types.Address;
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.apache.cxf.xmlbeans.XmlBeansDataBinding;
import org.junit.Assert;
import org.junit.Before;
@@ -56,12 +58,14 @@ public class DataBindingProviderTest ext
private ClassResourceInfo c;
private ClassResourceInfo c2;
+ private ClassResourceInfo c3;
private Properties properties;
@Before
public void setUp() throws InvalidPropertiesFormatException, IOException {
c = ResourceUtils.createClassResourceInfo(TheBooks.class,
TheBooks.class, true, true);
c2 = ResourceUtils.createClassResourceInfo(TheSDOBooks.class,
TheSDOBooks.class, true, true);
+ c3 = ResourceUtils.createClassResourceInfo(TheSDOBooks.class,
TheSDOBooks.class, true, true);
properties = new Properties();
properties.loadFromXML(getClass().getResourceAsStream("jsonCases.xml"));
}
@@ -176,6 +180,40 @@ public class DataBindingProviderTest ext
assertEquals(3, struct.getInt());
}
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testXmlBeansWrite() throws Exception {
+ Service s = new JAXRSServiceImpl(Collections.singletonList(c3), true);
+ DataBinding binding = new XmlBeansDataBinding();
+ binding.initialize(s);
+ DataBindingProvider p = new DataBindingProvider(binding);
+ Address address = Address.Factory.newInstance();
+ address.setAddressLine1("Street 1");
+
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ p.writeTo(address, Address.class, Address.class,
+ new Annotation[0], MediaType.TEXT_XML_TYPE, new
MetadataMap<String, Object>(), bos);
+ String data = "<tns:Address
xmlns:tns=\"http://cxf.apache.org/jaxrs/providers/xmlbeans/types\">"
+ + "<addressLine1>Street 1</addressLine1></tns:Address>";
+ assertEquals(bos.toString(), data);
+ }
+
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testXmlBeansRead() throws Exception {
+ String data = "<tns:Address
xmlns:tns=\"http://cxf.apache.org/jaxrs/providers/xmlbeans/types\">"
+ + "<addressLine1>Street 1</addressLine1></tns:Address>";
+ Service s = new JAXRSServiceImpl(Collections.singletonList(c3), true);
+ DataBinding binding = new XmlBeansDataBinding();
+ binding.initialize(s);
+ DataBindingProvider p = new DataBindingProvider(binding);
+ ByteArrayInputStream is = new ByteArrayInputStream(data.getBytes());
+ Address address = (Address)p.readFrom((Class)Address.class,
Address.class,
+ new Annotation[0],
MediaType.APPLICATION_XML_TYPE,
+ new MetadataMap<String, String>(), is);
+ assertEquals("Street 1", address.getAddressLine1());
+ }
+
@Path("/")
@Ignore
public static class TheBooks {
@@ -211,4 +249,16 @@ public class DataBindingProviderTest ext
}
}
+
+ @Path("/")
+ @Ignore
+ public static class TheXmlBeansBooks {
+
+ @GET
+ @Path("/books/{bookId}/{new}")
+ public Address getStructure() {
+ return null;
+ }
+
+ }
}
Added: cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd
URL:
http://svn.apache.org/viewvc/cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd?rev=1053114&view=auto
==============================================================================
--- cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd (added)
+++ cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd Mon Dec
27 17:46:13 2010
@@ -0,0 +1,34 @@
+<?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.
+-->
+<!--XSD file template-->
+<schema targetNamespace="http://cxf.apache.org/jaxrs/providers/xmlbeans/types"
+ xmlns="http://www.w3.org/2001/XMLSchema"
+ xmlns:tns="http://cxf.apache.org/jaxrs/providers/xmlbeans/types">
+ <complexType name="Address">
+ <sequence>
+ <element name="addressLine1" type="string"/>
+ <element name="addressLine2" nillable="true" type="string"/>
+ <element name="city" type="string"/>
+ <element name="stateProvinceRegion" type="string"/>
+ <element name="ZIPPostalCode" nillable="true" type="string"/>
+ <element name="country" type="string"/>
+ </sequence>
+ </complexType>
+</schema>
Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd
------------------------------------------------------------------------------
svn:keywords = Rev Date
Propchange: cxf/trunk/rt/frontend/jaxrs/src/test/xsd/xmlbeans/XmlBeanTest.xsd
------------------------------------------------------------------------------
svn:mime-type = text/xml