Skip to content

Commit

Permalink
Merge pull request #4 from pingunaut/1-replace-nashorn-by-jackson
Browse files Browse the repository at this point in the history
Replace Nashorn by Jackson for json mapping. Fixes #1
  • Loading branch information
martinspielmann authored Jul 3, 2020
2 parents 54ad170 + 417c2c3 commit 99037d8
Show file tree
Hide file tree
Showing 13 changed files with 110 additions and 226 deletions.
1 change: 0 additions & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,7 +25,6 @@ Here comes **haveibeenpwned4j** awesomeness:
* Check if an account has been in a paste ✔
* Get all breaches (or based on a domain) ✔
* Get a single breach ✔
* No dependencies ✔
* Apache License Version 2.0 ✔
* Available from Maven Central ✔

Expand Down
11 changes: 11 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -35,6 +35,7 @@
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
<project.reporting.outputEncoding>UTF-8</project.reporting.outputEncoding>
<junit5.version>5.7.0-M1</junit5.version>
<jackson.version>2.11.1</jackson.version>
<jacoco-maven-plugin.version>0.8.5</jacoco-maven-plugin.version>
<maven-compiler-plugin.version>3.8.1</maven-compiler-plugin.version>
<maven-surefire-plugin.version>3.0.0-M4</maven-surefire-plugin.version>
Expand All @@ -53,6 +54,16 @@
<version>${junit5.version}</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>com.fasterxml.jackson.datatype</groupId>
<artifactId>jackson-datatype-jsr310</artifactId>
<version>${jackson.version}</version>
</dependency>
</dependencies>

<build>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,11 @@
import java.util.ArrayList;
import java.util.List;

import java.util.Map;
import java.util.stream.Collectors;
import javax.script.ScriptException;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.ScriptEngineHolder;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.SimpleJsonMapper;

import com.fasterxml.jackson.core.JsonProcessingException;

import de.martinspielmann.haveibeenpwned4j.mapper.BreachListMapper;
import de.martinspielmann.haveibeenpwned4j.mapper.ResponseMapper;
import de.martinspielmann.haveibeenpwned4j.model.Breach;

public class DefaultBreachListMapper implements BreachListMapper {
Expand All @@ -27,18 +26,10 @@ public List<Breach> map(String json) {
if (json == null || "".equals(json)) {
return new ArrayList<>();
}
return parseJsonToJavaList(json).stream().map(SimpleJsonMapper::parseBreach)
.collect(Collectors.toList());
}

@SuppressWarnings("unchecked")
protected List<Map<String, Object>> parseJsonToJavaList(String json) {
String script = "Java.asJSONCompatible(" + json + ")";
try {
return (List<Map<String, Object>>) ScriptEngineHolder.get().getScriptEngine().eval(script);
} catch (ScriptException e) {
throw new IllegalStateException("Error parsing json string to list", e);
return List.of(ResponseMapper.mapType(json, Breach[].class));
} catch (JsonProcessingException e) {
throw new IllegalStateException("Error parsing json string to breach list", e);
}
}

}
Original file line number Diff line number Diff line change
@@ -1,11 +1,9 @@
package de.martinspielmann.haveibeenpwned4j.internal.mapper;

import com.fasterxml.jackson.core.JsonProcessingException;

import java.util.Map;
import javax.script.ScriptException;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.ScriptEngineHolder;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.SimpleJsonMapper;
import de.martinspielmann.haveibeenpwned4j.mapper.BreachMapper;
import de.martinspielmann.haveibeenpwned4j.mapper.ResponseMapper;
import de.martinspielmann.haveibeenpwned4j.model.Breach;

public class DefaultBreachMapper implements BreachMapper {
Expand All @@ -24,17 +22,10 @@ public Breach map(String json) {
if (json == null || "".equals(json)) {
return null;
}
return SimpleJsonMapper.parseBreach(parseJsonToJavaObject(json));
}

@SuppressWarnings("unchecked")
protected Map<String, Object> parseJsonToJavaObject(String json) {
String script = "Java.asJSONCompatible(" + json + ")";
try {
return (Map<String, Object>) ScriptEngineHolder.get().getScriptEngine().eval(script);
} catch (ScriptException e) {
throw new IllegalStateException("Error parsing json string to object", e);
return ResponseMapper.mapType(json, Breach.class);
} catch (JsonProcessingException e) {
throw new IllegalStateException("Error parsing json string to breach", e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,9 +3,10 @@
import java.util.ArrayList;
import java.util.List;

import javax.script.ScriptException;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.ScriptEngineHolder;
import com.fasterxml.jackson.core.JsonProcessingException;

import de.martinspielmann.haveibeenpwned4j.mapper.DataClassesListMapper;
import de.martinspielmann.haveibeenpwned4j.mapper.ResponseMapper;

public class DefaultDataClassesListMapper implements DataClassesListMapper {

Expand All @@ -23,17 +24,10 @@ public List<String> map(String json) {
if (json == null || "".equals(json)) {
return new ArrayList<>();
}
return parseJsonToJavaList(json);
}

@SuppressWarnings("unchecked")
protected List<String> parseJsonToJavaList(String json) {
String script = "Java.asJSONCompatible(" + json + ")";
try {
return (List<String>) ScriptEngineHolder.get().getScriptEngine().eval(script);
} catch (ScriptException e) {
return List.of(ResponseMapper.mapType(json, String[].class));
} catch (JsonProcessingException e) {
throw new IllegalStateException("Error parsing json string to list", e);
}
}

}
Original file line number Diff line number Diff line change
Expand Up @@ -3,12 +3,10 @@
import java.util.ArrayList;
import java.util.List;

import java.util.Map;
import java.util.stream.Collectors;
import javax.script.ScriptException;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.ScriptEngineHolder;
import de.martinspielmann.haveibeenpwned4j.internal.mapper.json.SimpleJsonMapper;
import com.fasterxml.jackson.core.JsonProcessingException;

import de.martinspielmann.haveibeenpwned4j.mapper.PasteListMapper;
import de.martinspielmann.haveibeenpwned4j.mapper.ResponseMapper;
import de.martinspielmann.haveibeenpwned4j.model.Paste;

public class DefaultPasteListMapper implements PasteListMapper {
Expand All @@ -27,18 +25,10 @@ public List<Paste> map(String json) {
if (json == null || "".equals(json)) {
return new ArrayList<>();
}
return parseJsonToJavaList(json).stream().map(SimpleJsonMapper::parsePaste)
.collect(Collectors.toList());
}

@SuppressWarnings("unchecked")
protected List<Map<String, Object>> parseJsonToJavaList(String json) {
String script = "Java.asJSONCompatible(" + json + ")";
try {
return (List<Map<String, Object>>) ScriptEngineHolder.get().getScriptEngine().eval(script);
} catch (ScriptException e) {
throw new IllegalStateException("Error parsing json string to list", e);
}
return List.of(ResponseMapper.mapType(json, Paste[].class));
} catch (JsonProcessingException e) {
throw new IllegalStateException("Error parsing json string to paste list", e);
}
}

}

This file was deleted.

This file was deleted.

Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
package de.martinspielmann.haveibeenpwned4j.mapper;

import com.fasterxml.jackson.core.JsonProcessingException;
import com.fasterxml.jackson.databind.JsonMappingException;
import com.fasterxml.jackson.databind.ObjectMapper;
import com.fasterxml.jackson.datatype.jsr310.JavaTimeModule;

public class ResponseMapper {

private static ObjectMapper MAPPER;

static {
MAPPER = new ObjectMapper();
MAPPER.registerModule(new JavaTimeModule());
}

public static final <T> T mapType(String content, Class<T> valueType)
throws JsonMappingException, JsonProcessingException {
return MAPPER.readValue(content, valueType);
}
}
Loading

0 comments on commit 99037d8

Please sign in to comment.