Author: sergeyb
Date: Tue Apr 5 14:49:20 2011
New Revision: 1089069
URL: http://svn.apache.org/viewvc?rev=1089069&view=rev
Log:
Merged revisions 1089065 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r1089065 | sergeyb | 2011-04-05 15:46:14 +0100 (Tue, 05 Apr 2011) | 1 line
Using the actual class to get the package as opposed to Package.getPackage
........
Modified:
cxf/branches/2.3.x-fixes/ (props changed)
cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Tue Apr 5 14:49:20 2011
@@ -1 +1 @@
-/cxf/trunk:1087817
+/cxf/trunk:1087817,1089065
Propchange: cxf/branches/2.3.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified:
cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java?rev=1089069&r1=1089068&r2=1089069&view=diff
==============================================================================
---
cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
(original)
+++
cxf/branches/2.3.x-fixes/common/common/src/main/java/org/apache/cxf/jaxb/JAXBUtils.java
Tue Apr 5 14:49:20 2011
@@ -778,7 +778,7 @@ public final class JAXBUtils {
}
public static String getPackageNamespace(Class<?> cls) {
- Package p = Package.getPackage(PackageUtils.getPackageName(cls));
+ Package p = cls.getPackage();
if (p != null) {
javax.xml.bind.annotation.XmlSchema schemaAnn =
p.getAnnotation(javax.xml.bind.annotation.XmlSchema.class);
Modified:
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=1089069&r1=1089068&r2=1089069&view=diff
==============================================================================
---
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
(original)
+++
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
Tue Apr 5 14:49:20 2011
@@ -53,6 +53,7 @@ import javax.xml.bind.Marshaller;
import javax.xml.bind.Unmarshaller;
import javax.xml.bind.annotation.XmlAnyElement;
import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.adapters.XmlAdapter;
import javax.xml.bind.annotation.adapters.XmlJavaTypeAdapter;
import javax.xml.namespace.NamespaceContext;
@@ -66,9 +67,6 @@ import javax.xml.validation.Schema;
import org.apache.cxf.common.i18n.BundleUtils;
import org.apache.cxf.common.logging.LogUtils;
import org.apache.cxf.common.util.PackageUtils;
-import org.apache.cxf.common.util.ReflectionInvokationHandler;
-import org.apache.cxf.jaxb.JAXBBeanInfo;
-import org.apache.cxf.jaxb.JAXBContextProxy;
import org.apache.cxf.jaxb.JAXBUtils;
import org.apache.cxf.jaxrs.ext.MessageContext;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
@@ -100,7 +98,7 @@ public abstract class AbstractJAXBProvid
protected Set<Class<?>> collectionContextClasses = new HashSet<Class<?>>();
protected JAXBContext collectionContext;
- protected Map<String, String> jaxbElementClassMap;
+ protected Map<String, String> jaxbElementClassMap = Collections.emptyMap();
protected boolean unmarshalAsJaxbElement;
protected boolean marshalAsJaxbElement;
@@ -116,7 +114,7 @@ public abstract class AbstractJAXBProvid
private Schema schema;
private String collectionWrapperName;
private Map<String, String> collectionWrapperMap;
- private List<String> jaxbElementClassNames;
+ private List<String> jaxbElementClassNames = Collections.emptyList();
private Map<String, Object> cProperties;
private Map<String, Object> uProperties;
@@ -193,27 +191,27 @@ public abstract class AbstractJAXBProvid
return null;
}
+ protected static boolean isXmlRoot(Class<?> cls) {
+ return cls.getAnnotation(XmlRootElement.class) != null;
+ }
+
@SuppressWarnings("unchecked")
protected Object convertToJaxbElementIfNeeded(Object obj, Class<?> cls,
Type genericType)
throws Exception {
- QName name = null;
- if (jaxbElementClassNames != null &&
jaxbElementClassNames.contains(cls.getName())
- || jaxbElementClassMap != null &&
jaxbElementClassMap.containsKey(cls.getName())) {
- if (jaxbElementClassMap != null) {
- name =
JAXRSUtils.convertStringToQName(jaxbElementClassMap.get(cls.getName()));
- } else {
- name = getJaxbQName(cls, genericType, obj, false);
- }
- }
- if (name == null && marshalAsJaxbElement) {
- name = new QName(getPackageNamespace(cls),
- cls.getSimpleName());
+ boolean asJaxbElement = jaxbElementClassNames.contains(cls.getName());
+ if (!asJaxbElement && isXmlRoot(cls)) {
+ return obj;
}
- if (name != null) {
- return new JAXBElement(name, cls, null, obj);
+
+ QName name = null;
+ String expandedName = jaxbElementClassMap.get(cls.getName());
+ if (expandedName != null) {
+ name = JAXRSUtils.convertStringToQName(expandedName);
+ } else if (marshalAsJaxbElement || asJaxbElement) {
+ name = getJaxbQName(cls, genericType, obj, false);
}
- return obj;
+ return name != null ? new JAXBElement(name, cls, null, obj) : obj;
}
public void setCollectionWrapperName(String wName) {
@@ -281,32 +279,23 @@ public abstract class AbstractJAXBProvid
}
XmlRootElement root = cls.getAnnotation(XmlRootElement.class);
- QName qname = null;
if (root != null) {
- String namespace = getNamespace(root.namespace());
- if ("".equals(namespace)) {
- namespace = getPackageNamespace(cls);
- }
- String name = getLocalName(root.name(), cls.getSimpleName(),
pluralName);
- return new QName(namespace, name);
+ return getQNameFromNamespaceAndName(root.namespace(), root.name(),
cls, pluralName);
+ } else if (cls.getAnnotation(XmlType.class) != null) {
+ XmlType xmlType = cls.getAnnotation(XmlType.class);
+ return getQNameFromNamespaceAndName(xmlType.namespace(),
xmlType.name(), cls, pluralName);
} else {
- JAXBContext context = getJAXBContext(cls, type);
- JAXBContextProxy proxy =
ReflectionInvokationHandler.createProxyWrapper(context,
-
JAXBContextProxy.class);
- JAXBBeanInfo info = JAXBUtils.getBeanInfo(proxy, cls);
- if (info != null) {
- try {
- Object instance = object == null ? cls.newInstance() :
object;
- String name =
getLocalName(info.getElementLocalName(instance), cls.getSimpleName(),
- pluralName);
- String namespace =
getNamespace(info.getElementNamespaceURI(instance));
- return new QName(namespace, name);
- } catch (Exception ex) {
- // ignore
- }
- }
+ return new QName(getPackageNamespace(cls), cls.getSimpleName());
+ }
+ }
+
+ private QName getQNameFromNamespaceAndName(String ns, String localName,
Class<?> cls, boolean plural) {
+ String name = getLocalName(localName, cls.getSimpleName() , plural);
+ String namespace = getNamespace(ns);
+ if ("".equals(namespace)) {
+ namespace = getPackageNamespace(cls);
}
- return qname;
+ return new QName(namespace, name);
}
private String getLocalName(String name, String clsName, boolean
pluralName) {
@@ -439,7 +428,7 @@ public abstract class AbstractJAXBProvid
|| isSkipJaxbChecks()) {
return true;
}
- return type.getAnnotation(XmlRootElement.class) != null
+ return isXmlRoot(type)
|| JAXBElement.class.isAssignableFrom(type)
|| objectFactoryOrIndexAvailable(type)
|| (type != genericType && objectFactoryForType(genericType))
Modified:
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java?rev=1089069&r1=1089068&r2=1089069&view=diff
==============================================================================
---
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
(original)
+++
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/fortest/jaxb/packageinfo/Book2NoRootElement.java
Tue Apr 5 14:49:20 2011
@@ -18,7 +18,9 @@
*/
package org.apache.cxf.jaxrs.fortest.jaxb.packageinfo;
+import javax.xml.bind.annotation.XmlType;
+@XmlType(name = "book2")
public class Book2NoRootElement {
private int id;
Modified:
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
URL:
http://svn.apache.org/viewvc/cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java?rev=1089069&r1=1089068&r2=1089069&view=diff
==============================================================================
---
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
(original)
+++
cxf/branches/2.3.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JAXBElementProviderTest.java
Tue Apr 5 14:49:20 2011
@@ -65,6 +65,7 @@ import org.w3c.dom.Node;
import org.xml.sax.ContentHandler;
import org.apache.cxf.jaxrs.ext.xml.XMLSource;
+import org.apache.cxf.jaxrs.fortest.jaxb.packageinfo.Book2;
import org.apache.cxf.jaxrs.fortest.jaxb.packageinfo.Book2NoRootElement;
import org.apache.cxf.jaxrs.impl.MetadataMap;
import org.apache.cxf.jaxrs.model.ClassResourceInfo;
@@ -380,6 +381,8 @@ public class JAXBElementProviderTest ext
Book2NoRootElement.class,
new Annotation[0], MediaType.TEXT_XML_TYPE,
new MetadataMap<String, Object>(), bos);
+ assertTrue(bos.toString().contains("book2"));
+ assertTrue(bos.toString().contains("http://superbooks"));
provider.setUnmarshallAsJaxbElement(true);
ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
@@ -391,6 +394,28 @@ public class JAXBElementProviderTest ext
assertEquals(book2.getId(), book.getId());
}
+ @SuppressWarnings("unchecked")
+ @Test
+ public void testWriteWithXmlRootElementAndPackageInfo() throws Exception {
+ JAXBElementProvider provider = new JAXBElementProvider();
+ Book2 book = new Book2(333);
+ ByteArrayOutputStream bos = new ByteArrayOutputStream();
+ provider.writeTo(book, Book2.class,
+ Book2.class,
+ new Annotation[0], MediaType.TEXT_XML_TYPE,
+ new MetadataMap<String, Object>(), bos);
+ assertTrue(bos.toString().contains("thebook2"));
+ assertTrue(bos.toString().contains("http://superbooks"));
+
+ ByteArrayInputStream is = new ByteArrayInputStream(bos.toByteArray());
+ Book2 book2 =
+ (Book2)provider.readFrom(
+ (Class)Book2.class,
+ Book2.class,
+ new Annotation[0], MediaType.TEXT_XML_TYPE, new
MetadataMap<String, String>(), is);
+ assertEquals(book2.getId(), book.getId());
+ }
+
@Test
@SuppressWarnings("unchecked")
public void testWriteWithoutXmlRootElementObjectFactory() throws Exception
{