You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@any23.apache.org by le...@apache.org on 2018/05/10 06:00:59 UTC
[4/6] any23 git commit: use jackson for parsing json
use jackson for parsing json
Project: http://git-wip-us.apache.org/repos/asf/any23/repo
Commit: http://git-wip-us.apache.org/repos/asf/any23/commit/ff4ad701
Tree: http://git-wip-us.apache.org/repos/asf/any23/tree/ff4ad701
Diff: http://git-wip-us.apache.org/repos/asf/any23/diff/ff4ad701
Branch: refs/heads/master
Commit: ff4ad701f8a047b0921e4eea35a8c1f88128e487
Parents: 2cb1242
Author: Julio Caguano <ju...@gmail.com>
Authored: Sun May 6 19:36:28 2018 -0500
Committer: Julio Caguano <ju...@gmail.com>
Committed: Sun May 6 19:36:28 2018 -0500
----------------------------------------------------------------------
.../org/apache/any23/writer/JSONWriter.java | 203 ++++++++-----------
.../org/apache/any23/writer/JSONWriterTest.java | 3 +-
2 files changed, 82 insertions(+), 124 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/any23/blob/ff4ad701/core/src/main/java/org/apache/any23/writer/JSONWriter.java
----------------------------------------------------------------------
diff --git a/core/src/main/java/org/apache/any23/writer/JSONWriter.java b/core/src/main/java/org/apache/any23/writer/JSONWriter.java
index a4cce5a..d274871 100644
--- a/core/src/main/java/org/apache/any23/writer/JSONWriter.java
+++ b/core/src/main/java/org/apache/any23/writer/JSONWriter.java
@@ -14,12 +14,13 @@
* See the License for the specific language governing permissions and
* limitations under the License.
*/
-
package org.apache.any23.writer;
-import java.io.BufferedOutputStream;
+import com.fasterxml.jackson.core.JsonFactory;
+import com.fasterxml.jackson.core.JsonGenerator;
+import com.fasterxml.jackson.core.util.DefaultPrettyPrinter;
+import java.io.IOException;
import java.io.OutputStream;
-import java.io.PrintStream;
import java.util.Optional;
import org.apache.any23.extractor.ExtractionContext;
import org.eclipse.rdf4j.model.BNode;
@@ -35,29 +36,35 @@ import org.eclipse.rdf4j.model.Value;
*/
public class JSONWriter implements FormatWriter {
- private final PrintStream ps;
-
+ private JsonGenerator ps;
private boolean documentStarted = false;
- private boolean firstArrayElemWritten = false;
- private boolean firstObjectWritten = false;
-
public JSONWriter(OutputStream os) {
- if(os == null) {
+ if (os == null) {
throw new NullPointerException("Output stream cannot be null.");
}
- this.ps = new PrintStream(new BufferedOutputStream(os));
+ JsonFactory factory = new JsonFactory();
+ try {
+ this.ps = factory.createGenerator(os)
+ .setPrettyPrinter(new DefaultPrettyPrinter());
+ } catch (IOException ex) {
+ }
}
@Override
public void startDocument(IRI documentIRI) throws TripleHandlerException {
- if(documentStarted) {
+ if (documentStarted) {
throw new IllegalStateException("Document already started.");
}
documentStarted = true;
- firstArrayElemWritten = false;
- ps.print("{ \"quads\" : [");
+ try {
+ ps.writeStartObject();
+ ps.writeFieldName("quads");
+ ps.writeStartArray();
+ } catch (IOException ex) {
+ throw new TripleHandlerException("IO Error while starting document.", ex);
+ }
}
@Override
@@ -67,42 +74,38 @@ public class JSONWriter implements FormatWriter {
@Override
public void receiveTriple(Resource s, IRI p, Value o, IRI g, ExtractionContext context)
- throws TripleHandlerException {
+ throws TripleHandlerException {
validateDocumentStarted();
-
- if(firstArrayElemWritten) {
- ps.print(", ");
- } else {
- firstArrayElemWritten = true;
- }
- firstObjectWritten = false;
-
- ps.print('[');
-
- if(s instanceof IRI) {
- printExplicitIRI(s.stringValue(), ps);
- } else {
- printBNode(s.stringValue(), ps);
- }
-
- printIRI(p.stringValue(), ps);
-
- if(o instanceof IRI) {
- printExplicitIRI(o.stringValue(), ps);
- } else if(o instanceof BNode) {
- printBNode(o.stringValue(), ps);
- } else {
- printLiteral((Literal) o, ps);
+ try {
+ ps.writeStartArray();
+
+ if (s instanceof IRI) {
+ printExplicitIRI(s.stringValue());
+ } else {
+ printBNode(s.stringValue());
+ }
+
+ printIRI(p.stringValue());
+
+ if (o instanceof IRI) {
+ printExplicitIRI(o.stringValue());
+ } else if (o instanceof BNode) {
+ printBNode(o.stringValue());
+ } else {
+ printLiteral((Literal) o);
+ }
+
+ printIRI(g == null ? null : g.stringValue());
+
+ ps.writeEndArray();
+ } catch (IOException ex) {
+ throw new TripleHandlerException("IO Error while writing triple", ex);
}
-
- printIRI(g == null ? null : g.stringValue(), ps);
-
- ps.print(']');
}
@Override
public void receiveNamespace(String prefix, String uri, ExtractionContext context)
- throws TripleHandlerException {
+ throws TripleHandlerException {
// Empty.
}
@@ -114,8 +117,14 @@ public class JSONWriter implements FormatWriter {
@Override
public void endDocument(IRI documentIRI) throws TripleHandlerException {
validateDocumentStarted();
- ps.print("]}");
- documentStarted = false;
+
+ try {
+ ps.writeEndArray();
+ ps.writeEndObject();
+ documentStarted = false;
+ } catch (IOException ex) {
+ throw new TripleHandlerException("IO Error while closing document.", ex);
+ }
}
@Override
@@ -125,105 +134,53 @@ public class JSONWriter implements FormatWriter {
@Override
public void close() throws TripleHandlerException {
- if(documentStarted) {
- endDocument(null);
- }
- ps.close();
+ if (documentStarted) {
+ endDocument(null);
+ }
+ try {
+ ps.close();
+ } catch (IOException ex) {
+ throw new TripleHandlerException("IO Error while closing stream.", ex);
+ }
}
private void validateDocumentStarted() {
- if(!documentStarted) {
+ if (!documentStarted) {
throw new IllegalStateException("Document didn't start.");
}
}
- private void printIRI(String uri, PrintStream ps) {
- printValue(uri, ps);
+ private void printIRI(String uri) throws IOException {
+ printValue(uri);
}
- private void printExplicitIRI(String uri, PrintStream ps) {
- printValue("uri", uri, ps);
+ private void printExplicitIRI(String uri) throws IOException {
+ printValue("uri", uri);
}
- private void printBNode(String bnode, PrintStream ps) {
- printValue("bnode", bnode, ps);
+ private void printBNode(String bnode) throws IOException {
+ printValue("bnode", bnode);
}
- private void printCommaIfNeeded(PrintStream ps) {
- if(firstObjectWritten) {
- ps.print(", ");
- } else {
- firstObjectWritten = true;
- }
- }
-
- private void printLiteral(Literal literal, PrintStream ps) {
- printCommaIfNeeded(ps);
-
- ps.print('{');
-
- ps.print("\"type\" : \"literal\"");
-
- ps.print(", ");
-
- ps.print("\"value\" : ");
- ps.print('"');
- ps.print(literal.stringValue());
- ps.print('"');
-
- ps.print(", ");
+ private void printLiteral(Literal literal) throws IOException {
+ ps.writeStartObject();
+ ps.writeStringField("type", "literal");
+ ps.writeStringField("value", literal.stringValue());
- ps.print("\"lang\" : ");
final Optional<String> language = literal.getLanguage();
- if (language.isPresent()) {
- ps.print('"');
- ps.print(literal.getLanguage().get());
- ps.print('"');
- } else {
- ps.print("null");
- }
-
- ps.print(", ");
+ ps.writeStringField("lang", language.isPresent() ? literal.getLanguage().get() : null);
- ps.print("\"datatype\" : ");
final IRI datatype = literal.getDatatype();
- if(datatype != null) {
- ps.print('"');
- ps.print(datatype.stringValue());
- ps.print('"');
- } else {
- ps.print("null");
- }
-
- ps.print('}');
+ ps.writeStringField("datatype", datatype != null ? datatype.stringValue() : null);
+ ps.writeEndObject();
}
- private void printValue(String type, String value, PrintStream ps) {
- printCommaIfNeeded(ps);
-
- ps.print("{ \"type\" : \"");
- ps.print(type);
- ps.print("\", \"value\" : ");
- if (value != null) {
- ps.print('"');
- ps.print(value);
- ps.print('"');
- } else {
- ps.print("null");
- }
- ps.print('}');
+ private void printValue(String type, String value) throws IOException {
+ ps.writeString(value);
}
- private void printValue(String value, PrintStream ps) {
- printCommaIfNeeded(ps);
-
- if (value != null) {
- ps.print('"');
- ps.print(value);
- ps.print('"');
- } else {
- ps.print("null");
- }
+ private void printValue(String value) throws IOException {
+ ps.writeString(value);
}
@Override
http://git-wip-us.apache.org/repos/asf/any23/blob/ff4ad701/core/src/test/java/org/apache/any23/writer/JSONWriterTest.java
----------------------------------------------------------------------
diff --git a/core/src/test/java/org/apache/any23/writer/JSONWriterTest.java b/core/src/test/java/org/apache/any23/writer/JSONWriterTest.java
index 8660716..93d0558 100644
--- a/core/src/test/java/org/apache/any23/writer/JSONWriterTest.java
+++ b/core/src/test/java/org/apache/any23/writer/JSONWriterTest.java
@@ -17,6 +17,7 @@
package org.apache.any23.writer;
import java.io.ByteArrayOutputStream;
+import java.io.IOException;
import org.apache.any23.extractor.ExtractionContext;
import org.eclipse.rdf4j.model.IRI;
import org.eclipse.rdf4j.model.impl.SimpleValueFactory;
@@ -32,7 +33,7 @@ import org.junit.Test;
public class JSONWriterTest {
@Test
- public void testJSONWriting() throws TripleHandlerException {
+ public void testJSONWriting() throws TripleHandlerException, IOException {
ByteArrayOutputStream baos = new ByteArrayOutputStream();
writeContent(new JSONWriter(baos));