You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jena.apache.org by an...@apache.org on 2020/01/23 12:25:30 UTC
[jena] branch master updated: Fix thread safety issue with HashMaps
in TypeMapper
This is an automated email from the ASF dual-hosted git repository.
andy pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/jena.git
The following commit(s) were added to refs/heads/master by this push:
new 4c494a3 Fix thread safety issue with HashMaps in TypeMapper
new 049f87c Merge pull request #676 from superfell/type_mapper
4c494a3 is described below
commit 4c494a3b779fd3ece960f2c4a8f0785e49b223b7
Author: Simon Fell <sf...@ebay.com>
AuthorDate: Wed Jan 22 10:21:44 2020 -0800
Fix thread safety issue with HashMaps in TypeMapper
---
.../java/org/apache/jena/datatypes/TypeMapper.java | 31 +++++++++++-----------
1 file changed, 15 insertions(+), 16 deletions(-)
diff --git a/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java b/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
index 1da6913..1f03d86 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/TypeMapper.java
@@ -20,8 +20,8 @@ package org.apache.jena.datatypes;
import java.net.URI;
import java.net.URL;
-import java.util.HashMap;
import java.util.Iterator;
+import java.util.concurrent.ConcurrentHashMap;
import org.apache.jena.datatypes.xsd.XSDDatatype ;
import org.apache.jena.datatypes.xsd.impl.RDFLangString ;
@@ -96,10 +96,10 @@ public class TypeMapper {
// Variables
/** Map from uri to datatype */
- private final HashMap<String, RDFDatatype> uriToDT = new HashMap<>();
+ private final ConcurrentHashMap<String, RDFDatatype> uriToDT = new ConcurrentHashMap<>();
/** Map from java class to datatype */
- private final HashMap<Class<?>, RDFDatatype> classToDT = new HashMap<>();
+ private final ConcurrentHashMap<Class<?>, RDFDatatype> classToDT = new ConcurrentHashMap<>();
//=======================================================================
// Methods
@@ -120,20 +120,19 @@ public class TypeMapper {
* literal).
*/
public RDFDatatype getSafeTypeByName(final String uri) {
+ if (uri == null) {
+ // Plain literal
+ return null;
+ }
RDFDatatype dtype = uriToDT.get(uri);
if (dtype == null) {
- if (uri == null) {
- // Plain literal
- return null;
+ // Unknown datatype
+ if (JenaParameters.enableSilentAcceptanceOfUnknownDatatypes) {
+ dtype = new BaseDatatype(uri);
+ registerDatatype(dtype);
} else {
- // Unknown datatype
- if (JenaParameters.enableSilentAcceptanceOfUnknownDatatypes) {
- dtype = new BaseDatatype(uri);
- registerDatatype(dtype);
- } else {
- throw new DatatypeFormatException(
- "Attempted to created typed literal using an unknown datatype - " + uri);
- }
+ throw new DatatypeFormatException(
+ "Attempted to created typed literal using an unknown datatype - " + uri);
}
}
return dtype;
@@ -147,7 +146,7 @@ public class TypeMapper {
* @return Datatype the datatype definition of null if not known.
*/
public RDFDatatype getTypeByName(final String uri) {
- return uriToDT.get(uri);
+ return uri == null ? null : uriToDT.get(uri);
}
/**
@@ -177,7 +176,7 @@ public class TypeMapper {
* @return a datatype whose value space matches the given java class
*/
public RDFDatatype getTypeByClass(final Class<?> clazz) {
- return classToDT.get(clazz);
+ return clazz == null ? null : classToDT.get(clazz);
}
/**