jrjackson 0.3.9-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.__jrubyrc +433 -0
- data/.gitignore +10 -0
- data/.mvn/extensions.xml +8 -0
- data/Gemfile +10 -0
- data/Mavenfile +32 -0
- data/README.md +150 -0
- data/Rakefile +10 -0
- data/alt_bench.rb +46 -0
- data/changelog.md +131 -0
- data/jrjackson.gemspec +32 -0
- data/lib/com/fasterxml/jackson/core/jackson-annotations/2.7.1/jackson-annotations-2.7.1.jar +0 -0
- data/lib/com/fasterxml/jackson/core/jackson-core/2.7.1/jackson-core-2.7.1.jar +0 -0
- data/lib/com/fasterxml/jackson/core/jackson-databind/2.7.1/jackson-databind-2.7.1.jar +0 -0
- data/lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.6.3/jackson-module-afterburner-2.6.3.jar +0 -0
- data/lib/com/fasterxml/jackson/module/jackson-module-afterburner/2.7.1/jackson-module-afterburner-2.7.1.jar +0 -0
- data/lib/jrjackson.rb +2 -0
- data/lib/jrjackson/build_info.rb +15 -0
- data/lib/jrjackson/jars/jrjackson-1.2.18.jar +0 -0
- data/lib/jrjackson/jars/jrjackson-1.2.7.jar +0 -0
- data/lib/jrjackson/jrjackson.rb +94 -0
- data/lib/jrjackson_jars.rb +7 -0
- data/lib/require_relative_patch.rb +6 -0
- data/pom.xml +193 -0
- data/profiling/profiled.rb +15 -0
- data/run_all_individual_bench.sh +25 -0
- data/run_jruby_individual_bench.sh +20 -0
- data/run_mri_individual_bench.sh +7 -0
- data/src/main/java/com/jrjackson/IParseHandler.java +53 -0
- data/src/main/java/com/jrjackson/JavaBigDecimalValueConverter.java +17 -0
- data/src/main/java/com/jrjackson/JavaBigIntValueConverter.java +17 -0
- data/src/main/java/com/jrjackson/JavaConverter.java +10 -0
- data/src/main/java/com/jrjackson/JavaFloatValueConverter.java +16 -0
- data/src/main/java/com/jrjackson/JavaHandler.java +118 -0
- data/src/main/java/com/jrjackson/JavaLongValueConverter.java +16 -0
- data/src/main/java/com/jrjackson/JjParse.java +147 -0
- data/src/main/java/com/jrjackson/JrJacksonBase.java +152 -0
- data/src/main/java/com/jrjackson/JrJacksonJava.java +81 -0
- data/src/main/java/com/jrjackson/JrJacksonRaw.java +108 -0
- data/src/main/java/com/jrjackson/JrJacksonRuby.java +89 -0
- data/src/main/java/com/jrjackson/JrJacksonSaj.java +26 -0
- data/src/main/java/com/jrjackson/JrJacksonSch.java +25 -0
- data/src/main/java/com/jrjackson/JrJacksonService.java +38 -0
- data/src/main/java/com/jrjackson/JrParse.java +149 -0
- data/src/main/java/com/jrjackson/ParseError.java +16 -0
- data/src/main/java/com/jrjackson/RubyAnySerializer.java +254 -0
- data/src/main/java/com/jrjackson/RubyBigDecimalValueConverter.java +18 -0
- data/src/main/java/com/jrjackson/RubyBigIntValueConverter.java +21 -0
- data/src/main/java/com/jrjackson/RubyConverter.java +12 -0
- data/src/main/java/com/jrjackson/RubyDateFormat.java +34 -0
- data/src/main/java/com/jrjackson/RubyFloatValueConverter.java +18 -0
- data/src/main/java/com/jrjackson/RubyHandler.java +119 -0
- data/src/main/java/com/jrjackson/RubyIntValueConverter.java +18 -0
- data/src/main/java/com/jrjackson/RubyJacksonModule.java +72 -0
- data/src/main/java/com/jrjackson/RubyKeyConverter.java +12 -0
- data/src/main/java/com/jrjackson/RubyNameConverter.java +9 -0
- data/src/main/java/com/jrjackson/RubyObjectDeserializer.java +182 -0
- data/src/main/java/com/jrjackson/RubyStringConverter.java +18 -0
- data/src/main/java/com/jrjackson/RubyStringKeyConverter.java +15 -0
- data/src/main/java/com/jrjackson/RubyStringNameConverter.java +12 -0
- data/src/main/java/com/jrjackson/RubySymbolKeyConverter.java +15 -0
- data/src/main/java/com/jrjackson/RubySymbolNameConverter.java +12 -0
- data/src/main/java/com/jrjackson/RubyUtils.java +150 -0
- data/src/main/java/com/jrjackson/SajParse.java +169 -0
- data/src/main/java/com/jrjackson/SchParse.java +209 -0
- data/src/main/java/com/jrjackson/StreamParse.java +66 -0
- data/test/jrjackson_test.rb +533 -0
- metadata +162 -0
@@ -0,0 +1,17 @@
|
|
1
|
+
package com.jrjackson;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonParser;
|
4
|
+
import java.io.IOException;
|
5
|
+
import java.math.BigInteger;
|
6
|
+
|
7
|
+
/**
|
8
|
+
*
|
9
|
+
* @author Guy Boertje
|
10
|
+
*/
|
11
|
+
public class JavaBigIntValueConverter implements JavaConverter {
|
12
|
+
|
13
|
+
@Override
|
14
|
+
public BigInteger convert(JsonParser jp) throws IOException {
|
15
|
+
return jp.getBigIntegerValue();
|
16
|
+
}
|
17
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
package com.jrjackson;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonParser;
|
4
|
+
import java.io.IOException;
|
5
|
+
|
6
|
+
/**
|
7
|
+
*
|
8
|
+
* @author Guy Boertje
|
9
|
+
*/
|
10
|
+
public class JavaFloatValueConverter implements JavaConverter {
|
11
|
+
|
12
|
+
@Override
|
13
|
+
public Double convert(JsonParser jp) throws IOException {
|
14
|
+
return jp.getDoubleValue();
|
15
|
+
}
|
16
|
+
}
|
@@ -0,0 +1,118 @@
|
|
1
|
+
package com.jrjackson;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonParser;
|
4
|
+
import java.io.IOException;
|
5
|
+
import java.util.ArrayList;
|
6
|
+
import java.util.HashMap;
|
7
|
+
|
8
|
+
|
9
|
+
/**
|
10
|
+
*
|
11
|
+
* @author Guy Boertje
|
12
|
+
*/
|
13
|
+
|
14
|
+
/*
|
15
|
+
Long -> Integer
|
16
|
+
Double -> Float
|
17
|
+
JavaMath::BigDecimal -> BigDecimal
|
18
|
+
JavaMath::BigInteger -> Bignum
|
19
|
+
JavaUtil::ArrayList -> Array
|
20
|
+
JavaUtil::LinkedHashMap -> Hash
|
21
|
+
String -> String
|
22
|
+
*/
|
23
|
+
|
24
|
+
public class JavaHandler implements IParseHandler<Object, ArrayList<Object>, HashMap<String, Object>> {
|
25
|
+
|
26
|
+
private Object _result;
|
27
|
+
private final JavaConverter _intConv;
|
28
|
+
private final JavaConverter _floatConv;
|
29
|
+
|
30
|
+
public JavaHandler(
|
31
|
+
JavaConverter intConverter,
|
32
|
+
JavaConverter floatConverter) {
|
33
|
+
|
34
|
+
_intConv = intConverter;
|
35
|
+
_floatConv = floatConverter;
|
36
|
+
|
37
|
+
}
|
38
|
+
|
39
|
+
@Override
|
40
|
+
public void addValue(Object value) {
|
41
|
+
_result = value;
|
42
|
+
}
|
43
|
+
|
44
|
+
@Override
|
45
|
+
public Object hashStart() {
|
46
|
+
return new HashMap<String, Object>();
|
47
|
+
}
|
48
|
+
|
49
|
+
@Override
|
50
|
+
public void hashEnd() {
|
51
|
+
|
52
|
+
}
|
53
|
+
|
54
|
+
@Override
|
55
|
+
public Object hashKey(String key) {
|
56
|
+
return key;
|
57
|
+
}
|
58
|
+
|
59
|
+
@Override
|
60
|
+
public void hashSet(HashMap<String, Object> hash, Object key, Object value) {
|
61
|
+
hash.put((String)key, value);
|
62
|
+
}
|
63
|
+
|
64
|
+
@Override
|
65
|
+
public Object arrayStart() {
|
66
|
+
return new ArrayList<Object>();
|
67
|
+
}
|
68
|
+
|
69
|
+
@Override
|
70
|
+
public void arrayEnd() {
|
71
|
+
|
72
|
+
}
|
73
|
+
|
74
|
+
@Override
|
75
|
+
public void arrayAppend(ArrayList<Object> array, Object value) {
|
76
|
+
array.add(value);
|
77
|
+
}
|
78
|
+
|
79
|
+
@Override
|
80
|
+
public Object treatNull() {
|
81
|
+
return null;
|
82
|
+
}
|
83
|
+
|
84
|
+
@Override
|
85
|
+
public Object treatInt(JsonParser jp) throws IOException {
|
86
|
+
return _intConv.convert(jp);
|
87
|
+
}
|
88
|
+
|
89
|
+
@Override
|
90
|
+
public Object treatFloat(JsonParser jp) throws IOException {
|
91
|
+
return _floatConv.convert(jp);
|
92
|
+
}
|
93
|
+
|
94
|
+
@Override
|
95
|
+
public Object treatString(JsonParser jp) throws IOException {
|
96
|
+
return jp.getText();
|
97
|
+
}
|
98
|
+
|
99
|
+
@Override
|
100
|
+
public Object trueValue() {
|
101
|
+
return true;
|
102
|
+
}
|
103
|
+
|
104
|
+
@Override
|
105
|
+
public Object falseValue() {
|
106
|
+
return false;
|
107
|
+
}
|
108
|
+
|
109
|
+
@Override
|
110
|
+
public Object getResult() {
|
111
|
+
return _result;
|
112
|
+
}
|
113
|
+
|
114
|
+
@Override
|
115
|
+
public void raiseError(String e) {
|
116
|
+
|
117
|
+
}
|
118
|
+
}
|
@@ -0,0 +1,16 @@
|
|
1
|
+
package com.jrjackson;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonParser;
|
4
|
+
import java.io.IOException;
|
5
|
+
|
6
|
+
/**
|
7
|
+
*
|
8
|
+
* @author Guy Boertje
|
9
|
+
*/
|
10
|
+
public class JavaLongValueConverter implements JavaConverter {
|
11
|
+
|
12
|
+
@Override
|
13
|
+
public Long convert(JsonParser jp) throws IOException {
|
14
|
+
return jp.getLongValue();
|
15
|
+
}
|
16
|
+
}
|
@@ -0,0 +1,147 @@
|
|
1
|
+
package com.jrjackson;
|
2
|
+
|
3
|
+
import com.fasterxml.jackson.core.JsonParser;
|
4
|
+
import com.fasterxml.jackson.core.JsonProcessingException;
|
5
|
+
import com.fasterxml.jackson.core.JsonStreamContext;
|
6
|
+
import java.io.IOException;
|
7
|
+
import java.util.ArrayList;
|
8
|
+
import java.util.HashMap;
|
9
|
+
|
10
|
+
|
11
|
+
/**
|
12
|
+
*
|
13
|
+
* @author Guy Boertje
|
14
|
+
*/
|
15
|
+
public class JjParse {
|
16
|
+
private final JavaHandler _handler;
|
17
|
+
protected final HashMap<JsonStreamContext, Object> _objectMap = new HashMap<JsonStreamContext, Object>();
|
18
|
+
protected JsonStreamContext _deepestContext;
|
19
|
+
|
20
|
+
public JjParse(JavaHandler handler) {
|
21
|
+
_handler = handler;
|
22
|
+
|
23
|
+
}
|
24
|
+
|
25
|
+
public void deserialize(JsonParser jp) throws JsonProcessingException, IOException {
|
26
|
+
try {
|
27
|
+
|
28
|
+
while (jp.nextValue() != null) {
|
29
|
+
handleCurrentToken(jp);
|
30
|
+
}
|
31
|
+
|
32
|
+
} catch (JsonProcessingException e) {
|
33
|
+
_handler.raiseError(e.getLocalizedMessage());
|
34
|
+
} catch (IOException e) {
|
35
|
+
_handler.raiseError(e.getLocalizedMessage());
|
36
|
+
}
|
37
|
+
}
|
38
|
+
|
39
|
+
private void callAddValue(JsonStreamContext x) {
|
40
|
+
JsonStreamContext px = x.getParent();
|
41
|
+
Object dtarget = _objectMap.get(_deepestContext);
|
42
|
+
|
43
|
+
if (px == null) {
|
44
|
+
_handler.addValue(dtarget);
|
45
|
+
return;
|
46
|
+
}
|
47
|
+
|
48
|
+
Object value = _objectMap.get(x);
|
49
|
+
|
50
|
+
if (x.inArray()) {
|
51
|
+
_handler.arrayAppend(
|
52
|
+
(ArrayList<Object>)value, dtarget);
|
53
|
+
} else if (x.inObject()) {
|
54
|
+
_handler.hashSet(
|
55
|
+
(HashMap<String, Object>)value, callHashKey(x), dtarget);
|
56
|
+
|
57
|
+
} else {
|
58
|
+
_handler.addValue(value);
|
59
|
+
}
|
60
|
+
}
|
61
|
+
|
62
|
+
private void callAddValue(JsonStreamContext x, Object val) {
|
63
|
+
|
64
|
+
if (x.inArray()) {
|
65
|
+
ArrayList<Object> a = (ArrayList<Object>)_objectMap.get(x);
|
66
|
+
_handler.arrayAppend(a, val);
|
67
|
+
} else if (x.inObject()) {
|
68
|
+
HashMap<String, Object> h = (HashMap<String, Object>)_objectMap.get(x);
|
69
|
+
_handler.hashSet(h, callHashKey(x), val);
|
70
|
+
|
71
|
+
} else {
|
72
|
+
_handler.addValue(val);
|
73
|
+
}
|
74
|
+
}
|
75
|
+
|
76
|
+
private String callHashKey(JsonStreamContext x) {
|
77
|
+
String k = x.getCurrentName();
|
78
|
+
if (k == null) {
|
79
|
+
return null;
|
80
|
+
}
|
81
|
+
return (String)_handler.hashKey(k);
|
82
|
+
}
|
83
|
+
|
84
|
+
private void handleCurrentToken(JsonParser jp)
|
85
|
+
throws IOException, JsonProcessingException {
|
86
|
+
|
87
|
+
JsonStreamContext cx = jp.getParsingContext();
|
88
|
+
|
89
|
+
switch (jp.getCurrentToken()) {
|
90
|
+
case START_OBJECT:
|
91
|
+
_deepestContext = cx;
|
92
|
+
_objectMap.put(cx, _handler.hashStart());
|
93
|
+
break;
|
94
|
+
|
95
|
+
case START_ARRAY:
|
96
|
+
_deepestContext = cx;
|
97
|
+
_objectMap.put(cx, _handler.arrayStart());
|
98
|
+
|
99
|
+
case FIELD_NAME:
|
100
|
+
break;
|
101
|
+
|
102
|
+
case VALUE_EMBEDDED_OBJECT:
|
103
|
+
System.out.println("-------- VALUE_EMBEDDED_OBJECT ????????? --------");
|
104
|
+
System.out.println(jp.getEmbeddedObject());
|
105
|
+
break;
|
106
|
+
|
107
|
+
case VALUE_STRING:
|
108
|
+
callAddValue(cx,
|
109
|
+
_handler.treatString(jp));
|
110
|
+
break;
|
111
|
+
|
112
|
+
case VALUE_NUMBER_INT:
|
113
|
+
callAddValue(cx,
|
114
|
+
_handler.treatInt(jp));
|
115
|
+
break;
|
116
|
+
|
117
|
+
case VALUE_NUMBER_FLOAT:
|
118
|
+
callAddValue(cx,
|
119
|
+
_handler.treatFloat(jp));
|
120
|
+
break;
|
121
|
+
|
122
|
+
case VALUE_TRUE:
|
123
|
+
callAddValue(cx, _handler.trueValue());
|
124
|
+
break;
|
125
|
+
|
126
|
+
case VALUE_FALSE:
|
127
|
+
callAddValue(cx, _handler.falseValue());
|
128
|
+
break;
|
129
|
+
|
130
|
+
case VALUE_NULL: // should not get this but...
|
131
|
+
callAddValue(cx, _handler.treatNull());
|
132
|
+
break;
|
133
|
+
|
134
|
+
case END_ARRAY:
|
135
|
+
_handler.arrayEnd();
|
136
|
+
callAddValue(cx);
|
137
|
+
_deepestContext = cx;
|
138
|
+
break;
|
139
|
+
|
140
|
+
case END_OBJECT:
|
141
|
+
_handler.hashEnd();
|
142
|
+
callAddValue(cx);
|
143
|
+
_deepestContext = cx;
|
144
|
+
break;
|
145
|
+
}
|
146
|
+
}
|
147
|
+
}
|
@@ -0,0 +1,152 @@
|
|
1
|
+
/*
|
2
|
+
* To change this license header, choose License Headers in Project Properties.
|
3
|
+
* To change this template file, choose Tools | Templates
|
4
|
+
* and open the template in the editor.
|
5
|
+
*/
|
6
|
+
package com.jrjackson;
|
7
|
+
|
8
|
+
import com.fasterxml.jackson.core.JsonEncoding;
|
9
|
+
import com.fasterxml.jackson.core.JsonFactory;
|
10
|
+
import com.fasterxml.jackson.core.JsonGenerator;
|
11
|
+
import com.fasterxml.jackson.core.JsonParser;
|
12
|
+
import com.fasterxml.jackson.core.JsonProcessingException;
|
13
|
+
import com.fasterxml.jackson.databind.ObjectMapper;
|
14
|
+
import com.fasterxml.jackson.databind.SerializerProvider;
|
15
|
+
import java.io.ByteArrayOutputStream;
|
16
|
+
import org.jruby.RubyHash;
|
17
|
+
import org.jruby.RubyIO;
|
18
|
+
import org.jruby.RubyObject;
|
19
|
+
import org.jruby.RubyString;
|
20
|
+
import org.jruby.anno.JRubyMethod;
|
21
|
+
import org.jruby.exceptions.RaiseException;
|
22
|
+
import org.jruby.ext.stringio.StringIO;
|
23
|
+
import org.jruby.runtime.ThreadContext;
|
24
|
+
import org.jruby.runtime.builtin.IRubyObject;
|
25
|
+
|
26
|
+
import java.io.IOException;
|
27
|
+
import java.text.SimpleDateFormat;
|
28
|
+
import java.util.TimeZone;
|
29
|
+
import org.jcodings.specific.UTF8Encoding;
|
30
|
+
import org.jruby.Ruby;
|
31
|
+
import org.jruby.RubyClass;
|
32
|
+
import org.jruby.RubySymbol;
|
33
|
+
import org.jruby.util.ByteList;
|
34
|
+
|
35
|
+
/**
|
36
|
+
*
|
37
|
+
* @author guy
|
38
|
+
*/
|
39
|
+
public class JrJacksonBase extends RubyObject {
|
40
|
+
|
41
|
+
// serialize
|
42
|
+
@JRubyMethod(module = true, name = {"generate", "dump"}, required = 1, optional = 1)
|
43
|
+
public static IRubyObject generate(ThreadContext context, IRubyObject self, IRubyObject[] args)
|
44
|
+
throws IOException, RaiseException {
|
45
|
+
Ruby _ruby = context.runtime;
|
46
|
+
RubyHash options = (args.length <= 1) ? RubyHash.newHash(_ruby) : args[1].convertToHash();
|
47
|
+
String format = (String) options.get(RubyUtils.rubySymbol(_ruby, "date_format"));
|
48
|
+
|
49
|
+
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
50
|
+
JsonGenerator jgen = RubyJacksonModule.factory.createGenerator(
|
51
|
+
baos, JsonEncoding.UTF8);
|
52
|
+
|
53
|
+
if (flagged(options, RubyUtils.rubySymbol(_ruby, "pretty"))) {
|
54
|
+
jgen.useDefaultPrettyPrinter();
|
55
|
+
}
|
56
|
+
|
57
|
+
SerializerProvider provider;
|
58
|
+
if (format != null) {
|
59
|
+
SimpleDateFormat simpleFormat = new SimpleDateFormat(format);
|
60
|
+
String timezone = (String) options.get(RubyUtils.rubySymbol(_ruby, "timezone"));
|
61
|
+
if (timezone != null) {
|
62
|
+
simpleFormat.setTimeZone(TimeZone.getTimeZone(timezone));
|
63
|
+
}
|
64
|
+
provider = RubyJacksonModule.createProvider(simpleFormat);
|
65
|
+
} else {
|
66
|
+
provider = RubyJacksonModule.createProvider();
|
67
|
+
}
|
68
|
+
|
69
|
+
try {
|
70
|
+
RubyAnySerializer.instance.serialize(args[0], jgen, provider);
|
71
|
+
jgen.close();
|
72
|
+
ByteList bl = new ByteList(baos.toByteArray(),
|
73
|
+
UTF8Encoding.INSTANCE);
|
74
|
+
return RubyString.newString(_ruby, bl);
|
75
|
+
} catch (JsonProcessingException e) {
|
76
|
+
throw ParseError.newParseError(_ruby, e.getLocalizedMessage());
|
77
|
+
}
|
78
|
+
}
|
79
|
+
|
80
|
+
protected static boolean flagged(RubyHash opts, RubySymbol key) {
|
81
|
+
Object val = opts.get(key);
|
82
|
+
if (val == null) {
|
83
|
+
return false;
|
84
|
+
}
|
85
|
+
boolean flag = (Boolean) val;
|
86
|
+
return flag;
|
87
|
+
}
|
88
|
+
|
89
|
+
protected static boolean flagged(RubyHash opts, RubySymbol key, boolean returnVal) {
|
90
|
+
if (!opts.containsKey(key)) {
|
91
|
+
return returnVal;
|
92
|
+
}
|
93
|
+
Object val = opts.get(key);
|
94
|
+
if (val == null) {
|
95
|
+
return returnVal;
|
96
|
+
}
|
97
|
+
boolean flag = (Boolean) val;
|
98
|
+
return flag;
|
99
|
+
}
|
100
|
+
|
101
|
+
protected static IRubyObject _sjcparse(ThreadContext context, IRubyObject handler, IRubyObject arg, IRubyObject opts, StreamParse sp) throws RaiseException {
|
102
|
+
|
103
|
+
JsonParser jp;
|
104
|
+
try {
|
105
|
+
jp = buildParser(context, RubyJacksonModule.factory, arg);
|
106
|
+
} catch (IOException e) {
|
107
|
+
throw context.runtime.newIOError(e.getLocalizedMessage());
|
108
|
+
}
|
109
|
+
return sp.deserialize(jp);
|
110
|
+
}
|
111
|
+
|
112
|
+
protected static JsonParser buildParser(ThreadContext ctx, JsonFactory jf, IRubyObject arg) throws IOException {
|
113
|
+
if (arg instanceof RubyString) {
|
114
|
+
return jf.createParser(((RubyString) arg).getByteList().bytes());
|
115
|
+
} else if (arg instanceof StringIO) {
|
116
|
+
RubyString content = (RubyString) ((StringIO) arg).string(ctx);
|
117
|
+
return jf.createParser(content.getByteList().bytes());
|
118
|
+
} else {
|
119
|
+
// must be an IO object then
|
120
|
+
return jf.createParser(((RubyIO) arg).getInStream());
|
121
|
+
}
|
122
|
+
}
|
123
|
+
|
124
|
+
protected static IRubyObject _parse(ThreadContext context, IRubyObject arg, ObjectMapper mapper) throws IOException, RaiseException {
|
125
|
+
Ruby ruby = context.runtime;
|
126
|
+
// same format as Ruby Time #to_s
|
127
|
+
SimpleDateFormat simpleFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z");
|
128
|
+
mapper.setDateFormat(simpleFormat);
|
129
|
+
try {
|
130
|
+
Object o;
|
131
|
+
if (arg instanceof RubyString) {
|
132
|
+
o = mapper.readValue(((RubyString) arg).getByteList().bytes(), Object.class);
|
133
|
+
} else if (arg instanceof StringIO) {
|
134
|
+
RubyString content = (RubyString) ((StringIO) arg).string(context);
|
135
|
+
o = mapper.readValue(content.getByteList().bytes(), Object.class);
|
136
|
+
} else {
|
137
|
+
// must be an IO object then
|
138
|
+
o = mapper.readValue(((RubyIO) arg).getInStream(), Object.class);
|
139
|
+
}
|
140
|
+
return RubyUtils.rubyObject(ruby, o);
|
141
|
+
} catch (JsonProcessingException e) {
|
142
|
+
throw ParseError.newParseError(ruby, e.getLocalizedMessage());
|
143
|
+
} catch (IOException e) {
|
144
|
+
throw ruby.newIOError(e.getLocalizedMessage());
|
145
|
+
}
|
146
|
+
}
|
147
|
+
|
148
|
+
public JrJacksonBase(Ruby runtime, RubyClass metaClass) {
|
149
|
+
super(runtime, metaClass);
|
150
|
+
}
|
151
|
+
|
152
|
+
}
|