Skip to content

Commit 5837766

Browse files
Move to Jackson 3
1 parent 5dabb33 commit 5837766

17 files changed

Lines changed: 75 additions & 76 deletions

pom.xml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
<modelVersion>4.0.0</modelVersion>
55
<groupId>io.frictionlessdata</groupId>
66
<artifactId>datapackage-java</artifactId>
7-
<version>0.9.9-SNAPSHOT</version>
7+
<version>0.10.0-SNAPSHOT</version>
88
<packaging>jar</packaging>
99
<issueManagement>
1010
<url>https://github.com/frictionlessdata/datapackage-java/issues</url>
@@ -23,7 +23,7 @@
2323
<maven.compiler.source>${java.version}</maven.compiler.source>
2424
<maven.compiler.target>${java.version}</maven.compiler.target>
2525
<maven.compiler.compiler>${java.version}</maven.compiler.compiler>
26-
<tableschema-java-version>0.9.9</tableschema-java-version>
26+
<tableschema-java-version>0.10.0</tableschema-java-version>
2727
<junit.version>6.0.0</junit.version>
2828
<slf4j-simple.version>2.0.17</slf4j-simple.version>
2929
<apache-commons-collections4.version>4.5.0</apache-commons-collections4.version>

src/main/java/io/frictionlessdata/datapackage/Contributor.java

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
11
package io.frictionlessdata.datapackage;
22

33
import com.fasterxml.jackson.annotation.JsonPropertyOrder;
4-
import com.fasterxml.jackson.core.type.TypeReference;
5-
import com.fasterxml.jackson.databind.JsonNode;
6-
import com.fasterxml.jackson.databind.exc.InvalidFormatException;
7-
import com.fasterxml.jackson.databind.node.ArrayNode;
4+
import tools.jackson.core.type.TypeReference;
5+
import tools.jackson.databind.JsonNode;
6+
import tools.jackson.databind.exc.InvalidFormatException;
7+
import tools.jackson.databind.node.ArrayNode;
88
import io.frictionlessdata.datapackage.exceptions.DataPackageException;
99
import io.frictionlessdata.tableschema.util.JsonUtil;
1010
import org.apache.commons.lang3.StringUtils;
@@ -58,8 +58,8 @@ public static Collection<Contributor> fromJson(JsonNode json) {
5858
return JsonUtil.getInstance().deserialize(json, new TypeReference<>() {});
5959
} catch (Exception ex) {
6060
Throwable cause = ex.getCause();
61-
if (Objects.nonNull(cause) && cause.getClass().isAssignableFrom(InvalidFormatException.class)) {
62-
if (Objects.nonNull(cause.getCause()) && cause.getCause().getClass().isAssignableFrom(MalformedURLException.class)) {
61+
if (ex.getClass().isAssignableFrom(InvalidFormatException.class)) {
62+
if (Objects.nonNull(cause) && cause.getClass().isAssignableFrom(MalformedURLException.class)) {
6363
throw new DataPackageException(invalidUrlMsg);
6464
}
6565
}

src/main/java/io/frictionlessdata/datapackage/Dialect.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,7 @@
22

33
import com.fasterxml.jackson.annotation.*;
44
import com.fasterxml.jackson.annotation.JsonInclude.Include;
5-
import com.fasterxml.jackson.databind.JsonNode;
5+
import tools.jackson.databind.JsonNode;
66
import io.frictionlessdata.tableschema.io.FileReference;
77
import io.frictionlessdata.tableschema.util.JsonUtil;
88
import org.apache.commons.csv.CSVFormat;

src/main/java/io/frictionlessdata/datapackage/JSONBase.java

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,10 +3,10 @@
33
import com.fasterxml.jackson.annotation.JsonIgnore;
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonInclude.Include;
6-
import com.fasterxml.jackson.core.type.TypeReference;
7-
import com.fasterxml.jackson.databind.JsonNode;
8-
import com.fasterxml.jackson.databind.node.ObjectNode;
9-
import com.fasterxml.jackson.databind.node.TextNode;
6+
import tools.jackson.core.type.TypeReference;
7+
import tools.jackson.databind.JsonNode;
8+
import tools.jackson.databind.node.ObjectNode;
9+
import tools.jackson.databind.node.StringNode;
1010
import io.frictionlessdata.datapackage.exceptions.DataPackageException;
1111
import io.frictionlessdata.datapackage.exceptions.DataPackageFileOrUrlNotFoundException;
1212
import io.frictionlessdata.datapackage.exceptions.DataPackageValidationException;
@@ -222,10 +222,10 @@ private static FileReference referenceFromJson(JsonNode resourceJson, String key
222222
}
223223

224224
public static void setFromJson(JsonNode resourceJson, JSONBase retVal) {
225-
if (resourceJson.has(JSONBase.JSON_KEY_SCHEMA) && resourceJson.get(JSONBase.JSON_KEY_SCHEMA).isTextual())
226-
retVal.originalReferences.put(JSONBase.JSON_KEY_SCHEMA, resourceJson.get(JSONBase.JSON_KEY_SCHEMA).asText());
227-
if (resourceJson.has(JSONBase.JSON_KEY_DIALECT) && resourceJson.get(JSONBase.JSON_KEY_DIALECT).isTextual())
228-
retVal.originalReferences.put(JSONBase.JSON_KEY_DIALECT, resourceJson.get(JSONBase.JSON_KEY_DIALECT).asText());
225+
if (resourceJson.has(JSONBase.JSON_KEY_SCHEMA) && resourceJson.get(JSONBase.JSON_KEY_SCHEMA).isString())
226+
retVal.originalReferences.put(JSONBase.JSON_KEY_SCHEMA, resourceJson.get(JSONBase.JSON_KEY_SCHEMA).asString());
227+
if (resourceJson.has(JSONBase.JSON_KEY_DIALECT) && resourceJson.get(JSONBase.JSON_KEY_DIALECT).isString())
228+
retVal.originalReferences.put(JSONBase.JSON_KEY_DIALECT, resourceJson.get(JSONBase.JSON_KEY_DIALECT).asString());
229229

230230
// TODO: A mapper library might be useful, but not required
231231
String name = textValueOrNull(resourceJson, JSONBase.JSON_KEY_NAME);
@@ -259,7 +259,7 @@ public static void setFromJson(JsonNode resourceJson, JSONBase retVal) {
259259
}
260260

261261
private static String textValueOrNull(JsonNode source, String fieldName) {
262-
return source.has(fieldName) ? source.get(fieldName).asText() : null;
262+
return source.has(fieldName) ? source.get(fieldName).asString() : null;
263263
}
264264

265265

@@ -441,8 +441,8 @@ public static ObjectNode dereference(Object obj, Object basePath, boolean isArch
441441
else if(obj instanceof ObjectNode){
442442
// Don't need to do anything, just cast and return.
443443
return (ObjectNode)obj;
444-
} else if (obj instanceof TextNode) {
445-
return dereference(((TextNode) obj).asText(), basePath, isArchivePackage);
444+
} else if (obj instanceof StringNode) {
445+
return dereference(((StringNode) obj).asString(), basePath, isArchivePackage);
446446
} else if(obj instanceof String){
447447
String reference = (String)obj;
448448
if (isValidUrl(reference))

src/main/java/io/frictionlessdata/datapackage/Package.java

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -4,11 +4,11 @@
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonInclude.Include;
66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.fasterxml.jackson.core.type.TypeReference;
8-
import com.fasterxml.jackson.databind.JsonNode;
9-
import com.fasterxml.jackson.databind.ObjectMapper;
10-
import com.fasterxml.jackson.databind.node.ArrayNode;
11-
import com.fasterxml.jackson.databind.node.ObjectNode;
7+
import tools.jackson.core.type.TypeReference;
8+
import tools.jackson.databind.JsonNode;
9+
import tools.jackson.databind.ObjectMapper;
10+
import tools.jackson.databind.node.ArrayNode;
11+
import tools.jackson.databind.node.ObjectNode;
1212
import io.frictionlessdata.datapackage.exceptions.DataPackageException;
1313
import io.frictionlessdata.datapackage.exceptions.DataPackageFileOrUrlNotFoundException;
1414
import io.frictionlessdata.datapackage.exceptions.DataPackageValidationException;
@@ -18,8 +18,8 @@
1818
import io.frictionlessdata.tableschema.exception.JsonParsingException;
1919
import io.frictionlessdata.tableschema.exception.ValidationException;
2020
import io.frictionlessdata.tableschema.util.JsonUtil;
21-
import org.apache.commons.collections.list.UnmodifiableList;
22-
import org.apache.commons.collections.set.UnmodifiableSet;
21+
import org.apache.commons.collections4.list.UnmodifiableList;
22+
import org.apache.commons.collections4.set.UnmodifiableSet;
2323
import org.apache.commons.lang3.StringUtils;
2424

2525
import java.io.*;
@@ -273,7 +273,7 @@ public String getId() {
273273
public Set<String> getKeywords() {
274274
if (null == keywords)
275275
return null;
276-
return UnmodifiableSet.decorate(keywords);
276+
return UnmodifiableSet.unmodifiableSet(keywords);
277277
}
278278

279279
@JsonProperty("version")
@@ -334,7 +334,7 @@ public ZonedDateTime getCreated() {
334334
public List<Contributor> getContributors() {
335335
if (null == contributors)
336336
return null;
337-
return UnmodifiableList.decorate(contributors);
337+
return UnmodifiableList.unmodifiableList(contributors);
338338
}
339339

340340
/**
@@ -348,7 +348,7 @@ public Object getProperty(String key) {
348348
JsonNode jNode = jsonObject.get(key);
349349
if (jNode.isArray()) {
350350
return getProperty(key, new TypeReference<ArrayList<?>>() {});
351-
} else if (jNode.isTextual()) {
351+
} else if (jNode.isString()) {
352352
return getProperty(key, new TypeReference<String>() {});
353353
} else if (jNode.isBoolean()) {
354354
return getProperty(key, new TypeReference<Boolean>() {});
@@ -716,7 +716,7 @@ final URL getBaseUrl(){
716716
private ObjectNode getJsonNode(){
717717
ObjectNode objectNode = (ObjectNode) JsonUtil.getInstance().createNode(this);
718718
// update any manually set properties
719-
this.jsonObject.fields().forEachRemaining(f->{
719+
this.jsonObject.properties().iterator().forEachRemaining(f->{
720720
// but do not overwrite properties set via the API
721721
if (!wellKnownKeys.contains(f.getKey())) {
722722
objectNode.set(f.getKey(), f.getValue());
@@ -813,8 +813,8 @@ private void setJson(ObjectNode jsonNodeSource) throws Exception {
813813
this.setVersion(textValueOrNull(jsonNodeSource, Package.JSON_KEY_VERSION));
814814

815815
if (jsonNodeSource.has(Package.JSON_KEY_HOMEPAGE) &&
816-
StringUtils.isNotEmpty(jsonNodeSource.get(Package.JSON_KEY_HOMEPAGE).asText())) {
817-
this.setHomepage( new URL(jsonNodeSource.get(Package.JSON_KEY_HOMEPAGE).asText()));
816+
StringUtils.isNotEmpty(jsonNodeSource.get(Package.JSON_KEY_HOMEPAGE).asString())) {
817+
this.setHomepage( new URL(jsonNodeSource.get(Package.JSON_KEY_HOMEPAGE).asString()));
818818
}
819819

820820
this.setImagePath(textValueOrNull(jsonNodeSource, Package.JSON_KEY_IMAGE));
@@ -826,13 +826,13 @@ private void setJson(ObjectNode jsonNodeSource) throws Exception {
826826
if (jsonNodeSource.has(Package.JSON_KEY_KEYWORDS)) {
827827
ArrayNode arr = (ArrayNode) jsonObject.get(Package.JSON_KEY_KEYWORDS);
828828
for (int i = 0; i < arr.size(); i++) {
829-
this.addKeyword(arr.get(i).asText());
829+
this.addKeyword(arr.get(i).asString());
830830
}
831831
}
832832
List<String> wellKnownKeys = Arrays.asList(JSON_KEY_NAME, JSON_KEY_RESOURCES, JSON_KEY_ID, JSON_KEY_VERSION,
833833
JSON_KEY_HOMEPAGE, JSON_KEY_IMAGE, JSON_KEY_CREATED, JSON_KEY_CONTRIBUTORS,
834834
JSON_KEY_KEYWORDS);
835-
jsonNodeSource.fieldNames().forEachRemaining((k) -> {
835+
jsonNodeSource.propertyNames().iterator().forEachRemaining((k) -> {
836836
if (!wellKnownKeys.contains(k)) {
837837
JsonNode obj = jsonNodeSource.get(k);
838838
this.setProperty(k, obj);
@@ -1016,6 +1016,6 @@ private static boolean isArchive(File f) throws IOException {
10161016

10171017

10181018
private static String textValueOrNull(JsonNode source, String fieldName) {
1019-
return source.has(fieldName) ? source.get(fieldName).asText() : null;
1019+
return source.has(fieldName) ? source.get(fieldName).asString() : null;
10201020
}
10211021
}

src/main/java/io/frictionlessdata/datapackage/Validator.java

Lines changed: 8 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,6 @@
11
package io.frictionlessdata.datapackage;
22

3-
import com.fasterxml.jackson.databind.JsonNode;
4-
import com.networknt.schema.ValidationMessage;
3+
import tools.jackson.databind.JsonNode;
54
import io.frictionlessdata.datapackage.exceptions.DataPackageException;
65
import io.frictionlessdata.tableschema.exception.ValidationException;
76
import io.frictionlessdata.tableschema.schema.FormalSchemaValidator;
@@ -12,7 +11,7 @@
1211
import java.io.IOException;
1312
import java.io.InputStream;
1413
import java.net.URL;
15-
import java.util.Set;
14+
import java.util.List;
1615

1716
/**
1817
* Validates a package schema against the frictionlessdata table-schema.json (from the TableSchema project).
@@ -29,10 +28,10 @@ public class Validator {
2928
*/
3029
public static void validate(JsonNode jsonObjectToValidate) throws IOException, DataPackageException, ValidationException {
3130
// If a profile value is provided.
32-
Set<ValidationMessage> errors;
31+
List<String> errors;
3332
String profileId = Profile.PROFILE_DATA_PACKAGE_DEFAULT;
3433
if (jsonObjectToValidate.has(Package.JSON_KEY_PROFILE)) {
35-
profileId = jsonObjectToValidate.get(Package.JSON_KEY_PROFILE).asText();
34+
profileId = jsonObjectToValidate.get(Package.JSON_KEY_PROFILE).asString();
3635

3736
String[] schemes = {"http", "https"};
3837
UrlValidator urlValidator = new UrlValidator(schemes);
@@ -60,11 +59,11 @@ public static void validate(JsonNode jsonObjectToValidate) throws IOException, D
6059
* @throws DataPackageException
6160
* @throws ValidationException
6261
*/
63-
private static Set<ValidationMessage> validate(JsonNode jsonObjectToValidate, String profileId) throws DataPackageException {
62+
private static List<String> validate(JsonNode jsonObjectToValidate, String profileId) throws DataPackageException {
6463
InputStream inputStream = Validator.class.getResourceAsStream("/schemas/" + profileId + ".json");
6564
if (inputStream != null) {
6665
FormalSchemaValidator schema = FormalSchemaValidator.fromJson(inputStream);
67-
Set<ValidationMessage> errors = schema.validate(jsonObjectToValidate);// throws a ValidationException if this object is invalid
66+
List<String> errors = schema.validate(jsonObjectToValidate);// throws a ValidationException if this object is invalid
6867
return errors;
6968
} else {
7069
throw new DataPackageException("Invalid profile id: " + profileId);
@@ -78,11 +77,11 @@ private static Set<ValidationMessage> validate(JsonNode jsonObjectToValidate, St
7877
* @throws DataPackageException
7978
* @throws ValidationException
8079
*/
81-
private static Set<ValidationMessage> validate(JsonNode jsonObjectToValidate, URL schemaUrl) throws IOException, DataPackageException {
80+
private static List<String> validate(JsonNode jsonObjectToValidate, URL schemaUrl) throws IOException, DataPackageException {
8281
try {
8382
InputStream inputStream = schemaUrl.openStream();
8483
FormalSchemaValidator schema = FormalSchemaValidator.fromJson(inputStream);
85-
Set<ValidationMessage> errors = schema.validate(jsonObjectToValidate);// throws a ValidationException if this object is invalid
84+
List<String> errors = schema.validate(jsonObjectToValidate);// throws a ValidationException if this object is invalid
8685
return errors;
8786
} catch (FileNotFoundException e) {
8887
throw new DataPackageException("Invalid profile schema URL: " + schemaUrl);

src/main/java/io/frictionlessdata/datapackage/resource/AbstractReferencebasedResource.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
import com.fasterxml.jackson.annotation.JsonIgnore;
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonProperty;
6-
import com.fasterxml.jackson.databind.JsonNode;
6+
import tools.jackson.databind.JsonNode;
77
import io.frictionlessdata.datapackage.Package;
88
import io.frictionlessdata.datapackage.exceptions.DataPackageException;
99
import io.frictionlessdata.datapackage.exceptions.DataPackageValidationException;
@@ -66,7 +66,7 @@ public Object getRawData() throws IOException {
6666
JsonNode getPathJson() {
6767
List<String> path = new ArrayList<>(getReferencesAsStrings());
6868
if (path.size() == 1) {
69-
return JsonUtil.getInstance().createTextNode(path.get(0));
69+
return JsonUtil.getInstance().createStringNode(path.get(0));
7070
} else {
7171
return JsonUtil.getInstance().createArrayNode(path);
7272
}

src/main/java/io/frictionlessdata/datapackage/resource/AbstractResource.java

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,8 +4,8 @@
44
import com.fasterxml.jackson.annotation.JsonInclude;
55
import com.fasterxml.jackson.annotation.JsonInclude.Include;
66
import com.fasterxml.jackson.annotation.JsonProperty;
7-
import com.fasterxml.jackson.core.JsonProcessingException;
8-
import com.fasterxml.jackson.databind.ObjectMapper;
7+
import tools.jackson.core.JacksonException;
8+
import tools.jackson.databind.ObjectMapper;
99
import io.frictionlessdata.datapackage.Dialect;
1010
import io.frictionlessdata.datapackage.JSONBase;
1111
import io.frictionlessdata.datapackage.Package;
@@ -285,7 +285,7 @@ public String getDataAsJson() {
285285
ObjectMapper mapper = JsonUtil.getInstance().getMapper();
286286
try {
287287
retVal = mapper.writerWithDefaultPrettyPrinter().writeValueAsString(rows);
288-
} catch (JsonProcessingException ex) {
288+
} catch (JacksonException ex) {
289289
throw new JsonSerializingException(ex);
290290
}
291291
return retVal;

src/main/java/io/frictionlessdata/datapackage/resource/JSONDataResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.frictionlessdata.datapackage.resource;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
4-
import com.fasterxml.jackson.databind.node.ArrayNode;
4+
import tools.jackson.databind.node.ArrayNode;
55
import io.frictionlessdata.datapackage.Profile;
66
import io.frictionlessdata.tableschema.tabledatasource.TableDataSource;
77
import io.frictionlessdata.tableschema.util.JsonUtil;

src/main/java/io/frictionlessdata/datapackage/resource/JSONObjectResource.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
package io.frictionlessdata.datapackage.resource;
22

33
import com.fasterxml.jackson.annotation.JsonInclude;
4-
import com.fasterxml.jackson.databind.node.ObjectNode;
4+
import tools.jackson.databind.node.ObjectNode;
55
import io.frictionlessdata.datapackage.Profile;
66
import io.frictionlessdata.tableschema.tabledatasource.TableDataSource;
77
import io.frictionlessdata.tableschema.util.JsonUtil;

0 commit comments

Comments
 (0)