Fix nullpointer in RtfExporter
Change-Id: I15636c23be3a80eefc2ff6d4685d2f7fc697e1c4
diff --git a/Changes b/Changes
index cd9bc03..4a9fcdd 100644
--- a/Changes
+++ b/Changes
@@ -1,6 +1,7 @@
0.2.4 2021-04-27
- Fix temporary session-riding capabilities.
- Introduced central tinylog.
+ - Fix nullpointer in RTF export.
0.2.3 2021-03-24
- Added trail info to RTF export.
\ No newline at end of file
diff --git a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
index 81faa82..8422ca7 100644
--- a/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
+++ b/src/main/java/de/ids_mannheim/korap/plkexport/RtfExporter.java
@@ -117,34 +117,42 @@
w.append("\\line ");
- // Snippet
- w.append("{\\pard\\fs20\\f0\\qj ");
- if (s.hasMoreLeft()) {
- w.append("[...] ");
+ if (s != null) {
+
+ // Snippet
+ w.append("{\\pard\\fs20\\f0\\qj ");
+ if (s.hasMoreLeft()) {
+ w.append("[...] ");
+ };
+ rtfText(w, s.getLeft());
+ w.append("{\\b ");
+ rtfText(w, s.getMark());
+ if (s.isCutted()) {
+ w.append(" [!]");
+ };
+ w.append("}");
+ rtfText(w, s.getRight());
+ if (s.hasMoreRight()) {
+ w.append(" [...]");
+ };
+ w.append("\\par}");
};
- rtfText(w, s.getLeft());
- w.append("{\\b ");
- rtfText(w, s.getMark());
- if (s.isCutted()) {
- w.append(" [!]");
- };
- w.append("}");
- rtfText(w, s.getRight());
- if (s.hasMoreRight()) {
- w.append(" [...]");
- };
- w.append("\\par}");
// Reference
w.append("{\\pard");
w.append("\\qr\\fs18\\cf2\\f0 ");
w.append("{\\b ");
rtfText(w, match.getTitle());
- w.append(" von ");
- rtfText(w, match.getAuthor());
- w.append(" (");
- rtfText(w, match.getPubDate());
- w.append(")}");
+ if (match.getAuthor() != null) {
+ w.append(" von ");
+ rtfText(w, match.getAuthor());
+ };
+ if (match.getPubDate() != null) {
+ w.append(" (");
+ rtfText(w, match.getPubDate());
+ w.append(")");
+ };
+ w.append("}");
w.append("\\par}");
// TextSigle
@@ -264,6 +272,9 @@
* Based on jrtf by Christian Ullenboom
*/
private static void rtfText(Writer w, String rawText) throws IOException {
+ if (rawText == null)
+ return;
+
char c;
for (int i = 0; i < rawText.length(); i++) {
c = rawText.charAt( i );
diff --git a/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java b/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
index aa96c33..e4c5f46 100644
--- a/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
+++ b/src/test/java/de/ids_mannheim/korap/plkexport/RtfExporterTest.java
@@ -96,6 +96,39 @@
};
@Test
+ public void testRtfText () throws IOException {
+ RtfExporter rtf = new RtfExporter();
+ rtf.init("{\"matches\":[{\"author\":\"Goethe\"}]}");
+ rtf.finish();
+
+ Response resp = rtf.serve().build();
+ String x = (String) resp.getEntity();
+ resp.close();
+
+ assertTrue(x.contains("{\\pard\\fs18\\f0"));
+
+ rtf = new RtfExporter();
+ rtf.init("{\"matches\":[{\"author\":\"\"}]}");
+ rtf.finish();
+
+ resp = rtf.serve().build();
+ x = (String) resp.getEntity();
+ resp.close();
+
+ assertTrue(x.contains("{\\pard\\fs18\\f0"));
+
+ rtf = new RtfExporter();
+ rtf.init("{\"versuch\":\"try\"}");
+ rtf.finish();
+
+ resp = rtf.serve().build();
+ x = (String) resp.getEntity();
+ resp.close();
+
+ assertTrue(x.contains("{\\pard\\fs18\\f0"));
+};
+
+ @Test
public void testTrail () throws IOException {
Properties properties = ExWSConf.properties(null);