Return-Path: X-Original-To: apmail-cxf-commits-archive@www.apache.org Delivered-To: apmail-cxf-commits-archive@www.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 2B4C7104A6 for ; Tue, 17 Dec 2013 10:23:37 +0000 (UTC) Received: (qmail 30860 invoked by uid 500); 17 Dec 2013 10:23:35 -0000 Delivered-To: apmail-cxf-commits-archive@cxf.apache.org Received: (qmail 30723 invoked by uid 500); 17 Dec 2013 10:23:30 -0000 Mailing-List: contact commits-help@cxf.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@cxf.apache.org Delivered-To: mailing list commits@cxf.apache.org Received: (qmail 30712 invoked by uid 99); 17 Dec 2013 10:23:29 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Dec 2013 10:23:29 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Tue, 17 Dec 2013 10:23:28 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 3E2F1238889B; Tue, 17 Dec 2013 10:23:08 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1551499 - in /cxf/trunk: parent/ rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/ rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/ rt/rs/extensions/providers/src/test/java/org/a... Date: Tue, 17 Dec 2013 10:23:07 -0000 To: commits@cxf.apache.org From: sergeyb@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20131217102308.3E2F1238889B@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: sergeyb Date: Tue Dec 17 10:23:07 2013 New Revision: 1551499 URL: http://svn.apache.org/r1551499 Log: [CXF-5463] Update Jettion version to 1.3.5 Modified: cxf/trunk/parent/pom.xml cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java Modified: cxf/trunk/parent/pom.xml URL: http://svn.apache.org/viewvc/cxf/trunk/parent/pom.xml?rev=1551499&r1=1551498&r2=1551499&view=diff ============================================================================== --- cxf/trunk/parent/pom.xml (original) +++ cxf/trunk/parent/pom.xml Tue Dec 17 10:23:07 2013 @@ -114,7 +114,7 @@ ${cxf.jaxb21.xjc.version} 2.2 1.0 - 1.3.4 + 1.3.5 8.1.14.v20131031 [7.6,8.2) 1.2.5 Modified: cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java?rev=1551499&r1=1551498&r2=1551499&view=diff ============================================================================== --- cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java (original) +++ cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/JSONProvider.java Tue Dec 17 10:23:07 2013 @@ -102,7 +102,8 @@ public class JSONProvider extends Abs private boolean dropRootElement; private boolean dropElementsInXmlStream = true; private boolean dropCollectionWrapperElement; - private boolean ignoreMixedContent; + private boolean ignoreMixedContent; + private boolean ignoreEmptyArrayValues; private boolean writeXsiType = true; private boolean readXsiType = true; private boolean ignoreNamespaces; @@ -110,7 +111,6 @@ public class JSONProvider extends Abs private TypeConverter typeConverter; private boolean attributesToElements; private boolean writeNullAsString = true; - private boolean readNullAsEmptyString = true; @Override public void setAttributesToElements(boolean value) { @@ -283,7 +283,6 @@ public class JSONProvider extends Abs readXsiType, namespaceMap, primitiveArrayKeys, - readNullAsEmptyString, getDepthProperties()); } reader = createTransformReaderIfNeeded(reader, is); @@ -525,6 +524,10 @@ public class JSONProvider extends Abs if (!writeNullAsString) { config.setWriteNullAsString(writeNullAsString); } + if (ignoreEmptyArrayValues) { + config.setIgnoreEmptyArrayValues(ignoreEmptyArrayValues); + } + boolean dropRootInJsonStream = dropRootElement && !dropElementsInXmlStream; if (dropRootInJsonStream) { @@ -609,8 +612,8 @@ public class JSONProvider extends Abs this.writeNullAsString = writeNullAsString; } - public void setReadNullAsEmptyString(boolean readNullAsString) { - this.readNullAsEmptyString = readNullAsString; + public void setIgnoreEmptyArrayValues(boolean ignoreEmptyArrayElements) { + this.ignoreEmptyArrayValues = ignoreEmptyArrayElements; } } Modified: cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java?rev=1551499&r1=1551498&r2=1551499&view=diff ============================================================================== --- cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java (original) +++ cxf/trunk/rt/rs/extensions/providers/src/main/java/org/apache/cxf/jaxrs/provider/json/utils/JSONUtils.java Tue Dec 17 10:23:07 2013 @@ -136,13 +136,12 @@ public final class JSONUtils { public static XMLStreamReader createStreamReader(InputStream is, boolean readXsiType, ConcurrentHashMap namespaceMap) throws Exception { - return createStreamReader(is, readXsiType, namespaceMap, null, true, null); + return createStreamReader(is, readXsiType, namespaceMap, null, null); } public static XMLStreamReader createStreamReader(InputStream is, boolean readXsiType, ConcurrentHashMap namespaceMap, List primitiveArrayKeys, - boolean readNullAsString, DocumentDepthProperties depthProps) throws Exception { if (readXsiType) { namespaceMap.putIfAbsent(XSI_URI, XSI_PREFIX); @@ -152,9 +151,7 @@ public final class JSONUtils { conf.setPrimitiveArrayKeys( new HashSet(primitiveArrayKeys)); } - if (!readNullAsString) { - conf.setReadNullAsEmptyString(readNullAsString); - } + XMLInputFactory factory = depthProps != null ? new JettisonMappedReaderFactory(conf, depthProps) : new MappedXMLInputFactory(conf); Modified: cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java URL: http://svn.apache.org/viewvc/cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java?rev=1551499&r1=1551498&r2=1551499&view=diff ============================================================================== --- cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java (original) +++ cxf/trunk/rt/rs/extensions/providers/src/test/java/org/apache/cxf/jaxrs/provider/json/JSONProviderTest.java Tue Dec 17 10:23:07 2013 @@ -1028,6 +1028,32 @@ public class JSONProviderTest extends As "{\"ManyTags\":{\"tags\":{\"list\":[{\"group\":\"b\",\"name\":\"a\"}]}}}", s); } + + @Test + public void testManyTagsEmptyArray() throws Exception { + JSONProvider p = new JSONProvider() { + protected XMLStreamWriter createWriter(Object actualObject, Class actualClass, + Type genericType, String enc, OutputStream os, boolean isCollection) throws Exception { + return new EmptyListWriter( + super.createWriter(actualObject, actualClass, genericType, enc, os, isCollection)); + } + }; + p.setSerializeAsArray(true); + p.setArrayKeys(Collections.singletonList("list")); + p.setIgnoreEmptyArrayValues(true); + Tags tags = new Tags(); + tags.addTag(createTag("a", "b")); + ManyTags many = new ManyTags(); + many.setTags(tags); + + ByteArrayOutputStream os = new ByteArrayOutputStream(); + + p.writeTo(many, ManyTags.class, ManyTags.class, ManyTags.class.getAnnotations(), + MediaType.APPLICATION_JSON_TYPE, new MetadataMap(), os); + + String s = os.toString(); + assertEquals("{\"ManyTags\":{\"tags\":{\"list\":[]}}}", s); + } @Test public void testInDropElement() throws Exception { @@ -1648,6 +1674,32 @@ public class JSONProviderTest extends As } } + private static class EmptyListWriter extends DelegatingXMLStreamWriter { + private int count; + public EmptyListWriter(XMLStreamWriter writer) { + super(writer); + } + + public void writeCharacters(String text) throws XMLStreamException { + } + + public void writeStartElement(String p, String local, String uri) throws XMLStreamException { + if ("group".equals(local) || "name".equals(local)) { + count++; + } else { + super.writeStartElement(p, local, uri); + } + } + + public void writeEndElement() throws XMLStreamException { + if (count == 0) { + super.writeEndElement(); + } else { + count--; + } + } + } + private static class NullWriter extends DelegatingXMLStreamWriter { public NullWriter(XMLStreamWriter writer) { super(writer);