jrjackson 0.3.9-java → 0.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/Mavenfile +2 -2
- data/jrjackson.gemspec +1 -1
- data/lib/com/fasterxml/jackson/core/jackson-annotations/{2.7.1/jackson-annotations-2.7.1.jar → 2.7.3/jackson-annotations-2.7.3.jar} +0 -0
- data/lib/com/fasterxml/jackson/core/jackson-core/{2.7.1/jackson-core-2.7.1.jar → 2.7.3/jackson-core-2.7.3.jar} +0 -0
- data/lib/com/fasterxml/jackson/core/jackson-databind/{2.7.1/jackson-databind-2.7.1.jar → 2.7.3/jackson-databind-2.7.3.jar} +0 -0
- data/lib/com/fasterxml/jackson/module/jackson-module-afterburner/{2.7.1/jackson-module-afterburner-2.7.1.jar → 2.7.3/jackson-module-afterburner-2.7.3.jar} +0 -0
- data/lib/jrjackson/build_info.rb +2 -2
- data/lib/jrjackson/jars/jrjackson-1.2.19.jar +0 -0
- data/lib/jrjackson/jrjackson.rb +1 -1
- data/lib/jrjackson_jars.rb +14 -5
- data/pom.xml +8 -8
- data/src/main/java/com/jrjackson/JjParse.java +21 -29
- data/src/main/java/com/jrjackson/JrParse.java +25 -32
- data/src/main/java/com/jrjackson/RubyAnySerializer.java +43 -28
- data/src/main/java/com/jrjackson/RubyUtils.java +17 -18
- data/src/main/java/com/jrjackson/SchParse.java +1 -1
- data/test/jrjackson_test.rb +36 -19
- metadata +36 -37
- data/lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.6.3/jackson-module-afterburner-2.6.3.jar +0 -0
- data/lib/jrjackson/jars/jrjackson-1.2.18.jar +0 -0
- data/lib/jrjackson/jars/jrjackson-1.2.7.jar +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 982ae2aa319906690bf3f8f3fa6ecd40306cdeb5
|
4
|
+
data.tar.gz: 3dfb8850a41321f74269587ae09b27a2a0253730
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a162733e1d223aa7da6b973d9bfbbbb8c5c5ec079720c4303a43611c21e3de0749f35fecddac6e514fce85b0b583cca25fb97f5a71c6cc0753235357c9fbd69b
|
7
|
+
data.tar.gz: 5ca7749fd751a2edebd189e830c241cb51997c0a51fa9c844f0517578f0aa4c5fc96244912e0945e6710731e411547ab86ba509a47dfa24d70aeea1d7d4fef37
|
data/Mavenfile
CHANGED
@@ -1,6 +1,6 @@
|
|
1
1
|
#-*- mode: ruby -*-
|
2
2
|
|
3
|
-
VERSION='1.2.
|
3
|
+
VERSION='1.2.19'
|
4
4
|
gemspec :jar => "jrjackson/jars/jrjackson-#{VERSION}.jar"
|
5
5
|
|
6
6
|
# overwrite groupId:artifacgtId:version from gem
|
@@ -18,7 +18,7 @@ jar 'junit:junit', '4.11', :scope => :test
|
|
18
18
|
jar 'org.jruby:jruby', '9.0.5.0', :scope => :provided
|
19
19
|
|
20
20
|
plugin :compiler, '3.1', :source => '1.7', :target => '1.7',
|
21
|
-
:
|
21
|
+
:showDeprecation => false,
|
22
22
|
:showWarnings => false,
|
23
23
|
:executable => '${JAVA_HOME}/bin/javac',
|
24
24
|
:fork => true
|
data/jrjackson.gemspec
CHANGED
@@ -21,7 +21,7 @@ Gem::Specification.new do |s|
|
|
21
21
|
s.add_development_dependency 'jar-dependencies', '< 2.0', '>= 0.3.2'
|
22
22
|
s.add_development_dependency 'ruby-maven', '~>3.3.10'
|
23
23
|
|
24
|
-
JACKSON_VERSION = '2.7.
|
24
|
+
JACKSON_VERSION = '2.7.3'
|
25
25
|
s.requirements << "jar com.fasterxml.jackson.core:jackson-core, #{JACKSON_VERSION}"
|
26
26
|
s.requirements << "jar com.fasterxml.jackson.core:jackson-annotations, #{JACKSON_VERSION}"
|
27
27
|
s.requirements << "jar com.fasterxml.jackson.core:jackson-databind, #{JACKSON_VERSION}"
|
Binary file
|
Binary file
|
Binary file
|
Binary file
|
data/lib/jrjackson/build_info.rb
CHANGED
Binary file
|
data/lib/jrjackson/jrjackson.rb
CHANGED
data/lib/jrjackson_jars.rb
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
# this is a generated file, to avoid over-writing it just delete this comment
|
2
|
-
|
2
|
+
begin
|
3
|
+
require 'jar_dependencies'
|
4
|
+
rescue LoadError
|
5
|
+
require 'com/fasterxml/jackson/core/jackson-databind/2.7.3/jackson-databind-2.7.3.jar'
|
6
|
+
require 'com/fasterxml/jackson/core/jackson-annotations/2.7.3/jackson-annotations-2.7.3.jar'
|
7
|
+
require 'com/fasterxml/jackson/module/jackson-module-afterburner/2.7.3/jackson-module-afterburner-2.7.3.jar'
|
8
|
+
require 'com/fasterxml/jackson/core/jackson-core/2.7.3/jackson-core-2.7.3.jar'
|
9
|
+
end
|
3
10
|
|
4
|
-
|
5
|
-
require_jar( 'com.fasterxml.jackson.
|
6
|
-
require_jar( 'com.fasterxml.jackson.core', 'jackson-annotations', '2.7.
|
7
|
-
require_jar( 'com.fasterxml.jackson.
|
11
|
+
if defined? Jars
|
12
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-databind', '2.7.3' )
|
13
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-annotations', '2.7.3' )
|
14
|
+
require_jar( 'com.fasterxml.jackson.module', 'jackson-module-afterburner', '2.7.3' )
|
15
|
+
require_jar( 'com.fasterxml.jackson.core', 'jackson-core', '2.7.3' )
|
16
|
+
end
|
data/pom.xml
CHANGED
@@ -11,7 +11,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
11
11
|
<modelVersion>4.0.0</modelVersion>
|
12
12
|
<groupId>com.jrjackson.jruby</groupId>
|
13
13
|
<artifactId>jrjackson</artifactId>
|
14
|
-
<version>1.2.
|
14
|
+
<version>1.2.19</version>
|
15
15
|
<name>A JRuby wrapper for the java jackson json processor jar</name>
|
16
16
|
<description>A mostly native JRuby wrapper for the java jackson json processor jar</description>
|
17
17
|
<url>http://github.com/guyboertje/jrjackson</url>
|
@@ -62,22 +62,22 @@ DO NOT MODIFIY - GENERATED CODE
|
|
62
62
|
<dependency>
|
63
63
|
<groupId>com.fasterxml.jackson.core</groupId>
|
64
64
|
<artifactId>jackson-core</artifactId>
|
65
|
-
<version>2.7.
|
65
|
+
<version>2.7.3</version>
|
66
66
|
</dependency>
|
67
67
|
<dependency>
|
68
68
|
<groupId>com.fasterxml.jackson.core</groupId>
|
69
69
|
<artifactId>jackson-annotations</artifactId>
|
70
|
-
<version>2.7.
|
70
|
+
<version>2.7.3</version>
|
71
71
|
</dependency>
|
72
72
|
<dependency>
|
73
73
|
<groupId>com.fasterxml.jackson.core</groupId>
|
74
74
|
<artifactId>jackson-databind</artifactId>
|
75
|
-
<version>2.7.
|
75
|
+
<version>2.7.3</version>
|
76
76
|
</dependency>
|
77
77
|
<dependency>
|
78
78
|
<groupId>com.fasterxml.jackson.module</groupId>
|
79
79
|
<artifactId>jackson-module-afterburner</artifactId>
|
80
|
-
<version>2.7.
|
80
|
+
<version>2.7.3</version>
|
81
81
|
</dependency>
|
82
82
|
<dependency>
|
83
83
|
<groupId>junit</groupId>
|
@@ -126,7 +126,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
126
126
|
</executions>
|
127
127
|
<configuration>
|
128
128
|
<outputDirectory>lib/jrjackson/jars</outputDirectory>
|
129
|
-
<finalName>jrjackson-1.2.
|
129
|
+
<finalName>jrjackson-1.2.19</finalName>
|
130
130
|
</configuration>
|
131
131
|
</plugin>
|
132
132
|
<plugin>
|
@@ -137,7 +137,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
137
137
|
<fileset>
|
138
138
|
<directory>lib/jrjackson/jars</directory>
|
139
139
|
<includes>
|
140
|
-
<include>jrjackson-1.2.
|
140
|
+
<include>jrjackson-1.2.19.jar</include>
|
141
141
|
<include>*/**/*.jar</include>
|
142
142
|
</includes>
|
143
143
|
</fileset>
|
@@ -158,7 +158,7 @@ DO NOT MODIFIY - GENERATED CODE
|
|
158
158
|
<configuration>
|
159
159
|
<source>1.7</source>
|
160
160
|
<target>1.7</target>
|
161
|
-
<
|
161
|
+
<showDeprecation>false</showDeprecation>
|
162
162
|
<showWarnings>false</showWarnings>
|
163
163
|
<executable>${JAVA_HOME}/bin/javac</executable>
|
164
164
|
<fork>true</fork>
|
@@ -1,42 +1,38 @@
|
|
1
1
|
package com.jrjackson;
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.core.JsonParser;
|
4
|
-
import com.fasterxml.jackson.core.JsonProcessingException;
|
5
4
|
import com.fasterxml.jackson.core.JsonStreamContext;
|
5
|
+
|
6
6
|
import java.io.IOException;
|
7
7
|
import java.util.ArrayList;
|
8
8
|
import java.util.HashMap;
|
9
9
|
|
10
|
-
|
11
10
|
/**
|
12
11
|
*
|
13
12
|
* @author Guy Boertje
|
14
13
|
*/
|
15
14
|
public class JjParse {
|
15
|
+
|
16
16
|
private final JavaHandler _handler;
|
17
|
-
|
18
|
-
|
17
|
+
private final HashMap<JsonStreamContext, Object> _objectMap = new HashMap<>();
|
18
|
+
private JsonStreamContext _deepestContext;
|
19
19
|
|
20
20
|
public JjParse(JavaHandler handler) {
|
21
21
|
_handler = handler;
|
22
|
-
|
23
22
|
}
|
24
23
|
|
25
|
-
public void deserialize(JsonParser jp) throws
|
24
|
+
public void deserialize(JsonParser jp) throws IOException {
|
26
25
|
try {
|
27
26
|
|
28
27
|
while (jp.nextValue() != null) {
|
29
|
-
|
28
|
+
handleJavaToken(jp);
|
30
29
|
}
|
31
|
-
|
32
|
-
} catch (JsonProcessingException e) {
|
33
|
-
_handler.raiseError(e.getLocalizedMessage());
|
34
30
|
} catch (IOException e) {
|
35
31
|
_handler.raiseError(e.getLocalizedMessage());
|
36
32
|
}
|
37
33
|
}
|
38
34
|
|
39
|
-
private void
|
35
|
+
private void addJavaValue(JsonStreamContext x) {
|
40
36
|
JsonStreamContext px = x.getParent();
|
41
37
|
Object dtarget = _objectMap.get(_deepestContext);
|
42
38
|
|
@@ -52,28 +48,27 @@ public class JjParse {
|
|
52
48
|
(ArrayList<Object>)value, dtarget);
|
53
49
|
} else if (x.inObject()) {
|
54
50
|
_handler.hashSet(
|
55
|
-
(HashMap<String, Object>)value,
|
51
|
+
(HashMap<String, Object>)value, getJavaHashKey(x), dtarget);
|
56
52
|
|
57
53
|
} else {
|
58
54
|
_handler.addValue(value);
|
59
55
|
}
|
60
56
|
}
|
61
57
|
|
62
|
-
private void
|
63
|
-
|
58
|
+
private void addJavaValue(JsonStreamContext x, Object val) {
|
64
59
|
if (x.inArray()) {
|
65
60
|
ArrayList<Object> a = (ArrayList<Object>)_objectMap.get(x);
|
66
61
|
_handler.arrayAppend(a, val);
|
67
62
|
} else if (x.inObject()) {
|
68
63
|
HashMap<String, Object> h = (HashMap<String, Object>)_objectMap.get(x);
|
69
|
-
_handler.hashSet(h,
|
64
|
+
_handler.hashSet(h, getJavaHashKey(x), val);
|
70
65
|
|
71
66
|
} else {
|
72
67
|
_handler.addValue(val);
|
73
68
|
}
|
74
69
|
}
|
75
70
|
|
76
|
-
private String
|
71
|
+
private String getJavaHashKey(JsonStreamContext x) {
|
77
72
|
String k = x.getCurrentName();
|
78
73
|
if (k == null) {
|
79
74
|
return null;
|
@@ -81,8 +76,8 @@ public class JjParse {
|
|
81
76
|
return (String)_handler.hashKey(k);
|
82
77
|
}
|
83
78
|
|
84
|
-
|
85
|
-
throws IOException
|
79
|
+
protected void handleJavaToken(JsonParser jp)
|
80
|
+
throws IOException {
|
86
81
|
|
87
82
|
JsonStreamContext cx = jp.getParsingContext();
|
88
83
|
|
@@ -105,41 +100,38 @@ public class JjParse {
|
|
105
100
|
break;
|
106
101
|
|
107
102
|
case VALUE_STRING:
|
108
|
-
|
109
|
-
_handler.treatString(jp));
|
103
|
+
addJavaValue(cx, _handler.treatString(jp));
|
110
104
|
break;
|
111
105
|
|
112
106
|
case VALUE_NUMBER_INT:
|
113
|
-
|
114
|
-
_handler.treatInt(jp));
|
107
|
+
addJavaValue(cx, _handler.treatInt(jp));
|
115
108
|
break;
|
116
109
|
|
117
110
|
case VALUE_NUMBER_FLOAT:
|
118
|
-
|
119
|
-
_handler.treatFloat(jp));
|
111
|
+
addJavaValue(cx, _handler.treatFloat(jp));
|
120
112
|
break;
|
121
113
|
|
122
114
|
case VALUE_TRUE:
|
123
|
-
|
115
|
+
addJavaValue(cx, _handler.trueValue());
|
124
116
|
break;
|
125
117
|
|
126
118
|
case VALUE_FALSE:
|
127
|
-
|
119
|
+
addJavaValue(cx, _handler.falseValue());
|
128
120
|
break;
|
129
121
|
|
130
122
|
case VALUE_NULL: // should not get this but...
|
131
|
-
|
123
|
+
addJavaValue(cx, _handler.treatNull());
|
132
124
|
break;
|
133
125
|
|
134
126
|
case END_ARRAY:
|
135
127
|
_handler.arrayEnd();
|
136
|
-
|
128
|
+
addJavaValue(cx);
|
137
129
|
_deepestContext = cx;
|
138
130
|
break;
|
139
131
|
|
140
132
|
case END_OBJECT:
|
141
133
|
_handler.hashEnd();
|
142
|
-
|
134
|
+
addJavaValue(cx);
|
143
135
|
_deepestContext = cx;
|
144
136
|
break;
|
145
137
|
}
|
@@ -1,14 +1,14 @@
|
|
1
1
|
package com.jrjackson;
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.core.JsonParser;
|
4
|
-
import com.fasterxml.jackson.core.JsonProcessingException;
|
5
4
|
import com.fasterxml.jackson.core.JsonStreamContext;
|
6
|
-
import java.io.IOException;
|
7
|
-
import java.util.HashMap;
|
8
5
|
import org.jruby.RubyArray;
|
9
6
|
import org.jruby.RubyHash;
|
10
7
|
import org.jruby.runtime.builtin.IRubyObject;
|
11
8
|
|
9
|
+
import java.io.IOException;
|
10
|
+
import java.util.HashMap;
|
11
|
+
|
12
12
|
|
13
13
|
/**
|
14
14
|
*
|
@@ -16,29 +16,25 @@ import org.jruby.runtime.builtin.IRubyObject;
|
|
16
16
|
*/
|
17
17
|
public class JrParse {
|
18
18
|
private final RubyHandler _handler;
|
19
|
-
|
20
|
-
|
19
|
+
private final HashMap<JsonStreamContext, IRubyObject> _objectMap = new HashMap<JsonStreamContext, IRubyObject>();
|
20
|
+
private JsonStreamContext _deepestContext;
|
21
21
|
|
22
22
|
public JrParse(RubyHandler handler) {
|
23
23
|
_handler = handler;
|
24
|
-
|
25
24
|
}
|
26
|
-
|
27
|
-
public void deserialize(JsonParser jp) throws
|
25
|
+
|
26
|
+
public void deserialize(JsonParser jp) throws IOException {
|
28
27
|
try {
|
29
|
-
|
28
|
+
|
30
29
|
while (jp.nextValue() != null) {
|
31
|
-
|
30
|
+
handleRubyToken(jp);
|
32
31
|
}
|
33
|
-
|
34
|
-
} catch (JsonProcessingException e) {
|
35
|
-
_handler.raiseError(e.getLocalizedMessage());
|
36
32
|
} catch (IOException e) {
|
37
33
|
_handler.raiseError(e.getLocalizedMessage());
|
38
34
|
}
|
39
35
|
}
|
40
|
-
|
41
|
-
private void
|
36
|
+
|
37
|
+
private void addRubyValue(JsonStreamContext x) {
|
42
38
|
JsonStreamContext px = x.getParent();
|
43
39
|
IRubyObject dtarget = _objectMap.get(_deepestContext);
|
44
40
|
|
@@ -54,28 +50,28 @@ public class JrParse {
|
|
54
50
|
(RubyArray)value, dtarget);
|
55
51
|
} else if (x.inObject()) {
|
56
52
|
_handler.hashSet(
|
57
|
-
(RubyHash)value,
|
53
|
+
(RubyHash)value, getRubyHashKey(x), dtarget);
|
58
54
|
|
59
55
|
} else {
|
60
56
|
_handler.addValue(value);
|
61
57
|
}
|
62
58
|
}
|
63
59
|
|
64
|
-
private void
|
60
|
+
private void addRubyValue(JsonStreamContext x, IRubyObject val) {
|
65
61
|
|
66
62
|
if (x.inArray()) {
|
67
63
|
RubyArray a = (RubyArray)_objectMap.get(x);
|
68
64
|
_handler.arrayAppend(a, val);
|
69
65
|
} else if (x.inObject()) {
|
70
66
|
RubyHash h = (RubyHash)_objectMap.get(x);
|
71
|
-
_handler.hashSet(h,
|
67
|
+
_handler.hashSet(h, getRubyHashKey(x), val);
|
72
68
|
|
73
69
|
} else {
|
74
70
|
_handler.addValue(val);
|
75
71
|
}
|
76
72
|
}
|
77
73
|
|
78
|
-
private IRubyObject
|
74
|
+
private IRubyObject getRubyHashKey(JsonStreamContext x) {
|
79
75
|
String k = x.getCurrentName();
|
80
76
|
if (k == null) {
|
81
77
|
return _handler.treatNull();
|
@@ -83,8 +79,8 @@ public class JrParse {
|
|
83
79
|
return _handler.hashKey(k);
|
84
80
|
}
|
85
81
|
|
86
|
-
|
87
|
-
throws IOException
|
82
|
+
protected void handleRubyToken(JsonParser jp)
|
83
|
+
throws IOException {
|
88
84
|
|
89
85
|
JsonStreamContext cx = jp.getParsingContext();
|
90
86
|
|
@@ -107,41 +103,38 @@ public class JrParse {
|
|
107
103
|
break;
|
108
104
|
|
109
105
|
case VALUE_STRING:
|
110
|
-
|
111
|
-
_handler.treatString(jp));
|
106
|
+
addRubyValue(cx, _handler.treatString(jp));
|
112
107
|
break;
|
113
108
|
|
114
109
|
case VALUE_NUMBER_INT:
|
115
|
-
|
116
|
-
_handler.treatInt(jp));
|
110
|
+
addRubyValue(cx, _handler.treatInt(jp));
|
117
111
|
break;
|
118
112
|
|
119
113
|
case VALUE_NUMBER_FLOAT:
|
120
|
-
|
121
|
-
_handler.treatFloat(jp));
|
114
|
+
addRubyValue(cx, _handler.treatFloat(jp));
|
122
115
|
break;
|
123
116
|
|
124
117
|
case VALUE_TRUE:
|
125
|
-
|
118
|
+
addRubyValue(cx, _handler.trueValue());
|
126
119
|
break;
|
127
120
|
|
128
121
|
case VALUE_FALSE:
|
129
|
-
|
122
|
+
addRubyValue(cx, _handler.falseValue());
|
130
123
|
break;
|
131
124
|
|
132
125
|
case VALUE_NULL: // should not get this but...
|
133
|
-
|
126
|
+
addRubyValue(cx, _handler.treatNull());
|
134
127
|
break;
|
135
128
|
|
136
129
|
case END_ARRAY:
|
137
130
|
_handler.arrayEnd();
|
138
|
-
|
131
|
+
addRubyValue(cx);
|
139
132
|
_deepestContext = cx;
|
140
133
|
break;
|
141
134
|
|
142
135
|
case END_OBJECT:
|
143
136
|
_handler.hashEnd();
|
144
|
-
|
137
|
+
addRubyValue(cx);
|
145
138
|
_deepestContext = cx;
|
146
139
|
break;
|
147
140
|
}
|
@@ -5,8 +5,8 @@ import com.fasterxml.jackson.core.JsonGenerator;
|
|
5
5
|
import com.fasterxml.jackson.databind.JsonSerializer;
|
6
6
|
import com.fasterxml.jackson.databind.SerializerProvider;
|
7
7
|
import com.fasterxml.jackson.databind.jsontype.TypeSerializer;
|
8
|
+
import org.jruby.*;
|
8
9
|
import org.jruby.ext.bigdecimal.RubyBigDecimal;
|
9
|
-
|
10
10
|
import org.jruby.internal.runtime.methods.DynamicMethod;
|
11
11
|
import org.jruby.java.proxies.JavaProxy;
|
12
12
|
import org.jruby.runtime.ThreadContext;
|
@@ -15,39 +15,17 @@ import org.jruby.runtime.builtin.IRubyObject;
|
|
15
15
|
import java.io.IOException;
|
16
16
|
import java.text.DateFormat;
|
17
17
|
import java.text.SimpleDateFormat;
|
18
|
-
import org.jruby.RubyArray;
|
19
|
-
import org.jruby.RubyBignum;
|
20
|
-
import org.jruby.RubyClass;
|
21
|
-
import org.jruby.RubyHash;
|
22
|
-
import org.jruby.RubyNumeric;
|
23
|
-
import org.jruby.RubyObject;
|
24
|
-
import org.jruby.RubyString;
|
25
|
-
import org.jruby.RubyTime;
|
26
18
|
|
27
19
|
|
28
20
|
public class RubyAnySerializer extends JsonSerializer<IRubyObject> {
|
29
21
|
|
30
|
-
enum RUBYCLASS {
|
31
|
-
|
32
|
-
String,
|
33
|
-
Float,
|
34
|
-
BigDecimal,
|
35
|
-
Time,
|
36
|
-
Array,
|
37
|
-
Hash,
|
38
|
-
Fixnum,
|
39
|
-
Bignum,
|
40
|
-
Date,
|
41
|
-
Symbol,
|
42
|
-
Struct,
|
43
|
-
TrueClass,
|
44
|
-
FalseClass;
|
45
|
-
}
|
46
|
-
|
47
22
|
/**
|
48
23
|
* Singleton instance to use.""
|
49
24
|
*/
|
50
25
|
public static final RubyAnySerializer instance = new RubyAnySerializer();
|
26
|
+
private static final String HLT = "#<";
|
27
|
+
private static final String CSP = ": ";
|
28
|
+
private static final String GT = ">";
|
51
29
|
|
52
30
|
public RubyAnySerializer() {
|
53
31
|
// super(IRubyObject.class);
|
@@ -107,13 +85,24 @@ public class RubyAnySerializer extends JsonSerializer<IRubyObject> {
|
|
107
85
|
}
|
108
86
|
return;
|
109
87
|
}
|
110
|
-
|
88
|
+
|
89
|
+
if (!RubyUtils.isBasicObjectOrSubclass(rubyObject) && rubyObject.respondsTo("to_s")) {
|
90
|
+
String result = rubyObject.toString();
|
91
|
+
jgen.writeString(result);
|
92
|
+
} else {
|
93
|
+
String name = meta.getRealClass().getName();
|
94
|
+
StringBuilder sb = new StringBuilder(2 + name.length());
|
95
|
+
sb.append(HLT).append(name).append(GT);
|
96
|
+
jgen.writeString(sb.toString());
|
97
|
+
}
|
111
98
|
}
|
112
99
|
|
113
100
|
@Override
|
114
101
|
public void serialize(IRubyObject value, JsonGenerator jgen, SerializerProvider provider)
|
115
102
|
throws IOException, JsonGenerationException {
|
116
103
|
|
104
|
+
String rubyClassName = value.getType().getName();
|
105
|
+
|
117
106
|
if (value.isNil()) {
|
118
107
|
|
119
108
|
jgen.writeNull(); // for RubyNil and NullObjects
|
@@ -122,9 +111,19 @@ public class RubyAnySerializer extends JsonSerializer<IRubyObject> {
|
|
122
111
|
|
123
112
|
provider.defaultSerializeValue(((JavaProxy) value).getObject(), jgen);
|
124
113
|
|
114
|
+
} else if (value instanceof RubyException) {
|
115
|
+
RubyException re = (RubyException) value;
|
116
|
+
String msg = re.message(value.getRuntime().getCurrentContext()).toString();
|
117
|
+
StringBuilder sb = new StringBuilder(5 + rubyClassName.length() + msg.length());
|
118
|
+
sb.append(HLT).append(rubyClassName).append(CSP).append(msg).append(GT);
|
119
|
+
jgen.writeString(sb.toString());
|
120
|
+
|
121
|
+
} else if (value.isClass() || value.isModule()) {
|
122
|
+
|
123
|
+
jgen.writeString(value.inspect().toString());
|
124
|
+
|
125
125
|
} else {
|
126
126
|
|
127
|
-
String rubyClassName = value.getMetaClass().getRealClass().getName();
|
128
127
|
RUBYCLASS clazz;
|
129
128
|
|
130
129
|
try {
|
@@ -251,4 +250,20 @@ public class RubyAnySerializer extends JsonSerializer<IRubyObject> {
|
|
251
250
|
serialize(value, jgen, provider);
|
252
251
|
typeSer.writeTypeSuffixForScalar(value, jgen);
|
253
252
|
}
|
253
|
+
|
254
|
+
enum RUBYCLASS {
|
255
|
+
String,
|
256
|
+
Float,
|
257
|
+
BigDecimal,
|
258
|
+
Time,
|
259
|
+
Array,
|
260
|
+
Hash,
|
261
|
+
Fixnum,
|
262
|
+
Bignum,
|
263
|
+
Date,
|
264
|
+
Symbol,
|
265
|
+
Struct,
|
266
|
+
TrueClass,
|
267
|
+
FalseClass
|
268
|
+
}
|
254
269
|
}
|
@@ -1,33 +1,24 @@
|
|
1
1
|
package com.jrjackson;
|
2
2
|
|
3
3
|
import com.fasterxml.jackson.core.JsonGenerator;
|
4
|
-
import java.io.IOException;
|
5
|
-
import java.util.*;
|
6
|
-
|
7
|
-
import java.math.BigDecimal;
|
8
|
-
import java.math.BigInteger;
|
9
|
-
|
10
4
|
import org.joda.time.DateTime;
|
11
5
|
import org.joda.time.DateTimeZone;
|
12
6
|
import org.joda.time.format.DateTimeFormat;
|
13
7
|
import org.joda.time.format.DateTimeFormatter;
|
14
|
-
import org.jruby
|
15
|
-
import org.jruby.RubyArray;
|
16
|
-
import org.jruby.RubyBignum;
|
17
|
-
import org.jruby.RubyBoolean;
|
18
|
-
import org.jruby.RubyFixnum;
|
19
|
-
import org.jruby.RubyFloat;
|
20
|
-
import org.jruby.RubyHash;
|
21
|
-
import org.jruby.RubyObject;
|
22
|
-
import org.jruby.RubyString;
|
23
|
-
import org.jruby.RubySymbol;
|
24
|
-
|
25
|
-
import org.jruby.javasupport.JavaUtil;
|
8
|
+
import org.jruby.*;
|
26
9
|
import org.jruby.ext.bigdecimal.RubyBigDecimal;
|
10
|
+
import org.jruby.javasupport.JavaUtil;
|
27
11
|
import org.jruby.runtime.builtin.IRubyObject;
|
28
12
|
import org.jruby.util.ByteList;
|
29
13
|
import org.jruby.util.SafeDoubleParser;
|
30
14
|
|
15
|
+
import java.io.IOException;
|
16
|
+
import java.math.BigDecimal;
|
17
|
+
import java.math.BigInteger;
|
18
|
+
import java.util.List;
|
19
|
+
import java.util.Locale;
|
20
|
+
import java.util.Map;
|
21
|
+
|
31
22
|
public class RubyUtils {
|
32
23
|
|
33
24
|
private final static DateTimeFormatter FORMATTER = DateTimeFormat.forPattern("yyyy-MM-dd HH:mm:ss Z").withLocale(Locale.ENGLISH);
|
@@ -107,6 +98,14 @@ public class RubyUtils {
|
|
107
98
|
return hash;
|
108
99
|
}
|
109
100
|
|
101
|
+
public static boolean isBasicObjectOrSubclass(IRubyObject object) {
|
102
|
+
List<IRubyObject> list = object.getMetaClass().getAncestorList();
|
103
|
+
for (IRubyObject entry : list) {
|
104
|
+
if("Kernel".equalsIgnoreCase(entry.toString())) return false;
|
105
|
+
}
|
106
|
+
return true;
|
107
|
+
}
|
108
|
+
|
110
109
|
public static String jodaTimeString(DateTime dt) {
|
111
110
|
// copied from the RubyTime to_s method
|
112
111
|
// to prevent the double handling of a String -> RubyString -> String
|
@@ -192,7 +192,7 @@ public class SchParse extends StreamParse {
|
|
192
192
|
}
|
193
193
|
|
194
194
|
}
|
195
|
-
// System.out.println("---
|
195
|
+
// System.out.println("--- addRubyValue final ---");
|
196
196
|
// if (px != null) {
|
197
197
|
// System.out.println("-------- parent --------");
|
198
198
|
// System.out.println(px.getTypeDesc());
|
data/test/jrjackson_test.rb
CHANGED
@@ -15,18 +15,13 @@ require 'time'
|
|
15
15
|
require 'date'
|
16
16
|
|
17
17
|
class JrJacksonTest < Test::Unit::TestCase
|
18
|
-
# def test_serialize_date
|
19
|
-
# # default date format
|
20
|
-
# time_string = "2014-12-18 18:18:18 +0000"
|
21
|
-
# source_time = Time.parse(time_string)
|
22
|
-
# # source_time = Date.today
|
23
|
-
# serialized_output = JrJackson::Json.dump({current_time: source_time})
|
24
|
-
# assert_equal %Q{{"current_time":"#{time_string}"}}, serialized_output
|
25
|
-
# end
|
26
|
-
# end
|
27
18
|
class Test::Unit::CustomObj
|
28
19
|
end
|
29
20
|
|
21
|
+
class Test::Unit::NullObj < BasicObject
|
22
|
+
def nil?() true; end
|
23
|
+
end
|
24
|
+
|
30
25
|
class ToJsonData
|
31
26
|
attr_reader :one, :two, :six
|
32
27
|
def initialize(a,b,c)
|
@@ -470,24 +465,32 @@ class JrJacksonTest < Test::Unit::TestCase
|
|
470
465
|
|
471
466
|
end
|
472
467
|
|
473
|
-
def
|
474
|
-
|
475
|
-
|
468
|
+
def test_can_serialize_object
|
469
|
+
obj = Object.new
|
470
|
+
actual = JrJackson::Json.dump({"foo" => obj})
|
471
|
+
assert_equal "{\"foo\":\"#{obj}\"}", actual
|
472
|
+
end
|
473
|
+
|
474
|
+
def test_can_serialize_basic_object
|
475
|
+
obj = BasicObject.new
|
476
|
+
actual = JrJackson::Json.dump({"foo" => obj})
|
477
|
+
assert_equal "{\"foo\":\"#<BasicObject>\"}", actual
|
476
478
|
end
|
477
479
|
|
478
|
-
def
|
479
|
-
|
480
|
-
|
480
|
+
def test_can_serialize_basic_object_subclass
|
481
|
+
obj = Test::Unit::NullObj.new
|
482
|
+
actual = JrJackson::Json.dump({"foo" => obj})
|
483
|
+
assert_equal "{\"foo\":\"#<Test::Unit::NullObj>\"}", actual
|
481
484
|
end
|
482
485
|
|
483
|
-
def
|
484
|
-
|
485
|
-
|
486
|
+
def test_can_serialize_custom_object
|
487
|
+
obj = Test::Unit::CustomObj.new
|
488
|
+
actual = JrJackson::Json.dump({"foo" => obj})
|
489
|
+
assert_equal "{\"foo\":\"#{obj}\"}", actual
|
486
490
|
end
|
487
491
|
|
488
492
|
def test_supports_pretty_printing
|
489
493
|
object = {"foo" => 5, "utf8" => "żółć"}
|
490
|
-
|
491
494
|
actual = JrJackson::Json.dump(object, :pretty => true)
|
492
495
|
assert_equal "{\n \"foo\" : 5,\n \"utf8\" : \"żółć\"\n}", actual
|
493
496
|
end
|
@@ -518,6 +521,20 @@ class JrJacksonTest < Test::Unit::TestCase
|
|
518
521
|
assert_equal expected, actual
|
519
522
|
end
|
520
523
|
|
524
|
+
def test_can_serialize_exceptions
|
525
|
+
e = StandardError.new("Something immensely bad happened")
|
526
|
+
object = {'error' => e}
|
527
|
+
|
528
|
+
actual = JrJackson::Json.dump(object)
|
529
|
+
assert_equal "{\"error\":\"#{e.inspect}\"}", actual
|
530
|
+
end
|
531
|
+
|
532
|
+
def test_can_serialize_class
|
533
|
+
object = {"foo" => BasicObject}
|
534
|
+
actual = JrJackson::Json.dump(object)
|
535
|
+
assert_equal "{\"foo\":\"#{BasicObject.inspect}\"}", actual
|
536
|
+
end
|
537
|
+
|
521
538
|
# -----------------------------
|
522
539
|
|
523
540
|
def assert_bigdecimal_equal(expected, actual)
|
metadata
CHANGED
@@ -1,61 +1,61 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: jrjackson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.4.0
|
5
5
|
platform: java
|
6
6
|
authors:
|
7
7
|
- Guy Boertje
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-05-11 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name: bundler
|
15
14
|
requirement: !ruby/object:Gem::Requirement
|
16
15
|
requirements:
|
17
|
-
- -
|
16
|
+
- - ~>
|
18
17
|
- !ruby/object:Gem::Version
|
19
18
|
version: '1.10'
|
20
|
-
|
19
|
+
name: bundler
|
21
20
|
prerelease: false
|
21
|
+
type: :development
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
|
-
- -
|
24
|
+
- - ~>
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '1.10'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name: jar-dependencies
|
29
28
|
requirement: !ruby/object:Gem::Requirement
|
30
29
|
requirements:
|
31
|
-
- -
|
30
|
+
- - <
|
32
31
|
- !ruby/object:Gem::Version
|
33
32
|
version: '2.0'
|
34
|
-
- -
|
33
|
+
- - '>='
|
35
34
|
- !ruby/object:Gem::Version
|
36
35
|
version: 0.3.2
|
37
|
-
|
36
|
+
name: jar-dependencies
|
38
37
|
prerelease: false
|
38
|
+
type: :development
|
39
39
|
version_requirements: !ruby/object:Gem::Requirement
|
40
40
|
requirements:
|
41
|
-
- -
|
41
|
+
- - <
|
42
42
|
- !ruby/object:Gem::Version
|
43
43
|
version: '2.0'
|
44
|
-
- -
|
44
|
+
- - '>='
|
45
45
|
- !ruby/object:Gem::Version
|
46
46
|
version: 0.3.2
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
|
-
name: ruby-maven
|
49
48
|
requirement: !ruby/object:Gem::Requirement
|
50
49
|
requirements:
|
51
|
-
- -
|
50
|
+
- - ~>
|
52
51
|
- !ruby/object:Gem::Version
|
53
52
|
version: 3.3.10
|
54
|
-
|
53
|
+
name: ruby-maven
|
55
54
|
prerelease: false
|
55
|
+
type: :development
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
57
57
|
requirements:
|
58
|
-
- -
|
58
|
+
- - ~>
|
59
59
|
- !ruby/object:Gem::Version
|
60
60
|
version: 3.3.10
|
61
61
|
description: A mostly native JRuby wrapper for the java jackson json processor jar
|
@@ -65,9 +65,9 @@ executables: []
|
|
65
65
|
extensions: []
|
66
66
|
extra_rdoc_files: []
|
67
67
|
files:
|
68
|
-
-
|
69
|
-
-
|
70
|
-
-
|
68
|
+
- .__jrubyrc
|
69
|
+
- .gitignore
|
70
|
+
- .mvn/extensions.xml
|
71
71
|
- Gemfile
|
72
72
|
- Mavenfile
|
73
73
|
- README.md
|
@@ -75,15 +75,13 @@ files:
|
|
75
75
|
- alt_bench.rb
|
76
76
|
- changelog.md
|
77
77
|
- jrjackson.gemspec
|
78
|
-
- lib/com/fasterxml/jackson/core/jackson-annotations/2.7.
|
79
|
-
- lib/com/fasterxml/jackson/core/jackson-core/2.7.
|
80
|
-
- lib/com/fasterxml/jackson/core/jackson-databind/2.7.
|
81
|
-
- lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.
|
82
|
-
- lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.7.1/jackson-module-afterburner-2.7.1.jar
|
78
|
+
- lib/com/fasterxml/jackson/core/jackson-annotations/2.7.3/jackson-annotations-2.7.3.jar
|
79
|
+
- lib/com/fasterxml/jackson/core/jackson-core/2.7.3/jackson-core-2.7.3.jar
|
80
|
+
- lib/com/fasterxml/jackson/core/jackson-databind/2.7.3/jackson-databind-2.7.3.jar
|
81
|
+
- lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.7.3/jackson-module-afterburner-2.7.3.jar
|
83
82
|
- lib/jrjackson.rb
|
84
83
|
- lib/jrjackson/build_info.rb
|
85
|
-
- lib/jrjackson/jars/jrjackson-1.2.
|
86
|
-
- lib/jrjackson/jars/jrjackson-1.2.7.jar
|
84
|
+
- lib/jrjackson/jars/jrjackson-1.2.19.jar
|
87
85
|
- lib/jrjackson/jrjackson.rb
|
88
86
|
- lib/jrjackson_jars.rb
|
89
87
|
- lib/require_relative_patch.rb
|
@@ -135,28 +133,29 @@ homepage: http://github.com/guyboertje/jrjackson
|
|
135
133
|
licenses:
|
136
134
|
- Apache License 2.0
|
137
135
|
metadata: {}
|
138
|
-
post_install_message:
|
136
|
+
post_install_message:
|
139
137
|
rdoc_options: []
|
140
138
|
require_paths:
|
141
139
|
- lib
|
142
140
|
required_ruby_version: !ruby/object:Gem::Requirement
|
143
141
|
requirements:
|
144
|
-
- -
|
142
|
+
- - '>='
|
145
143
|
- !ruby/object:Gem::Version
|
146
144
|
version: '0'
|
147
145
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
148
146
|
requirements:
|
149
|
-
- -
|
147
|
+
- - '>='
|
150
148
|
- !ruby/object:Gem::Version
|
151
149
|
version: '0'
|
152
150
|
requirements:
|
153
|
-
- jar com.fasterxml.jackson.core:jackson-core, 2.7.
|
154
|
-
- jar com.fasterxml.jackson.core:jackson-annotations, 2.7.
|
155
|
-
- jar com.fasterxml.jackson.core:jackson-databind, 2.7.
|
156
|
-
- jar com.fasterxml.jackson.module:jackson-module-afterburner, 2.7.
|
157
|
-
rubyforge_project:
|
158
|
-
rubygems_version: 2.4.
|
159
|
-
signing_key:
|
151
|
+
- jar com.fasterxml.jackson.core:jackson-core, 2.7.3
|
152
|
+
- jar com.fasterxml.jackson.core:jackson-annotations, 2.7.3
|
153
|
+
- jar com.fasterxml.jackson.core:jackson-databind, 2.7.3
|
154
|
+
- jar com.fasterxml.jackson.module:jackson-module-afterburner, 2.7.3
|
155
|
+
rubyforge_project:
|
156
|
+
rubygems_version: 2.4.8
|
157
|
+
signing_key:
|
160
158
|
specification_version: 4
|
161
159
|
summary: A JRuby wrapper for the java jackson json processor jar
|
162
160
|
test_files: []
|
161
|
+
has_rdoc:
|
Binary file
|
Binary file
|
Binary file
|