Return-Path: X-Original-To: apmail-jackrabbit-commits-archive@www.apache.org Delivered-To: apmail-jackrabbit-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 9588BFFC8 for ; Mon, 15 Apr 2013 18:18:26 +0000 (UTC) Received: (qmail 82280 invoked by uid 500); 15 Apr 2013 18:18:26 -0000 Delivered-To: apmail-jackrabbit-commits-archive@jackrabbit.apache.org Received: (qmail 82213 invoked by uid 500); 15 Apr 2013 18:18:25 -0000 Mailing-List: contact commits-help@jackrabbit.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@jackrabbit.apache.org Delivered-To: mailing list commits@jackrabbit.apache.org Received: (qmail 82203 invoked by uid 99); 15 Apr 2013 18:18:25 -0000 Received: from nike.apache.org (HELO nike.apache.org) (192.87.106.230) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 15 Apr 2013 18:18:25 +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; Mon, 15 Apr 2013 18:18:22 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id E71E123888E7; Mon, 15 Apr 2013 18:17:04 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1468173 - in /jackrabbit/branches/2.6: ./ jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java Date: Mon, 15 Apr 2013 18:17:04 -0000 To: commits@jackrabbit.apache.org From: baedke@apache.org X-Mailer: svnmailer-1.0.8-patched Message-Id: <20130415181704.E71E123888E7@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: baedke Date: Mon Apr 15 18:17:04 2013 New Revision: 1468173 URL: http://svn.apache.org/r1468173 Log: JCR-3551: DavEx cannot handle Double.NaN properties. The DavEx server now sendsNaN and Infinity as type-hinted strings and spi2devex sends them as parts. Modified: jackrabbit/branches/2.6/ (props changed) jackrabbit/branches/2.6/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java Propchange: jackrabbit/branches/2.6/ ------------------------------------------------------------------------------ Merged /jackrabbit/trunk:r1467363 Modified: jackrabbit/branches/2.6/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java?rev=1468173&r1=1468172&r2=1468173&view=diff ============================================================================== --- jackrabbit/branches/2.6/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java (original) +++ jackrabbit/branches/2.6/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java Mon Apr 15 18:17:04 2013 @@ -16,6 +16,9 @@ */ package org.apache.jackrabbit.server.remoting.davex; +import java.io.IOException; +import java.io.Writer; +import java.util.Collection; import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.Property; @@ -23,9 +26,6 @@ import javax.jcr.PropertyIterator; import javax.jcr.PropertyType; import javax.jcr.RepositoryException; import javax.jcr.Value; -import java.io.Writer; -import java.io.IOException; -import java.util.Collection; import org.apache.jackrabbit.JcrConstants; import org.apache.jackrabbit.commons.json.JsonUtil; @@ -188,11 +188,11 @@ class JsonWriter { } } else { boolean isMultiple = p.isMultiple(); - if (requiresTypeInfo(type) || (isMultiple && p.getValues().length == 0)) { + if (requiresTypeInfo(p) || (isMultiple && p.getValues().length == 0)) { /* special property types that have no correspondence in JSON are transported as String. the type is transported with an extra key-value pair, the key having a leading ':' the value - reflects the type. + reflects the type. the same applies for multivalued properties consisting of an empty array -> property type guessing would not be possible. */ @@ -208,8 +208,8 @@ class JsonWriter { } } - private static boolean requiresTypeInfo(int type) { - switch (type) { + private static boolean requiresTypeInfo(Property p) throws RepositoryException { + switch (p.getType()) { case PropertyType.NAME: case PropertyType.PATH: case PropertyType.REFERENCE: @@ -218,6 +218,22 @@ class JsonWriter { case PropertyType.URI: case PropertyType.DECIMAL: return true; + case PropertyType.DOUBLE: + /* Double.NaN, Double.POSITIVE_INFINITY and Double.NEGATIVE_INFINITY + are not defined in JSON, so they have to be serialized as type-hinted strings. + */ + if (p.isMultiple()) { + for (Value val : p.getValues()) { + double doubleValue = val.getDouble(); + if (Double.isInfinite(doubleValue) || Double.isNaN(doubleValue)) { + return true; + } + } + return false; + } else { + double doubleValue = p.getDouble(); + return Double.isInfinite(doubleValue) || Double.isNaN(doubleValue); + } default: // any other property type return false; @@ -290,9 +306,16 @@ class JsonWriter { case PropertyType.BOOLEAN: case PropertyType.LONG: - case PropertyType.DOUBLE: writer.write(v.getString()); break; + case PropertyType.DOUBLE: + double d = v.getDouble(); + String str = v.getString(); + if (Double.isNaN(d) || Double.isInfinite(d)) { + str = JsonUtil.getJsonString(str); + } + writer.write(str); + break; default: writer.write(JsonUtil.getJsonString(v.getString())); Modified: jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java?rev=1468173&r1=1468172&r2=1468173&view=diff ============================================================================== --- jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java (original) +++ jackrabbit/branches/2.6/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java Mon Apr 15 18:17:04 2013 @@ -16,6 +16,18 @@ */ package org.apache.jackrabbit.spi2davex; +import java.io.IOException; +import java.io.StringWriter; +import java.util.ArrayList; +import java.util.HashMap; +import java.util.Iterator; +import java.util.List; +import java.util.Map; +import javax.jcr.Credentials; +import javax.jcr.ItemNotFoundException; +import javax.jcr.PropertyType; +import javax.jcr.RepositoryException; + import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.HttpException; import org.apache.commons.httpclient.HttpMethod; @@ -66,18 +78,6 @@ import org.apache.jackrabbit.webdav.prop import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import javax.jcr.Credentials; -import javax.jcr.ItemNotFoundException; -import javax.jcr.PropertyType; -import javax.jcr.RepositoryException; -import java.io.IOException; -import java.io.StringWriter; -import java.util.ArrayList; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - /** * RepositoryServiceImpl... */ @@ -934,9 +934,15 @@ public class RepositoryServiceImpl exten str = value.getString(); break; case PropertyType.DOUBLE: - str = value.getString(); - if (str.indexOf('.') == -1) { - str += ".0"; + double d = value.getDouble(); + if (Double.isNaN(d) || Double.isInfinite(d)) { + // JSON cannot specifically handle this property type... + str = null; + } else { + str = value.getString(); + if (str.indexOf('.') == -1) { + str += ".0"; + } } break; default: