You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ba...@apache.org on 2013/04/16 15:54:49 UTC
svn commit: r1468419 - in /jackrabbit/branches/2.1: ./
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
Author: baedke
Date: Tue Apr 16 13:54:48 2013
New Revision: 1468419
URL: http://svn.apache.org/r1468419
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.1/ (props changed)
jackrabbit/branches/2.1/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java
jackrabbit/branches/2.1/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java
Propchange: jackrabbit/branches/2.1/
------------------------------------------------------------------------------
Merged /jackrabbit/trunk:r1467363
Merged /jackrabbit/branches/2.2:r1468185
Modified: jackrabbit/branches/2.1/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.1/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java?rev=1468419&r1=1468418&r2=1468419&view=diff
==============================================================================
--- jackrabbit/branches/2.1/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java (original)
+++ jackrabbit/branches/2.1/jackrabbit-jcr-server/src/main/java/org/apache/jackrabbit/server/remoting/davex/JsonWriter.java Tue Apr 16 13:54:48 2013
@@ -16,6 +16,8 @@
*/
package org.apache.jackrabbit.server.remoting.davex;
+import java.io.IOException;
+import java.io.Writer;
import javax.jcr.Node;
import javax.jcr.NodeIterator;
import javax.jcr.Property;
@@ -23,8 +25,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 org.apache.jackrabbit.JcrConstants;
import org.apache.jackrabbit.commons.json.JsonUtil;
@@ -170,11 +170,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.
*/
@@ -190,8 +190,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:
@@ -200,6 +200,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;
@@ -271,9 +287,16 @@ class JsonWriter {
case PropertyType.BOOLEAN:
case PropertyType.LONG:
- case PropertyType.DOUBLE:
return v.getString();
+ case PropertyType.DOUBLE:
+ double d = v.getDouble();
+ String str = v.getString();
+ if (Double.isNaN(d) || Double.isInfinite(d)) {
+ str = JsonUtil.getJsonString(str);
+ }
+ return str;
+
default:
return JsonUtil.getJsonString(v.getString());
}
Modified: jackrabbit/branches/2.1/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java
URL: http://svn.apache.org/viewvc/jackrabbit/branches/2.1/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java?rev=1468419&r1=1468418&r2=1468419&view=diff
==============================================================================
--- jackrabbit/branches/2.1/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java (original)
+++ jackrabbit/branches/2.1/jackrabbit-spi2dav/src/main/java/org/apache/jackrabbit/spi2davex/RepositoryServiceImpl.java Tue Apr 16 13:54:48 2013
@@ -798,9 +798,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: