You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@felix.apache.org by dl...@apache.org on 2017/08/25 11:22:38 UTC
svn commit: r1806157 - in /felix/trunk/converter:
persister/src/main/java/org/apache/felix/persister/impl/
schematizer/src/test/java/org/apache/felix/serializer/impl/json/
serializer/src/main/java/org/apache/felix/serializer/impl/
serializer/src/main/j...
Author: dleangen
Date: Fri Aug 25 11:22:37 2017
New Revision: 1806157
URL: http://svn.apache.org/viewvc?rev=1806157&view=rev
Log:
[FELIX-5412] Pretty format not implemented in JSON serializer
Added:
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DebugJsonWriter.java
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonParser.java
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonWriter.java
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java (contents, props changed)
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlParser.java
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlWriter.java
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java (contents, props changed)
- copied, changed from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java
felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java (with props)
felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java (with props)
Removed:
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java
Modified:
felix/trunk/converter/persister/src/main/java/org/apache/felix/persister/impl/StandardPersister.java
felix/trunk/converter/schematizer/src/test/java/org/apache/felix/serializer/impl/json/JsonDeserializationTest.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/Activator.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlDeserializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializerImpl.java
felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java
felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Deserializing.java
felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializer.java
felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializing.java
felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonBackingObjectSerializationTest.java
felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java
felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java
felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/yaml/YamlSerializerTest.java
Modified: felix/trunk/converter/persister/src/main/java/org/apache/felix/persister/impl/StandardPersister.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/persister/src/main/java/org/apache/felix/persister/impl/StandardPersister.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/persister/src/main/java/org/apache/felix/persister/impl/StandardPersister.java (original)
+++ felix/trunk/converter/persister/src/main/java/org/apache/felix/persister/impl/StandardPersister.java Fri Aug 25 11:22:37 2017
@@ -40,7 +40,7 @@ public class StandardPersister<D> implem
@Override
public void serialize(OutputStream out, D entity) {
try {
- serializer.serialize(entity).with(getConverter()).to( out );
+ serializer.serialize(entity).convertWith(getConverter()).to( out );
} catch ( IOException e ) {
// TODO: Handle this
e.printStackTrace();
@@ -51,7 +51,7 @@ public class StandardPersister<D> implem
public D deserialize(InputStream in) {
return (D)serializer
.deserialize(dataType)
- .with(getConverter())
+ .convertWith(getConverter())
.from(in);
}
Modified: felix/trunk/converter/schematizer/src/test/java/org/apache/felix/serializer/impl/json/JsonDeserializationTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/schematizer/src/test/java/org/apache/felix/serializer/impl/json/JsonDeserializationTest.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/schematizer/src/test/java/org/apache/felix/serializer/impl/json/JsonDeserializationTest.java (original)
+++ felix/trunk/converter/schematizer/src/test/java/org/apache/felix/serializer/impl/json/JsonDeserializationTest.java Fri Aug 25 11:22:37 2017
@@ -55,10 +55,10 @@ public class JsonDeserializationTest {
Converter c = new SchematizerImpl()
.schematize("MyDTO", new TypeReference<MyDTO>(){})
.converterFor("MyDTO");
- String serialized = new JsonSerializerImpl().serialize(dto).with(c).toString();
+ String serialized = new JsonSerializerImpl().serialize(dto).convertWith(c).toString();
MyDTO result = new JsonSerializerImpl()
.deserialize(MyDTO.class)
- .with(c)
+ .convertWith(c)
.from(serialized);
assertEquals(dto.ping, result.ping);
@@ -88,7 +88,7 @@ public class JsonDeserializationTest {
.converterFor("MyDTO");
MyDTO2<MyEmbeddedDTO2<String>> result = new JsonSerializerImpl()
.deserialize(new TypeReference<MyDTO2<MyEmbeddedDTO2<String>>>(){})
- .with(c)
+ .convertWith(c)
.from(serialized);
assertEquals(dto.ping, result.ping);
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/Activator.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/Activator.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/Activator.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/Activator.java Fri Aug 25 11:22:37 2017
@@ -20,10 +20,13 @@ import java.util.Dictionary;
import java.util.Hashtable;
import org.apache.felix.serializer.impl.json.JsonSerializerImpl;
+import org.apache.felix.serializer.impl.json.JsonWriterFactory;
import org.apache.felix.serializer.impl.yaml.YamlSerializerImpl;
+import org.apache.felix.serializer.impl.yaml.YamlWriterFactory;
import org.osgi.framework.BundleActivator;
import org.osgi.framework.BundleContext;
import org.osgi.service.serializer.Serializer;
+import org.osgi.service.serializer.WriterFactory;
public class Activator implements BundleActivator {
@Override
@@ -32,13 +35,27 @@ public class Activator implements Bundle
jsonProps.put("mimetype", new String[] {
"application/json", "application/x-javascript", "text/javascript",
"text/x-javascript", "text/x-json" });
- context.registerService(Serializer.class, new JsonSerializerImpl(), jsonProps);
+ context.registerService(
+ new String[]{Serializer.class.getName(), Serializer.JsonSerializer.class.getName()},
+ new JsonSerializerImpl(),
+ jsonProps);
+ context.registerService(
+ new String[]{WriterFactory.class.getName(), WriterFactory.JsonWriterFactory.class.getName()},
+ new JsonWriterFactory(),
+ jsonProps);
Dictionary<String, Object> yamlProps = new Hashtable<>();
yamlProps.put("mimetype", new String[] {
"text/yaml", "text/x-yaml", "application/yaml",
"application/x-yaml" });
- context.registerService(Serializer.class, new YamlSerializerImpl(), yamlProps);
+ context.registerService(
+ new String[]{Serializer.class.getName(), Serializer.YamlSerializer.class.getName()},
+ new YamlSerializerImpl(),
+ yamlProps);
+ context.registerService(
+ new String[]{WriterFactory.class.getName(), WriterFactory.YamlWriterFactory.class.getName()},
+ new YamlWriterFactory(),
+ yamlProps);
}
@Override
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DebugJsonWriter.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DebugJsonWriter.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DebugJsonWriter.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DebugJsonWriter.java Fri Aug 25 11:22:37 2017
@@ -14,89 +14,59 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-package org.apache.felix.serializer.impl.yaml;
+package org.apache.felix.serializer.impl.json;
-import java.io.IOException;
-import java.io.OutputStream;
import java.lang.reflect.Array;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
+import java.util.TreeMap;
+import java.util.Map.Entry;
-import org.apache.felix.serializer.impl.AbstractSpecifying;
-import org.osgi.service.serializer.Serializing;
-import org.osgi.util.converter.ConversionException;
+import org.osgi.dto.DTO;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.Converter;
-public class YamlSerializingImpl extends AbstractSpecifying<Serializing> implements Serializing {
- private volatile Converter converter;
- private final Map<String, Object> configuration;
- private final Object object;
+public class DebugJsonWriter implements Writer {
+
+ private final Converter converter;
+ private final boolean ignoreNull = false;
private final int indentation = 2;
- public YamlSerializingImpl(Converter c, Map<String, Object> cfg, Object obj) {
+ public DebugJsonWriter(Converter c) {
converter = c;
- configuration = cfg;
- object = obj;
- }
-
- @Override
- public Appendable to(Appendable out) {
- try {
- out.append(encode(object));
- return out;
- } catch (IOException e) {
- throw new ConversionException("Problem converting to YAML", e);
- }
- }
-
-
- @Override
- public void to(OutputStream os) throws IOException {
- to(os, StandardCharsets.UTF_8);
- }
-
- @Override
- public void to(OutputStream os, Charset charset) {
- try {
- os.write(encode(object).getBytes(charset));
- } catch (IOException e) {
- throw new ConversionException("Problem converting to YAML", e);
- }
}
@Override
- public String toString() {
- return encode(object);
- }
-
- private String encode(Object obj) {
+ public String write(Object obj) {
return encode(obj, 0).trim();
}
@SuppressWarnings("rawtypes")
private String encode(Object obj, int level) {
- if (obj == null)
- return "";
+ if (obj == null) {
+ return ignoreNull ? "" : "null";
+ }
- if (obj instanceof Map) {
+ if (obj instanceof String) {
+ return "\"" + (String)obj + "\"";
+ } else if (obj instanceof Map) {
return encodeMap((Map) obj, level);
} else if (obj instanceof Collection) {
return encodeCollection((Collection) obj, level);
+ } else if (obj instanceof DTO) {
+ return encodeMap(converter.convert(obj).sourceAsDTO().to(Map.class), level);
} else if (obj.getClass().isArray()) {
return encodeCollection(asCollection(obj), level);
- } else if (obj instanceof Number) {
+ } else if (obj instanceof Number) {
return obj.toString();
} else if (obj instanceof Boolean) {
return obj.toString();
}
- return "'" + converter.convert(obj).to(String.class) + "'";
+ return "\"" + converter.convert(obj).to(String.class) + "\"";
}
private Collection<?> asCollection(Object arr) {
@@ -110,26 +80,47 @@ public class YamlSerializingImpl extends
}
private String encodeCollection(Collection<?> collection, int level) {
- StringBuilder sb = new StringBuilder();
+ level++;
+ StringBuilder sb = new StringBuilder("[\n");
+
+ boolean first = true;
for (Object o : collection) {
- sb.append("\n");
- sb.append(getIdentPrefix(level));
- sb.append("- ");
- sb.append(encode(o, level + 1));
+ if (first)
+ first = false;
+ else
+ sb.append(",\n");
+
+ sb.append( getIdentPrefix(level));
+ sb.append(encode(o, level));
}
+
+ sb.append("\n");
+ sb.append( getIdentPrefix(--level));
+ sb.append("]");
return sb.toString();
}
@SuppressWarnings({ "rawtypes", "unchecked" })
private String encodeMap(Map m, int level) {
- StringBuilder sb = new StringBuilder();
- for (Entry entry : (Set<Entry>) m.entrySet()) {
- sb.append("\n");
+ level++;
+ Map orderedMap = new TreeMap<>(m);
+ StringBuilder sb = new StringBuilder("{\n");
+ for (Entry entry : (Set<Entry>) orderedMap.entrySet()) {
+ if (entry.getKey() == null || entry.getValue() == null)
+ if (ignoreNull)
+ continue;
+
+ if (sb.length() > 2)
+ sb.append(",\n");
sb.append(getIdentPrefix(level));
+ sb.append('"');
sb.append(entry.getKey().toString());
- sb.append(": ");
- sb.append(encode(entry.getValue(), level + 1));
+ sb.append("\":");
+ sb.append(encode(entry.getValue(), level));
}
+ sb.append("\n");
+ sb.append(getIdentPrefix(--level));
+ sb.append("}");
return sb.toString();
}
@@ -141,20 +132,4 @@ public class YamlSerializingImpl extends
sb.append(' ');
return sb.toString();
}
-
- @Override
- public Serializing pretty() {
- return this;
- }
-
- @Override
- public Serializing ignoreNull() {
- return this;
- }
-
- @Override
- public Serializing with(Converter c) {
- converter = c;
- return this;
- }
}
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonParser.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonParser.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonParser.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonParser.java Fri Aug 25 11:22:37 2017
@@ -24,7 +24,7 @@ import java.util.Map;
import org.apache.felix.utils.json.JSONParser;
import org.osgi.service.serializer.Parser;
-public class DefaultParser implements Parser {
+public class DefaultJsonParser implements Parser {
@Override
public Map<String, Object> parse(InputStream in)
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonWriter.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonWriter.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonWriter.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultJsonWriter.java Fri Aug 25 11:22:37 2017
@@ -16,64 +16,30 @@
*/
package org.apache.felix.serializer.impl.json;
-import java.io.IOException;
-import java.io.OutputStream;
import java.lang.reflect.Array;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
+import java.util.Map.Entry;
-import org.apache.felix.serializer.impl.AbstractSpecifying;
import org.osgi.dto.DTO;
-import org.osgi.service.serializer.Serializing;
-import org.osgi.util.converter.ConversionException;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.Converter;
-public class JsonSerializingImpl extends AbstractSpecifying<Serializing> implements Serializing {
- private volatile Converter converter;
- private final Map<String, Object> configuration;
- private final Object object;
- private final boolean ignoreNull;
-
- JsonSerializingImpl(Converter c, Map<String, Object> cfg, Object obj) {
- converter = c;
- configuration = cfg;
- ignoreNull = Boolean.TRUE.equals(Boolean.parseBoolean((String) configuration.get("ignoreNull")));
- object = obj;
- }
-
- @Override
- public Appendable to(Appendable out) {
- try {
- out.append(encode(object));
- return out;
- } catch (IOException e) {
- throw new ConversionException("Problem converting to JSON", e);
- }
- }
+public class DefaultJsonWriter implements Writer {
- @Override
- public void to(OutputStream os, Charset charset) {
- try {
- os.write(encode(object).getBytes(charset));
- } catch (IOException e) {
- throw new ConversionException("Problem converting to JSON", e);
- }
- }
+ private final Converter converter;
+ private final boolean ignoreNull = false;
- @Override
- public void to(OutputStream out) throws IOException {
- to(out, StandardCharsets.UTF_8);
+ public DefaultJsonWriter(Converter c) {
+ converter = c;
}
@Override
- public String toString() {
- return encode(object);
+ public String write(Object obj) {
+ return encode(obj);
}
@SuppressWarnings("rawtypes")
@@ -93,7 +59,7 @@ public class JsonSerializingImpl extends
return encodeMap((Map) obj);
} else if (obj instanceof Collection) {
return encodeCollection((Collection) obj);
- } else if (sourceAsDTO || obj instanceof DTO) { // TODO: Use isDTOTYPE() or instanceOf??
+ } else if (obj instanceof DTO) {
return encodeMap(converter.convert(obj).sourceAsDTO().to(Map.class));
} else if (obj.getClass().isArray()) {
return encodeCollection(asCollection(obj));
@@ -152,20 +118,4 @@ public class JsonSerializingImpl extends
return sb.toString();
}
-
- @Override
- public Serializing ignoreNull() {
- return this;
- }
-
- @Override
- public Serializing pretty() {
- return this;
- }
-
- @Override
- public Serializing with(Converter c) {
- converter = c;
- return this;
- }
}
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonDeserializingImpl.java Fri Aug 25 11:22:37 2017
@@ -77,13 +77,13 @@ public class JsonDeserializingImpl<T> im
}
@Override
- public Deserializing<T> with(Converter c) {
+ public Deserializing<T> convertWith(Converter c) {
converter = c;
return this;
}
@Override
- public Deserializing<T> with(Parser p) {
+ public Deserializing<T> parseWith(Parser p) {
parser = p;
return this;
}
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializerImpl.java Fri Aug 25 11:22:37 2017
@@ -16,28 +16,21 @@
*/
package org.apache.felix.serializer.impl.json;
-import java.io.IOException;
-import java.io.OutputStream;
import java.lang.reflect.Type;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
-import org.apache.felix.serializer.impl.AbstractSpecifying;
import org.osgi.service.serializer.Deserializing;
import org.osgi.service.serializer.Parser;
import org.osgi.service.serializer.Serializer;
import org.osgi.service.serializer.Serializing;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.Converter;
import org.osgi.util.converter.Converters;
import org.osgi.util.converter.TypeReference;
public class JsonSerializerImpl implements Serializer {
- private final Map<String, Object> configuration = new ConcurrentHashMap<>();
- private final ThreadLocal<Boolean> threadLocal = new ThreadLocal<>();
private final Converter converter = Converters.standardConverter();
- private final Parser parser = new DefaultParser();
+ private final Parser parser = new DefaultJsonParser();
+ private final Writer writer = new DefaultJsonWriter(converter);
@Override
public <T> Deserializing<T> deserialize(Class<T> cls) {
@@ -46,79 +39,7 @@ public class JsonSerializerImpl implemen
@Override
public Serializing serialize(Object obj) {
- Serializing encoding = new JsonSerializingImpl(converter, configuration, obj);
-
- if (pretty()) {
- Boolean top = threadLocal.get();
- if (top == null) {
- threadLocal.set(Boolean.TRUE);
-
- // TODO implement this properly, the following it just a dev temp thing
- encoding = new EncodingWrapper("{}{}{}{}{}", encoding, "{}{}{}{}{}");
- }
- }
- return encoding;
- }
-
- private boolean pretty() {
- return Boolean.TRUE.equals(Boolean.parseBoolean((String) configuration.get("pretty")));
- }
-
- private class EncodingWrapper extends AbstractSpecifying<Serializing> implements Serializing {
- private final Serializing delegate;
- private String prefix;
- private String postfix;
-
- EncodingWrapper(String pre, Serializing encoding, String post) {
- prefix = pre;
- delegate = encoding;
- postfix = post;
- }
-
- @Override
- public void to(OutputStream os) {
- try {
- os.write(toString().getBytes(StandardCharsets.UTF_8));
- } catch (IOException e) {
- throw new RuntimeException(e);
- }
- }
-
- @Override
- public String toString() {
- try {
- return prefix + delegate.toString() + postfix;
- } finally {
- threadLocal.set(null);
- }
- }
-
- @Override
- public Serializing ignoreNull() {
- return this;
- }
-
- @Override
- public Serializing pretty() {
- return this;
- }
-
- @Override
- public void to(OutputStream out, Charset charset) {
- // TODO Auto-generated method stub
- }
-
- @Override
- public Appendable to(Appendable out) {
- // TODO Auto-generated method stub
- return null;
- }
-
- @Override
- public Serializing with(Converter converter) {
- delegate.with(converter);
- return this;
- }
+ return new JsonSerializingImpl(converter, writer, obj);
}
@Override
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonSerializingImpl.java Fri Aug 25 11:22:37 2017
@@ -18,39 +18,31 @@ package org.apache.felix.serializer.impl
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.reflect.Array;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
import org.apache.felix.serializer.impl.AbstractSpecifying;
-import org.osgi.dto.DTO;
import org.osgi.service.serializer.Serializing;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.ConversionException;
import org.osgi.util.converter.Converter;
public class JsonSerializingImpl extends AbstractSpecifying<Serializing> implements Serializing {
private volatile Converter converter;
- private final Map<String, Object> configuration;
+ private volatile boolean useCustomWriter;
+ private volatile Writer writer;
private final Object object;
- private final boolean ignoreNull;
- JsonSerializingImpl(Converter c, Map<String, Object> cfg, Object obj) {
+ JsonSerializingImpl(Converter c, Writer w, Object obj) {
converter = c;
- configuration = cfg;
- ignoreNull = Boolean.TRUE.equals(Boolean.parseBoolean((String) configuration.get("ignoreNull")));
+ writer = w;
object = obj;
}
@Override
public Appendable to(Appendable out) {
try {
- out.append(encode(object));
+ out.append(writer.write(object));
return out;
} catch (IOException e) {
throw new ConversionException("Problem converting to JSON", e);
@@ -60,7 +52,7 @@ public class JsonSerializingImpl extends
@Override
public void to(OutputStream os, Charset charset) {
try {
- os.write(encode(object).getBytes(charset));
+ os.write(writer.write(object).getBytes(charset));
} catch (IOException e) {
throw new ConversionException("Problem converting to JSON", e);
}
@@ -73,99 +65,20 @@ public class JsonSerializingImpl extends
@Override
public String toString() {
- return encode(object);
- }
-
- @SuppressWarnings("rawtypes")
- private String encode(Object obj) {
- if (obj == null) {
- return ignoreNull ? "" : "null";
- }
-
- if (obj instanceof String) {
- // Optimization for when the value is already a String
- // David B.: is this ok? Or does the Converter do something else
- // other than just returning a String??
- // I noticed that a lot of calculations were going on, just
- // to return a String anyway.
- return "\"" + (String)obj + "\"";
- } else if (obj instanceof Map) {
- return encodeMap((Map) obj);
- } else if (obj instanceof Collection) {
- return encodeCollection((Collection) obj);
- } else if (sourceAsDTO || obj instanceof DTO) { // TODO: Use isDTOTYPE() or instanceOf??
- return encodeMap(converter.convert(obj).sourceAsDTO().to(Map.class));
- } else if (obj.getClass().isArray()) {
- return encodeCollection(asCollection(obj));
- } else if (obj instanceof Number) {
- return obj.toString();
- } else if (obj instanceof Boolean) {
- return obj.toString();
- }
-
- return "\"" + converter.convert(obj).to(String.class) + "\"";
- }
-
- private Collection<?> asCollection(Object arr) {
- // Arrays.asList() doesn't work for primitive arrays
- int len = Array.getLength(arr);
- List<Object> l = new ArrayList<>(len);
- for (int i=0; i<len; i++) {
- l.add(Array.get(arr, i));
- }
- return l;
- }
-
- private String encodeCollection(Collection<?> collection) {
- StringBuilder sb = new StringBuilder("[");
-
- boolean first = true;
- for (Object o : collection) {
- if (first)
- first = false;
- else
- sb.append(',');
-
- sb.append(encode(o));
- }
-
- sb.append("]");
- return sb.toString();
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private String encodeMap(Map m) {
- StringBuilder sb = new StringBuilder("{");
- for (Entry entry : (Set<Entry>) m.entrySet()) {
- if (entry.getKey() == null || entry.getValue() == null)
- if (ignoreNull)
- continue;
-
- if (sb.length() > 1)
- sb.append(',');
- sb.append('"');
- sb.append(entry.getKey().toString());
- sb.append("\":");
- sb.append(encode(entry.getValue()));
- }
- sb.append("}");
-
- return sb.toString();
+ return writer.write(object);
}
@Override
- public Serializing ignoreNull() {
- return this;
- }
-
- @Override
- public Serializing pretty() {
+ public Serializing convertWith(Converter c) {
+ converter = c;
+ if (!useCustomWriter)
+ writer = new DefaultJsonWriter(converter);
return this;
}
@Override
- public Serializing with(Converter c) {
- converter = c;
+ public Serializing writeWith(Writer w) {
+ writer = w;
return this;
}
}
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/DefaultParser.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java Fri Aug 25 11:22:37 2017
@@ -16,32 +16,19 @@
*/
package org.apache.felix.serializer.impl.json;
-import java.io.IOException;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
+import org.osgi.service.serializer.Writer;
+import org.osgi.service.serializer.WriterFactory;
+import org.osgi.util.converter.Converter;
-import org.apache.felix.utils.json.JSONParser;
-import org.osgi.service.serializer.Parser;
-
-public class DefaultParser implements Parser {
+public class JsonWriterFactory implements WriterFactory {
@Override
- public Map<String, Object> parse(InputStream in)
- {
- try {
- JSONParser parser = new JSONParser(in);
- return parser.getParsed();
- } catch (IOException e) {
- Map<String, Object> report = new HashMap<>();
- report.put("error", e.getMessage());
- return report;
- }
+ public Writer newDefaultWriter(Converter c) {
+ return new DefaultJsonWriter(c);
}
@Override
- public Map<String, Object> parse(CharSequence in) {
- JSONParser parser = new JSONParser(in);
- return parser.getParsed();
+ public Writer newDebugWriter(Converter c) {
+ return new DebugJsonWriter(c);
}
}
Propchange: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/json/JsonWriterFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlParser.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlParser.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlParser.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlParser.java Fri Aug 25 11:22:37 2017
@@ -23,7 +23,7 @@ import java.util.Map;
import org.osgi.service.serializer.Parser;
import org.yaml.snakeyaml.Yaml;
-public class DefaultParser implements Parser {
+public class DefaultYamlParser implements Parser {
@Override
public Map<String, Object> parse(InputStream in)
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlWriter.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlWriter.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlWriter.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultYamlWriter.java Fri Aug 25 11:22:37 2017
@@ -16,66 +16,28 @@
*/
package org.apache.felix.serializer.impl.yaml;
-import java.io.IOException;
-import java.io.OutputStream;
import java.lang.reflect.Array;
-import java.nio.charset.Charset;
-import java.nio.charset.StandardCharsets;
import java.util.ArrayList;
import java.util.Collection;
import java.util.List;
import java.util.Map;
-import java.util.Map.Entry;
import java.util.Set;
+import java.util.Map.Entry;
-import org.apache.felix.serializer.impl.AbstractSpecifying;
-import org.osgi.service.serializer.Serializing;
-import org.osgi.util.converter.ConversionException;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.Converter;
-public class YamlSerializingImpl extends AbstractSpecifying<Serializing> implements Serializing {
- private volatile Converter converter;
- private final Map<String, Object> configuration;
- private final Object object;
+public class DefaultYamlWriter implements Writer {
+
+ private final Converter converter;
private final int indentation = 2;
- public YamlSerializingImpl(Converter c, Map<String, Object> cfg, Object obj) {
+ public DefaultYamlWriter(Converter c) {
converter = c;
- configuration = cfg;
- object = obj;
- }
-
- @Override
- public Appendable to(Appendable out) {
- try {
- out.append(encode(object));
- return out;
- } catch (IOException e) {
- throw new ConversionException("Problem converting to YAML", e);
- }
- }
-
-
- @Override
- public void to(OutputStream os) throws IOException {
- to(os, StandardCharsets.UTF_8);
- }
-
- @Override
- public void to(OutputStream os, Charset charset) {
- try {
- os.write(encode(object).getBytes(charset));
- } catch (IOException e) {
- throw new ConversionException("Problem converting to YAML", e);
- }
}
@Override
- public String toString() {
- return encode(object);
- }
-
- private String encode(Object obj) {
+ public String write(Object obj) {
return encode(obj, 0).trim();
}
@@ -141,20 +103,4 @@ public class YamlSerializingImpl extends
sb.append(' ');
return sb.toString();
}
-
- @Override
- public Serializing pretty() {
- return this;
- }
-
- @Override
- public Serializing ignoreNull() {
- return this;
- }
-
- @Override
- public Serializing with(Converter c) {
- converter = c;
- return this;
- }
}
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlDeserializingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlDeserializingImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlDeserializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlDeserializingImpl.java Fri Aug 25 11:22:37 2017
@@ -77,13 +77,13 @@ public class YamlDeserializingImpl<T> im
}
@Override
- public Deserializing<T> with(Converter c) {
+ public Deserializing<T> convertWith(Converter c) {
converter = c;
return this;
}
@Override
- public Deserializing<T> with(Parser p) {
+ public Deserializing<T> parseWith(Parser p) {
parser = p;
return this;
}
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializerImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializerImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializerImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializerImpl.java Fri Aug 25 11:22:37 2017
@@ -17,21 +17,20 @@
package org.apache.felix.serializer.impl.yaml;
import java.lang.reflect.Type;
-import java.util.Map;
-import java.util.concurrent.ConcurrentHashMap;
import org.osgi.service.serializer.Deserializing;
import org.osgi.service.serializer.Parser;
import org.osgi.service.serializer.Serializer;
import org.osgi.service.serializer.Serializing;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.Converter;
import org.osgi.util.converter.Converters;
import org.osgi.util.converter.TypeReference;
public class YamlSerializerImpl implements Serializer {
- private final Map<String, Object> configuration = new ConcurrentHashMap<>();
private final Converter converter = Converters.standardConverter();
- private final Parser parser = new DefaultParser();
+ private final Parser parser = new DefaultYamlParser();
+ private final Writer writer = new DefaultYamlWriter(converter);
@Override
public <T> Deserializing<T> deserialize(Class<T> cls) {
@@ -50,6 +49,6 @@ public class YamlSerializerImpl implemen
@Override
public Serializing serialize(Object obj) {
- return new YamlSerializingImpl(converter, configuration, obj);
+ return new YamlSerializingImpl(converter, writer, obj);
}
}
Modified: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlSerializingImpl.java Fri Aug 25 11:22:37 2017
@@ -18,37 +18,31 @@ package org.apache.felix.serializer.impl
import java.io.IOException;
import java.io.OutputStream;
-import java.lang.reflect.Array;
import java.nio.charset.Charset;
import java.nio.charset.StandardCharsets;
-import java.util.ArrayList;
-import java.util.Collection;
-import java.util.List;
-import java.util.Map;
-import java.util.Map.Entry;
-import java.util.Set;
import org.apache.felix.serializer.impl.AbstractSpecifying;
import org.osgi.service.serializer.Serializing;
+import org.osgi.service.serializer.Writer;
import org.osgi.util.converter.ConversionException;
import org.osgi.util.converter.Converter;
public class YamlSerializingImpl extends AbstractSpecifying<Serializing> implements Serializing {
private volatile Converter converter;
- private final Map<String, Object> configuration;
+ private volatile boolean useCustomWriter;
+ private volatile Writer writer;
private final Object object;
- private final int indentation = 2;
- public YamlSerializingImpl(Converter c, Map<String, Object> cfg, Object obj) {
+ public YamlSerializingImpl(Converter c, Writer w, Object obj) {
converter = c;
- configuration = cfg;
+ writer = w;
object = obj;
}
@Override
public Appendable to(Appendable out) {
try {
- out.append(encode(object));
+ out.append(writer.write(object));
return out;
} catch (IOException e) {
throw new ConversionException("Problem converting to YAML", e);
@@ -64,7 +58,7 @@ public class YamlSerializingImpl extends
@Override
public void to(OutputStream os, Charset charset) {
try {
- os.write(encode(object).getBytes(charset));
+ os.write(writer.write(object).getBytes(charset));
} catch (IOException e) {
throw new ConversionException("Problem converting to YAML", e);
}
@@ -72,89 +66,21 @@ public class YamlSerializingImpl extends
@Override
public String toString() {
- return encode(object);
- }
-
- private String encode(Object obj) {
- return encode(obj, 0).trim();
- }
-
- @SuppressWarnings("rawtypes")
- private String encode(Object obj, int level) {
- if (obj == null)
- return "";
-
- if (obj instanceof Map) {
- return encodeMap((Map) obj, level);
- } else if (obj instanceof Collection) {
- return encodeCollection((Collection) obj, level);
- } else if (obj.getClass().isArray()) {
- return encodeCollection(asCollection(obj), level);
- } else if (obj instanceof Number) {
- return obj.toString();
- } else if (obj instanceof Boolean) {
- return obj.toString();
- }
-
- return "'" + converter.convert(obj).to(String.class) + "'";
- }
-
- private Collection<?> asCollection(Object arr) {
- // Arrays.asList() doesn't work for primitive arrays
- int len = Array.getLength(arr);
- List<Object> l = new ArrayList<>(len);
- for (int i=0; i<len; i++) {
- l.add(Array.get(arr, i));
- }
- return l;
- }
-
- private String encodeCollection(Collection<?> collection, int level) {
- StringBuilder sb = new StringBuilder();
- for (Object o : collection) {
- sb.append("\n");
- sb.append(getIdentPrefix(level));
- sb.append("- ");
- sb.append(encode(o, level + 1));
- }
- return sb.toString();
- }
-
- @SuppressWarnings({ "rawtypes", "unchecked" })
- private String encodeMap(Map m, int level) {
- StringBuilder sb = new StringBuilder();
- for (Entry entry : (Set<Entry>) m.entrySet()) {
- sb.append("\n");
- sb.append(getIdentPrefix(level));
- sb.append(entry.getKey().toString());
- sb.append(": ");
- sb.append(encode(entry.getValue(), level + 1));
- }
-
- return sb.toString();
- }
-
- private String getIdentPrefix(int level) {
- int numSpaces = indentation * level;
- StringBuilder sb = new StringBuilder(numSpaces);
- for (int i=0; i < numSpaces; i++)
- sb.append(' ');
- return sb.toString();
+ return writer.write(object);
}
@Override
- public Serializing pretty() {
- return this;
- }
-
- @Override
- public Serializing ignoreNull() {
+ public Serializing convertWith(Converter c) {
+ converter = c;
+ if (!useCustomWriter)
+ writer = new DefaultYamlWriter(converter);
return this;
}
@Override
- public Serializing with(Converter c) {
- converter = c;
+ public Serializing writeWith(Writer w) {
+ writer = w;
+ useCustomWriter = true;
return this;
}
}
Copied: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java (from r1806124, felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java)
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java?p2=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java&p1=felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java&r1=1806124&r2=1806157&rev=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/DefaultParser.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java Fri Aug 25 11:22:37 2017
@@ -16,35 +16,19 @@
*/
package org.apache.felix.serializer.impl.yaml;
-import java.io.InputStream;
-import java.util.HashMap;
-import java.util.Map;
+import org.osgi.service.serializer.Writer;
+import org.osgi.service.serializer.WriterFactory;
+import org.osgi.util.converter.Converter;
-import org.osgi.service.serializer.Parser;
-import org.yaml.snakeyaml.Yaml;
-
-public class DefaultParser implements Parser {
+public class YamlWriterFactory implements WriterFactory {
@Override
- public Map<String, Object> parse(InputStream in)
- {
- Yaml yaml = new Yaml();
- return toMap(yaml.load(in));
+ public Writer newDefaultWriter(Converter c) {
+ return new DefaultYamlWriter(c);
}
@Override
- public Map<String, Object> parse(CharSequence in) {
- Yaml yaml = new Yaml();
- return toMap(yaml.load(in.toString()));
- }
-
- @SuppressWarnings( { "unchecked", "rawtypes" } )
- private Map<String, Object> toMap(Object obj) {
- if (obj instanceof Map)
- return (Map)obj;
-
- Map<String, Object> map = new HashMap<>();
- map.put("parsed", obj);
- return map;
+ public Writer newDebugWriter(Converter c) {
+ return new DefaultYamlWriter(c);
}
}
Propchange: felix/trunk/converter/serializer/src/main/java/org/apache/felix/serializer/impl/yaml/YamlWriterFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Deserializing.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Deserializing.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Deserializing.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Deserializing.java Fri Aug 25 11:22:37 2017
@@ -71,14 +71,14 @@ public interface Deserializing<T> {
* @param converter The converter to use.
* @return This Deserializing object to allow further invocations on it.
*/
- Deserializing<T> with(Converter converter);
+ Deserializing<T> convertWith(Converter converter);
/**
* Specify the parser to be used, if an alternative to the default internal
* parser is required.
*
* @param parser the parser to use.
- * @return This Serializing object to allow further invocations on it.
+ * @return This Deserializing object to allow further invocations on it.
*/
- Deserializing<T> with(Parser parser);
+ Deserializing<T> parseWith(Parser parser);
}
Modified: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializer.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializer.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializer.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializer.java Fri Aug 25 11:22:37 2017
@@ -69,4 +69,16 @@ public interface Serializer {
* operation.
*/
Serializing serialize(Object obj);
+
+ /**
+ * A convenience means of obtaining a JsonSerializer without having to
+ * configure service settings.
+ */
+ static interface JsonSerializer extends Serializer {}
+
+ /**
+ * A convenience means of obtaining a YamlWriterFactory without having to
+ * configure service settings.
+ */
+ static interface YamlSerializer extends Serializer {}
}
Modified: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializing.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializing.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializing.java (original)
+++ felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Serializing.java Fri Aug 25 11:22:37 2017
@@ -32,24 +32,6 @@ import org.osgi.util.converter.Specifyin
@ProviderType
public interface Serializing extends Specifying<Serializing> {
/**
- * Specify that keys with a {@code null} value must not appear in the
- * result. If not specified {@code null} values will be included in the
- * result.
- *
- * @return This Serializing object to allow further invocations on it.
- */
- Serializing ignoreNull();
-
- /**
- * Specify that the encoded output should be formatted to look 'pretty',
- * which may make it easier for humans to read. If not specified, the
- * encoded output should be formatted to be compact, so save space.
- *
- * @return This Serializing object to allow further invocations on it.
- */
- Serializing pretty();
-
- /**
* Use an output stream as the target of the encoding operation. UTF-8 will
* be used if applicable, the character set may not apply to binary
* encodings.
@@ -93,5 +75,15 @@ public interface Serializing extends Spe
* @param converter The converter to use.
* @return This Serializing object to allow further invocations on it.
*/
- Serializing with(Converter converter);
+ Serializing convertWith(Converter converter);
+
+ /**
+ * Specify the writer to be used, if an alternative to the default internal
+ * writer is required. A selection of Writers are available via the WriterFactory,
+ * or a completely different Writer can be provided directly.
+ *
+ * @param parser the writer to use.
+ * @return This Serializing object to allow further invocations on it.
+ */
+ Serializing writeWith(Writer writer);
}
Added: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java?rev=1806157&view=auto
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java (added)
+++ felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java Fri Aug 25 11:22:37 2017
@@ -0,0 +1,23 @@
+/*
+ * Copyright (c) OSGi Alliance (2016). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.serializer;
+
+/**
+ * Common interface for a writer, which can be provided by the client.
+ */
+public interface Writer {
+ String write(Object obj);
+}
Propchange: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/Writer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java?rev=1806157&view=auto
==============================================================================
--- felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java (added)
+++ felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java Fri Aug 25 11:22:37 2017
@@ -0,0 +1,57 @@
+/*
+ * Copyright (c) OSGi Alliance (2017). All Rights Reserved.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package org.osgi.service.serializer;
+
+import org.osgi.annotation.versioning.ProviderType;
+import org.osgi.util.converter.Converter;
+
+/**
+ * A factory to create a writer with the desired behaviour.
+ *
+ * @author $Id:$
+ */
+@ProviderType
+public interface WriterFactory {
+
+ /**
+ * A default Writer, but which will use a custom Converter.
+ *
+ * @param c the custom Converter that will be used by the Writer
+ * @return a default Writer, but one which will use a custom Converter
+ */
+ Writer newDefaultWriter(Converter c);
+
+ /**
+ * A writer that is useful for debugging. This write outputs "pretty"
+ * format.
+ *
+ * @param c the custom Converter that will be used by the Writer
+ * @return A new writer useful for debugging
+ */
+ Writer newDebugWriter(Converter c);
+
+ /**
+ * A convenience means of obtaining a JsonWriterFactory without having to
+ * configure service settings.
+ */
+ static interface JsonWriterFactory extends WriterFactory {}
+
+ /**
+ * A convenience means of obtaining a YamlWriterFactory without having to
+ * configure service settings.
+ */
+ static interface YamlWriterFactory extends WriterFactory {}
+}
Propchange: felix/trunk/converter/serializer/src/main/java/org/osgi/service/serializer/WriterFactory.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonBackingObjectSerializationTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonBackingObjectSerializationTest.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonBackingObjectSerializationTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonBackingObjectSerializationTest.java Fri Aug 25 11:22:37 2017
@@ -17,10 +17,14 @@
package org.apache.felix.serializer.impl.json;
import java.lang.reflect.Type;
+import java.util.List;
import java.util.Map;
+import java.util.stream.Collectors;
+import java.util.stream.Stream;
import org.junit.Test;
import org.osgi.dto.DTO;
+import org.osgi.util.converter.Converter;
import org.osgi.util.converter.ConverterFunction;
import org.osgi.util.converter.Converters;
import org.osgi.util.converter.TargetRule;
@@ -38,62 +42,55 @@ public class JsonBackingObjectSerializat
.sourceAsDTO()
.to(Map.class);
- final String expected =
- "{\"a\":\"A\","
- + "\"o\":{\"a\":\"AA\",\"b\":\"BB\"},"
- + "\"b\":\"B\"}";
-
- final String actual = new JsonSerializerImpl().serialize(m).toString();
+ final String actual = new JsonSerializerImpl()
+ .serialize(m)
+ .writeWith(new JsonWriterFactory().newDebugWriter(Converters.standardConverter()))
+ .toString();
- // TODO: Cannot predict order of elements for equals comparison//
-// assertEquals(expected, actual);
+ assertEquals(EXPECTED, actual);
}
@Test
public void testComplexMapSerializationWithoutUsingPreConversion() {
- final String expected =
- "{\"a\":\"A\","
- + "\"o\":{\"a\":\"AA\",\"b\":\"BB\"},"
- + "\"b\":\"B\"}";
-
+ final JsonWriterFactory factory = new JsonWriterFactory();
final String actual = new JsonSerializerImpl()
- .serialize(MyDTOishObject.factory( "A", "B" ))
- .sourceAsDTO()
+ .serialize(MyDTOishObject.factory("A", "B"))
+ .writeWith(factory.newDebugWriter(Converters.standardConverter()))
.toString();
- // TODO: Cannot predict order of elements for equals comparison//
-// assertEquals(expected, actual);
+ assertEquals(EXPECTED, actual);
}
@Test
public void testComplexMapSerializationUsingRule() {
- final String expected =
- "{\"o\":{\"a\":\"AA\",\"b\":\"BB\"},"
- + "\"a\":\"A\","
- + "\"b\":\"B\"}";
-
+ final Converter converter = Converters.newConverterBuilder().rule(new MapTargetRule()).build();
+ final JsonWriterFactory factory = new JsonWriterFactory();
final String actual = new JsonSerializerImpl()
- .serialize(MyDTOishObject.factory( "A", "B" ))
- .with(Converters.newConverterBuilder().rule(new MapTargetRule()).build())
+ .serialize(MyDTOishObject.factory("A", "B"))
+ .convertWith(converter)
+ .writeWith(factory.newDebugWriter(converter))
.toString();
- // Cannot get result to behave predictably... Order is random.
-// assertEquals(expected.length(), actual.length());
+ assertEquals(EXPECTED, actual);
}
public static class MyDTOishObject extends DTO {
public String a;
public String b;
public OtherObject o;
+ public List<String> l1;
+ public List<OtherObject> l2;
public MyDTOishObject( String a, String b ) {
this.a = a;
this.b = b;
- o = OtherObject.factory( a + a, b + b );
+ o = OtherObject.factory(a + a, b + b);
+ l1 = Stream.of("one", "two", "three", "four").collect(Collectors.toList());
+ l2 = Stream.of(OtherObject.factory(a, b), OtherObject.factory(a + a, b + b)).collect(Collectors.toList());
}
public static MyDTOishObject factory( String a, String b ) {
- return new MyDTOishObject( a, b );
+ return new MyDTOishObject(a, b);
}
}
@@ -101,13 +98,13 @@ public class JsonBackingObjectSerializat
public String a;
public String b;
- public OtherObject( String a, String b ) {
+ public OtherObject(String a, String b) {
this.a = a;
this.b = b;
}
- public static OtherObject factory( String a, String b ) {
- return new OtherObject( a, b );
+ public static OtherObject factory(String a, String b) {
+ return new OtherObject(a, b);
}
}
@@ -135,4 +132,30 @@ public class JsonBackingObjectSerializat
.to(targetType);
}
}
+
+ private static final String EXPECTED =
+ "{\n" +
+ " \"a\":\"A\",\n" +
+ " \"b\":\"B\",\n" +
+ " \"l1\":[\n" +
+ " \"one\",\n" +
+ " \"two\",\n" +
+ " \"three\",\n" +
+ " \"four\"\n" +
+ " ],\n" +
+ " \"l2\":[\n" +
+ " {\n" +
+ " \"a\":\"A\",\n" +
+ " \"b\":\"B\"\n" +
+ " },\n" +
+ " {\n" +
+ " \"a\":\"AA\",\n" +
+ " \"b\":\"BB\"\n" +
+ " }\n" +
+ " ],\n" +
+ " \"o\":{\n" +
+ " \"a\":\"AA\",\n" +
+ " \"b\":\"BB\"\n" +
+ " }\n" +
+ "}";
}
Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonParserTest.java Fri Aug 25 11:22:37 2017
@@ -34,7 +34,7 @@ public class JsonParserTest {
@Before
public void setup() {
- parser = new DefaultParser();
+ parser = new DefaultJsonParser();
}
@Test
Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/json/JsonSerializerTest.java Fri Aug 25 11:22:37 2017
@@ -88,7 +88,7 @@ public class JsonSerializerTest {
rule(new TypeRule<String, Foo>(String.class, Foo.class, v -> Foo.fsFun(v))).build();
JsonSerializerImpl jsonCodec = new JsonSerializerImpl();
- String json = jsonCodec.serialize(m).with(ca).toString();
+ String json = jsonCodec.serialize(m).convertWith(ca).toString();
JSONObject jo = new JSONObject(json);
assertEquals(1, jo.length());
@@ -97,7 +97,7 @@ public class JsonSerializerTest {
// And convert back
Map<String,Map<String,Foo>> m2 = jsonCodec.deserialize(new TypeReference<Map<String,Map<String,Foo>>>(){}).
- with(ca).from(json);
+ convertWith(ca).from(json);
assertEquals(m, m2);
}
Modified: felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/yaml/YamlSerializerTest.java
URL: http://svn.apache.org/viewvc/felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/yaml/YamlSerializerTest.java?rev=1806157&r1=1806156&r2=1806157&view=diff
==============================================================================
--- felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/yaml/YamlSerializerTest.java (original)
+++ felix/trunk/converter/serializer/src/test/java/org/apache/felix/serializer/impl/yaml/YamlSerializerTest.java Fri Aug 25 11:22:37 2017
@@ -83,14 +83,14 @@ public class YamlSerializerTest {
rule(new TypeRule<String, Foo>(String.class, Foo.class, v -> Foo.fsFun(v))).build();
YamlSerializerImpl yamlCodec = new YamlSerializerImpl();
- String yaml = yamlCodec.serialize(m).with(ca).toString();
+ String yaml = yamlCodec.serialize(m).convertWith(ca).toString();
assertEquals("submap: \n" +
" f: '<fofofo>'", yaml);
// And convert back
Map<String,Map<String,Foo>> m2 = yamlCodec.deserialize(new TypeReference<Map<String,Map<String,Foo>>>(){}).
- with(ca).from(yaml);
+ convertWith(ca).from(yaml);
assertEquals(m, m2);
}