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/07/22 16:45:17 UTC
svn commit: r796748 - in /cxf/branches/2.2.x-fixes: ./
rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/
rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/
Author: sergeyb
Date: Wed Jul 22 14:45:16 2009
New Revision: 796748
URL: http://svn.apache.org/viewvc?rev=796748&view=rev
Log:
Merged revisions 796741 via svnmerge from
https://svn.apache.org/repos/asf/cxf/trunk
........
r796741 | sergeyb | 2009-07-22 15:29:21 +0100 (Wed, 22 Jul 2009) | 1 line
JAXRS : updating JSONProvider to optionally ignore mixed content characters
........
Added:
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/book.xml
- copied unchanged from r796741, cxf/trunk/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/book.xml
Modified:
cxf/branches/2.2.x-fixes/ (props changed)
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
--- svn:mergeinfo (original)
+++ svn:mergeinfo Wed Jul 22 14:45:16 2009
@@ -1 +1 @@
-/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985,793059,793570,794297,794396,794680,794728,794771,794778-794780,794892,795044,795104,795160,795583,795907,796022-796023,796352,796593
+/cxf/trunk:782728-782730,783097,783294,783396,784059,784181-784184,784893,784895,785279-785282,785468,785621,785624,785651,785734,785866,786142,786271-786272,786395,786512,786514,786582-786583,786638,786647,786850,787200,787269,787277-787279,787290-787291,787305,787323,787366,787849,788030,788060,788187,788444,788451,788703,788752,788774,788819-788820,789013,789371,789387,789420,789527-789530,789704-789705,789788,789811,789896-789901,790074,790094,790134,790188,790294,790553,790637-790644,790868,791301,791354,791538,791753,791947,792007,792096,792183,792261-792265,792271,792604,792683-792685,792975,792985,793059,793570,794297,794396,794680,794728,794771,794778-794780,794892,795044,795104,795160,795583,795907,796022-796023,796352,796593,796741
Propchange: cxf/branches/2.2.x-fixes/
------------------------------------------------------------------------------
Binary property 'svnmerge-integrated' - no diff available.
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java?rev=796748&r1=796747&r2=796748&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/AbstractJAXBProvider.java Wed Jul 22 14:45:16 2009
@@ -19,6 +19,8 @@
package org.apache.cxf.jaxrs.provider;
+import java.io.PrintWriter;
+import java.io.StringWriter;
import java.io.UnsupportedEncodingException;
import java.lang.annotation.Annotation;
import java.lang.reflect.Array;
@@ -155,7 +157,11 @@
protected QName getJaxbQName(Class<?> cls, Type type, Object object, boolean pluralName)
throws Exception {
- //try the easy way first
+
+ if (cls == JAXBElement.class) {
+ return object != null ? ((JAXBElement)object).getName() : null;
+ }
+
XmlRootElement root = cls.getAnnotation(XmlRootElement.class);
QName qname = null;
if (root != null) {
@@ -431,6 +437,9 @@
}
protected static void handleJAXBException(JAXBException e) {
+ StringWriter sw = new StringWriter();
+ e.printStackTrace(new PrintWriter(sw));
+ LOG.warning(sw.toString());
StringBuilder sb = new StringBuilder();
if (e.getMessage() != null) {
sb.append(e.getMessage()).append(". ");
@@ -445,7 +454,6 @@
? e.getLinkedException() : e.getCause() != null ? e.getCause() : e;
String message = new org.apache.cxf.common.i18n.Message("JAXB_EXCEPTION",
BUNDLE, sb.toString()).toString();
- LOG.warning(message);
Response r = Response.status(Response.Status.INTERNAL_SERVER_ERROR)
.type(MediaType.TEXT_PLAIN).entity(message).build();
throw new WebApplicationException(t, r);
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java?rev=796748&r1=796747&r2=796748&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/main/java/org/apache/cxf/jaxrs/provider/JSONProvider.java Wed Jul 22 14:45:16 2009
@@ -74,7 +74,7 @@
private Map<String, String> wrapperMap;
private boolean dropRootElement;
private boolean dropCollectionWrapperElement;
-
+ private boolean ignoreMixedContent;
@Context
public void setMessageContext(MessageContext mc) {
super.setContext(mc);
@@ -88,6 +88,10 @@
this.dropCollectionWrapperElement = drop;
}
+ public void setIgnoreMixedContent(boolean ignore) {
+ this.ignoreMixedContent = ignore;
+ }
+
public void setSupportUnwrapped(boolean unwrap) {
this.unwrapped = unwrap;
}
@@ -293,6 +297,9 @@
XMLStreamWriter writer = createWriter(actualObject, actualClass, genericType, enc,
os, isCollection);
+ if (ignoreMixedContent) {
+ writer = new IgnoreMixedContentWriter(writer);
+ }
ms.marshal(actualObject, writer);
writer.close();
}
@@ -373,5 +380,24 @@
}
}
-
+ protected static class IgnoreMixedContentWriter extends DelegatingXMLStreamWriter {
+ boolean lastWriteChars;
+
+ public IgnoreMixedContentWriter(XMLStreamWriter writer) {
+ super(writer);
+ }
+
+ public void writeCharacters(String text) throws XMLStreamException {
+ if (!lastWriteChars) {
+ super.writeCharacters(text);
+ lastWriteChars = true;
+ }
+ }
+
+ public void writeStartElement(String prefix, String localName, String namespaceURI)
+ throws XMLStreamException {
+ super.writeStartElement(prefix, localName, namespaceURI);
+ lastWriteChars = false;
+ }
+ }
}
Modified: cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java
URL: http://svn.apache.org/viewvc/cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java?rev=796748&r1=796747&r2=796748&view=diff
==============================================================================
--- cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java (original)
+++ cxf/branches/2.2.x-fixes/rt/frontend/jaxrs/src/test/java/org/apache/cxf/jaxrs/provider/JSONProviderTest.java Wed Jul 22 14:45:16 2009
@@ -21,6 +21,7 @@
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
import java.lang.annotation.Annotation;
import java.lang.reflect.Method;
import java.util.ArrayList;
@@ -31,8 +32,16 @@
import javax.ws.rs.core.MediaType;
import javax.ws.rs.ext.MessageBodyReader;
+import javax.xml.bind.JAXBContext;
+import javax.xml.bind.JAXBElement;
+import javax.xml.bind.Unmarshaller;
+import javax.xml.bind.annotation.XmlAnyElement;
+import javax.xml.bind.annotation.XmlMixed;
+import javax.xml.bind.annotation.XmlRootElement;
+import javax.xml.transform.stream.StreamSource;
import org.apache.cxf.jaxrs.impl.MetadataMap;
+import org.apache.cxf.jaxrs.resources.Book;
import org.apache.cxf.jaxrs.resources.CollectionsResource;
import org.apache.cxf.jaxrs.resources.ManyTags;
import org.apache.cxf.jaxrs.resources.TagVO;
@@ -288,6 +297,31 @@
}
@Test
+ public void testWriteIgnoreMixedContent() throws Exception {
+ doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125}}", true);
+ }
+
+ @Test
+ public void testWriteMixedContent() throws Exception {
+ doTestMixedContent("{\"Book\":{\"name\":\"CXF\",\"id\":125,\"$\":\"\\n \\n\"}}", false);
+ }
+
+ private void doTestMixedContent(String data, boolean ignore) throws Exception {
+ InputStream is = getClass().getResourceAsStream("book.xml");
+ JAXBContext context = JAXBContext.newInstance(new Class[]{Books.class, Book.class});
+ Unmarshaller um = context.createUnmarshaller();
+ JAXBElement jaxbEl = um.unmarshal(new StreamSource(is), Books.class);
+ JSONProvider p = new JSONProvider();
+ p.setIgnoreMixedContent(ignore);
+ ByteArrayOutputStream os = new ByteArrayOutputStream();
+
+ p.writeTo(jaxbEl, (Class)JAXBElement.class, JAXBElement.class, JAXBElement.class.getAnnotations(),
+ MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), os);
+ String s = os.toString();
+ assertEquals(data, s);
+ }
+
+ @Test
public void testWriteToListWithManyValues() throws Exception {
JSONProvider p = new JSONProvider();
Tags tags = new Tags();
@@ -341,7 +375,6 @@
MediaType.APPLICATION_JSON_TYPE, new MetadataMap<String, Object>(), os);
String s = os.toString();
- System.out.println(s);
assertEquals(
"{\"ManyTags\":{\"tags\":{\"list\":[{\"group\":\"b\",\"name\":\"a\"}]}}}",
s);
@@ -354,4 +387,11 @@
private TagVO2 createTag2(String name, String group) {
return new TagVO2(name, group);
}
+
+ @XmlRootElement()
+ public static class Books {
+ @XmlMixed
+ @XmlAnyElement(lax = true)
+ protected List<Object> books;
+ }
}