JENA-1288: Remove use of Xerces when alternatives exist.

Project: http://git-wip-us.apache.org/repos/asf/jena/repo
Commit: http://git-wip-us.apache.org/repos/asf/jena/commit/3c89e23b
Tree: http://git-wip-us.apache.org/repos/asf/jena/tree/3c89e23b
Diff: http://git-wip-us.apache.org/repos/asf/jena/diff/3c89e23b

Branch: refs/heads/ThreadPerGraphDataset
Commit: 3c89e23b8cda5ab4b73141607900d82f72edc075
Parents: b979226
Author: Andy Seaborne <[email protected]>
Authored: Thu Feb 9 13:00:58 2017 +0000
Committer: Andy Seaborne <[email protected]>
Committed: Thu Feb 9 13:28:24 2017 +0000

----------------------------------------------------------------------
 .../main/java/org/apache/jena/riot/SysRIOT.java |  5 +-
 .../jena/riot/checker/CheckerLiterals.java      | 82 ++++----------------
 .../jena/datatypes/xsd/XSDbase64Binary.java     |  5 +-
 .../apache/jena/datatypes/xsd/XSDhexBinary.java |  5 +-
 .../datatypes/xsd/impl/XSDBaseNumericType.java  |  2 +-
 .../reasoner/rulesys/builtins/MakeSkolem.java   |  7 +-
 .../jena/graph/test/TestTypedLiterals.java      |  5 +-
 7 files changed, 35 insertions(+), 76 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
----------------------------------------------------------------------
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java 
b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
index 33c5b52a..e0d8924 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/SysRIOT.java
@@ -30,7 +30,10 @@ public class SysRIOT
     public static final String riotLoggerName = "org.apache.jena.riot" ;
     private static Logger riotLogger = LoggerFactory.getLogger(riotLoggerName) 
;
     
+    /** @deprecated Do not use - lexicial forms are always strict. */
+    @Deprecated
     public static boolean StrictXSDLexicialForms      = false ;
+    
     public static boolean strictMode                  = false ;
     
     /** Some people argue that absolute URIs should not be normalized.
@@ -47,7 +50,7 @@ public class SysRIOT
     
     public static void setStrictMode(boolean state) {
         SysRIOT.strictMode = state ;
-        SysRIOT.StrictXSDLexicialForms = state ;
+        //SysRIOT.StrictXSDLexicialForms = state ;
         //SysRIOT.AbsURINoNormalization = state ;
     }
 

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-arq/src/main/java/org/apache/jena/riot/checker/CheckerLiterals.java
----------------------------------------------------------------------
diff --git 
a/jena-arq/src/main/java/org/apache/jena/riot/checker/CheckerLiterals.java 
b/jena-arq/src/main/java/org/apache/jena/riot/checker/CheckerLiterals.java
index 426c310..8fc59b6 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/checker/CheckerLiterals.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/checker/CheckerLiterals.java
@@ -23,19 +23,10 @@ import java.util.regex.Pattern ;
 
 import org.apache.jena.JenaRuntime ;
 import org.apache.jena.datatypes.RDFDatatype ;
-import org.apache.jena.datatypes.xsd.impl.XSDAbstractDateTimeType ;
-import org.apache.jena.datatypes.xsd.impl.XSDBaseNumericType ;
-import org.apache.jena.datatypes.xsd.impl.XSDDouble ;
-import org.apache.jena.datatypes.xsd.impl.XSDFloat ;
 import org.apache.jena.graph.Node ;
-import org.apache.jena.riot.SysRIOT ;
 import org.apache.jena.riot.system.ErrorHandler ;
 import org.apache.jena.sparql.graph.NodeConst ;
-import org.apache.xerces.impl.dv.InvalidDatatypeValueException ;
-import org.apache.xerces.impl.dv.ValidatedInfo ;
-import org.apache.xerces.impl.dv.ValidationContext ;
-import org.apache.xerces.impl.dv.XSSimpleType ;
-import org.apache.xerces.impl.validation.ValidationState ;
+import org.apache.jena.util.SplitIRI;
 
 public class CheckerLiterals implements NodeChecker {
     // A flag to enable the test suite to read bad data.
@@ -105,80 +96,41 @@ public class CheckerLiterals implements NodeChecker {
         }
         return true ;
     }
+    
+    // Whitespace.
+    // XSD allows whitespace before and after the lexical forms of a literal 
but not insiode.
+    // Jena handles this correctly. 
 
     protected static boolean validateByDatatype(String lexicalForm, 
RDFDatatype datatype, ErrorHandler handler, long line, long col) {
-        if ( SysRIOT.StrictXSDLexicialForms ) {
-            if ( datatype instanceof XSDBaseNumericType || datatype instanceof 
XSDFloat
-                 || datatype instanceof XSDDouble )
-                return validateByDatatypeNumeric(lexicalForm, datatype, 
handler, line, col) ;
-            if ( datatype instanceof XSDAbstractDateTimeType )
-                return validateByDatatypeDateTime(lexicalForm, datatype, 
handler, line, col) ;
-        }
+//        if ( SysRIOT.StrictXSDLexicialForms )
+//            checkWhitespace(lexicalForm, datatype, handler, line, col);
         return validateByDatatypeJena(lexicalForm, datatype, handler, line, 
col) ;
     }
 
-    protected static boolean validateByDatatypeJena(String lexicalForm, 
RDFDatatype datatype, ErrorHandler handler,
-                                                    long line, long col) {
+    protected static boolean validateByDatatypeJena(String lexicalForm, 
RDFDatatype datatype, ErrorHandler handler, long line, long col) {
         if ( datatype.isValid(lexicalForm) )
             return true ;
-        handler.warning("Lexical form '" + lexicalForm + "' not valid for 
datatype " + datatype.getURI(), line, col) ;
+        handler.warning("Lexical form '" + lexicalForm + "' not valid for 
datatype " + xsdDatatypeName(datatype), line, col) ;
         return false ;
     }
 
-    protected static boolean validateByDatatypeDateTime(String lexicalForm, 
RDFDatatype datatype, ErrorHandler handler, long line, long col) {
+    protected static boolean checkWhitespace(String lexicalForm, RDFDatatype 
datatype, ErrorHandler handler, long line, long col) {
         if ( lexicalForm.contains(" ") ) {
-            handler.warning("Whitespace in XSD date or time literal: '" + 
lexicalForm + "'", line, col) ;
+            handler.warning("Whitespace in "+xsdDatatypeName(datatype)+" 
literal: '" + lexicalForm + "'", line, col) ;
             return false ;
         }
         if ( lexicalForm.contains("\n") ) {
-            handler.warning("Newline in XSD date or time literal: '" + 
lexicalForm + "'", line, col) ;
+            handler.warning("Newline in "+xsdDatatypeName(datatype)+" literal: 
'" + lexicalForm + "'", line, col) ;
             return false ;
         }
         if ( lexicalForm.contains("\r") ) {
-            handler.warning("Newline in XSD date or time literal: '" + 
lexicalForm + "'", line, col) ;
+            handler.warning("Newline in "+xsdDatatypeName(datatype)+" literal: 
'" + lexicalForm + "'", line, col) ;
             return false ;
         }
-        // if ( ! StrictXSDLexicialForms )
-        // Jena is already strict.
-        return validateByDatatypeJena(lexicalForm, datatype, handler, line, 
col) ;
+        return true ;
     }
-
-    protected static boolean validateByDatatypeNumeric(String lexicalForm, 
RDFDatatype datatype, ErrorHandler handler, long line, long col) {
-        // Do a white space check as well for numerics.
-        if ( lexicalForm.contains(" ") ) {
-            handler.warning("Whitespace in numeric XSD literal: '" + 
lexicalForm + "'", line, col) ;
-            return false ;
-        }
-        if ( lexicalForm.contains("\n") ) {
-            handler.warning("Newline in numeric XSD literal: '" + lexicalForm 
+ "'", line, col) ;
-            return false ;
-        }
-        if ( lexicalForm.contains("\r") ) {
-            handler.warning("Carriage return in numeric XSD literal: '" + 
lexicalForm + "'", line, col) ;
-            return false ;
-        }
-        
-//        if ( lit.getDatatype() instanceof XSDAbstractDateTimeType )
-//        {
-//            // Do a white space check as well for numerics.
-//            if ( lex.contains(" ") )  { handler.warning("Whitespace in XSD 
date or time literal: "+node, line, col) ; return false ; } 
-//            if ( lex.contains("\n") ) { handler.warning("Newline in XSD date 
or time literal: "+node, line, col) ; return false ; }
-//            if ( lex.contains("\r") ) { handler.warning("Newline in XSD date 
or time literal: "+node, line, col) ; return false ; }
-//        }
-//
-        if ( ! SysRIOT.StrictXSDLexicialForms )
-            return validateByDatatypeJena(lexicalForm, datatype, handler, 
line, col) ;
-        
-        // From Jena 2.6.3, XSDDatatype.parse
-        XSSimpleType typeDeclaration = 
(XSSimpleType)datatype.extendedTypeDefinition() ;
-        try {
-            ValidationContext context = new ValidationState();
-            ValidatedInfo resultInfo = new ValidatedInfo();
-            Object result = typeDeclaration.validate(lexicalForm, context, 
resultInfo);
-            return true ;
-        } catch (InvalidDatatypeValueException e) {
-            handler.warning("Lexical form '"+lexicalForm+"' not valid for 
datatype "+datatype.getURI(), line, col) ;
-            return false ;
-        }
+    
+    private static String xsdDatatypeName(RDFDatatype datatype) {
+        return "XSD "+SplitIRI.localname(datatype.getURI());
     }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDbase64Binary.java
----------------------------------------------------------------------
diff --git 
a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDbase64Binary.java 
b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDbase64Binary.java
index 19bb5e8..78a1541 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDbase64Binary.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDbase64Binary.java
@@ -18,8 +18,9 @@
 
 package org.apache.jena.datatypes.xsd;
 
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.jena.datatypes.DatatypeFormatException ;
-import org.apache.xerces.impl.dv.util.Base64 ;
 
 /**
  * Implement base64binary type. Most of the work is done in the superclass.
@@ -38,7 +39,7 @@ public class XSDbase64Binary extends XSDbinary {
     @Override
     public String unparse(Object value) {
         if (value instanceof byte[]) {
-            return Base64.encode((byte[])value);
+            return DatatypeConverter.printBase64Binary((byte[])value);
         } else {
             throw new DatatypeFormatException("base64 asked to encode an 
unwrapped byte array");
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDhexBinary.java
----------------------------------------------------------------------
diff --git 
a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDhexBinary.java 
b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDhexBinary.java
index e289ec9..7ca7781 100644
--- a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDhexBinary.java
+++ b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/XSDhexBinary.java
@@ -18,8 +18,9 @@
 
 package org.apache.jena.datatypes.xsd;
 
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.jena.datatypes.DatatypeFormatException ;
-import org.apache.xerces.impl.dv.util.HexBin ;
 
 /**
  * Implement hexbinary type. Most of the work is done in the superclass.
@@ -38,7 +39,7 @@ public class XSDhexBinary extends XSDbinary {
     @Override
     public String unparse(Object value) {
         if (value instanceof byte[]) {
-            return HexBin.encode((byte[])value);
+            return DatatypeConverter.printHexBinary((byte[])value);
         } else {
             throw new DatatypeFormatException("hexBinary asked to encode a 
non-byte arrary");
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XSDBaseNumericType.java
----------------------------------------------------------------------
diff --git 
a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XSDBaseNumericType.java
 
b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XSDBaseNumericType.java
index abbab9d..22ba236 100644
--- 
a/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XSDBaseNumericType.java
+++ 
b/jena-core/src/main/java/org/apache/jena/datatypes/xsd/impl/XSDBaseNumericType.java
@@ -57,7 +57,7 @@ public class XSDBaseNumericType extends XSDDatatype {
     
     /**
      * Test whether the given LiteralLabel is a valid instance
-     * of this datatype. This takes into accound typing information
+     * of this datatype. This takes into account typing information
      * as well as lexical form - for example an xsd:string is
      * never considered valid as an xsd:integer (even if it is
      * lexically legal like "1").

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/MakeSkolem.java
----------------------------------------------------------------------
diff --git 
a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/MakeSkolem.java
 
b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/MakeSkolem.java
index b5aedb9..01491d5 100644
--- 
a/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/MakeSkolem.java
+++ 
b/jena-core/src/main/java/org/apache/jena/reasoner/rulesys/builtins/MakeSkolem.java
@@ -21,11 +21,12 @@ package org.apache.jena.reasoner.rulesys.builtins;
 import java.security.MessageDigest ;
 import java.security.NoSuchAlgorithmException ;
 
+import javax.xml.bind.DatatypeConverter;
+
 import org.apache.jena.graph.Node ;
 import org.apache.jena.graph.NodeFactory ;
 import org.apache.jena.reasoner.rulesys.RuleContext ;
 import org.apache.jena.shared.JenaException ;
-import org.apache.xerces.impl.dv.util.Base64 ;
 
 /**
  * Bind a blank node to the first argument.
@@ -75,9 +76,9 @@ public class MakeSkolem extends BaseBuiltin {
             MessageDigest digester = MessageDigest.getInstance("MD5");
             digester.reset();
             byte[] digest = digester.digest(key.toString().getBytes());
-            Node skolem = NodeFactory.createBlankNode(Base64.encode(digest));
+            String label = DatatypeConverter.printBase64Binary(digest);
+            Node skolem = NodeFactory.createBlankNode(label);
             return context.getEnv().bind(args[0], skolem); 
-            
         } catch (NoSuchAlgorithmException e) {
             throw new JenaException(e);
         }

http://git-wip-us.apache.org/repos/asf/jena/blob/3c89e23b/jena-core/src/test/java/org/apache/jena/graph/test/TestTypedLiterals.java
----------------------------------------------------------------------
diff --git 
a/jena-core/src/test/java/org/apache/jena/graph/test/TestTypedLiterals.java 
b/jena-core/src/test/java/org/apache/jena/graph/test/TestTypedLiterals.java
index 7f5b674..11c137c 100644
--- a/jena-core/src/test/java/org/apache/jena/graph/test/TestTypedLiterals.java
+++ b/jena-core/src/test/java/org/apache/jena/graph/test/TestTypedLiterals.java
@@ -25,6 +25,8 @@ import java.math.BigInteger ;
 import java.text.SimpleDateFormat ;
 import java.util.* ;
 
+import javax.xml.bind.DatatypeConverter;
+
 import junit.framework.TestCase ;
 import junit.framework.TestSuite ;
 import org.apache.jena.JenaRuntime ;
@@ -43,7 +45,6 @@ import org.apache.jena.rdf.model.* ;
 import org.apache.jena.shared.impl.JenaParameters ;
 import org.apache.jena.vocabulary.RDF ;
 import org.apache.jena.vocabulary.XSD ;
-import org.apache.xerces.impl.dv.util.HexBin ;
 import org.junit.Assert ;
    
 /**
@@ -960,7 +961,7 @@ public class TestTypedLiterals extends TestCase {
         Literal l = m.createTypedLiteral(data, XSDDatatype.XSDhexBinary);
         LiteralLabel ll = l.asNode().getLiteral();
         assertEquals("binary test 1b", ll.getDatatype(), 
XSDDatatype.XSDhexBinary);
-        assertEquals("binary test 2b", HexBin.encode(data), 
ll.getLexicalForm());
+        assertEquals("binary test 2b", DatatypeConverter.printHexBinary(data), 
ll.getLexicalForm());
         
         // Check round tripping from value
         LiteralLabel l2 = m.createTypedLiteral(ll.getLexicalForm(), 
XSDDatatype.XSDhexBinary).asNode().getLiteral();

Reply via email to