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 2014/08/09 17:31:14 UTC

svn commit: r1616969 - in /jena/trunk/jena-arq/src: main/java/com/hp/hpl/jena/sparql/resultset/ main/java/org/apache/jena/riot/ main/java/org/apache/jena/riot/resultset/ test/java/org/apache/jena/riot/ test/java/org/apache/jena/riot/resultset/

Author: andy
Date: Sat Aug  9 15:31:14 2014
New Revision: 1616969

URL: http://svn.apache.org/r1616969
Log:
JENA-762 : InputStreams and OutputStreams.

Added:
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java
      - copied, changed from r1616868, jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetMgr.java
Removed:
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetMgr.java
Modified:
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInput.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputSAX.java
    jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputStAX.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetReaderRegistry.java
    jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetWriterRegistry.java
    jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/TestSyntaxDetermination.java
    jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/resultset/TestResultSetIO.java

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInput.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInput.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInput.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInput.java Sat Aug  9 15:31:14 2014
@@ -19,6 +19,7 @@
 package com.hp.hpl.jena.sparql.resultset;
 
 import java.io.InputStream ;
+import java.io.Reader ;
 
 import com.hp.hpl.jena.query.ResultSet ;
 import com.hp.hpl.jena.rdf.model.Model ;
@@ -38,6 +39,17 @@ public class XMLInput
         return make(in, model).getResultSet() ;
     }
     
+    public static ResultSet fromXML(Reader in) 
+    {
+        return fromXML(in, null) ;
+    }
+    
+    public static ResultSet fromXML(Reader in, Model model) 
+    {
+        return make(in, model).getResultSet() ;
+    }
+    
+
     public static ResultSet fromXML(String str) 
     {
         return fromXML(str, null) ;
@@ -68,6 +80,16 @@ public class XMLInput
             return new XMLInputSAX(in, model) ;
         return new XMLInputStAX(in, model) ;
     }
+    
+    public static SPARQLResult make(Reader in) { return make(in, null) ; }
+    
+    public static SPARQLResult make(Reader in, Model model)
+    {
+        if ( SystemARQ.UseSAX )
+            return new XMLInputSAX(in, model) ;
+        return new XMLInputStAX(in, model) ;
+    }
+
 
     public static SPARQLResult make(String str) { return make(str, null) ; }
     

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputSAX.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputSAX.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputSAX.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputSAX.java Sat Aug  9 15:31:14 2014
@@ -20,6 +20,7 @@ package com.hp.hpl.jena.sparql.resultset
 
 import java.io.IOException ;
 import java.io.InputStream ;
+import java.io.Reader ;
 import java.util.ArrayList ;
 import java.util.List ;
 
@@ -56,6 +57,10 @@ class XMLInputSAX extends SPARQLResult {
         worker(new InputSource(in), model) ;
     }
 
+    public XMLInputSAX(Reader in, Model model) {
+        worker(new InputSource(in), model) ;
+    }
+
     public XMLInputSAX(String str, Model model) {
         worker(new InputSource(str), model) ;
     }

Modified: jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputStAX.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputStAX.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputStAX.java (original)
+++ jena/trunk/jena-arq/src/main/java/com/hp/hpl/jena/sparql/resultset/XMLInputStAX.java Sat Aug  9 15:31:14 2014
@@ -111,6 +111,18 @@ class XMLInputStAX extends SPARQLResult 
         }
     }
 
+    public XMLInputStAX(Reader in, Model model) {
+        XMLInputFactory xf = XMLInputFactory.newInstance() ;
+        try {
+            XMLStreamReader xReader = xf.createXMLStreamReader(in) ;
+            worker(xReader, model) ;
+        } catch (XMLStreamException e) {
+            throw new ResultSetException("Can't initialize StAX parsing engine", e) ;
+        } catch (Exception ex) {
+            throw new ResultSetException("Failed when initializing the StAX parsing engine", ex) ;
+        }
+    }
+
     public XMLInputStAX(String str) {
         this(str, null) ;
     }

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/RDFDataMgr.java Sat Aug  9 15:31:14 2014
@@ -849,7 +849,7 @@ public class RDFDataMgr
     
     private static void process(StreamRDF destination, TypedInputStream in, String baseUri, Lang hintLang, Context context)
     {
-        ContentType ct = determineCT(baseUri, in.getContentType(), hintLang) ;
+        ContentType ct = WebContent.determineCT(baseUri, in.getContentType(), hintLang) ;
         if ( ct == null )
             throw new RiotException("Failed to determine the content type: (URI="+baseUri+" : stream="+in.getContentType()+" : hint="+hintLang+")") ;
 
@@ -863,7 +863,7 @@ public class RDFDataMgr
     private static void process(StreamRDF destination, Reader in, String baseUri, Lang lang, Context context )
     {
         // Not as good as from an InputStream 
-        ContentType ct = determineCT(baseUri, null, lang) ;
+        ContentType ct = WebContent.determineCT(baseUri, null, lang) ;
         if ( ct == null )
             throw new RiotException("Failed to determine the content type: (URI="+baseUri+" : hint="+lang+")") ;
         ReaderRIOT reader = getReader(ct) ;
@@ -899,7 +899,7 @@ public class RDFDataMgr
 
     /** Determine the Lang, given the URI target, any content type header string and a hint */ 
     public static Lang determineLang(String target, String ctStr, Lang hintLang) {
-        ContentType ct = determineCT(target, ctStr, hintLang) ;
+        ContentType ct = WebContent.determineCT(target, ctStr, hintLang) ;
         if ( ct == null )
             return hintLang ;
         Lang lang = RDFLanguages.contentTypeToLang(ct) ;
@@ -908,38 +908,6 @@ public class RDFDataMgr
         return lang ;
     }
     
-    /** Determine the content type to be used, given the target URL, the content-type from
-     *  Content Negotiation and a hint language.  This is a pragmatic balance.
-     *  A content-type of "text/plain" is ignored - it is too often wrong.  
-     */
-    /*package*/ static ContentType determineCT(String target, String ctStr, Lang hintLang)
-    {
-        boolean isTextPlain = WebContent.contentTypeTextPlain.equals(ctStr) ;
-
-        if ( ctStr != null  )
-            ctStr = WebContent.contentTypeCanonical(ctStr) ;
-
-        // The decision is:
-        // Content type (but not text/plain) > hint > file extension.
-
-        // If it's text plain, we ignore it because a lot of naive
-        // server setups return text/plain for any file type.
-        // (It was never registered as being N-triples; 
-        // that was only for RDF 2004 testing.)
-        ContentType ct = null ;
-        if ( ! isTextPlain )
-            // Not guaranteed to be registered as a language here.
-            ct = (ctStr==null) ? null : ContentType.create(ctStr) ;
-        
-        if ( ct == null && hintLang != null ) 
-            ct = hintLang.getContentType() ;
-        
-        if ( ct == null )
-            ct = RDFLanguages.guessContentType(target) ;
-        
-        return ct ;
-    }
-
     // -------- WRITERS
     
     /** Write the model to the output stream in the default serialization for the language.

Copied: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java (from r1616868, jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetMgr.java)
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java?p2=jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java&p1=jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetMgr.java&r1=1616868&r2=1616969&rev=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetMgr.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/ResultSetMgr.java Sat Aug  9 15:31:14 2014
@@ -16,34 +16,31 @@
  * limitations under the License.
  */
 
-package org.apache.jena.riot.resultset;
+package org.apache.jena.riot;
 
-import java.io.InputStream ;
-import java.io.OutputStream ;
+import java.io.* ;
 
+import org.apache.jena.atlas.web.ContentType ;
 import org.apache.jena.atlas.web.TypedInputStream ;
-import org.apache.jena.riot.Lang ;
-import org.apache.jena.riot.RDFDataMgr ;
-import org.apache.jena.riot.RDFLanguages ;
-import org.apache.jena.riot.RiotException ;
+import org.apache.jena.riot.resultset.* ;
 
 import com.hp.hpl.jena.query.ARQ ;
 import com.hp.hpl.jena.query.ResultSet ;
 import com.hp.hpl.jena.query.ResultSetFactory ;
+import com.hp.hpl.jena.query.ResultSetFormatter ;
 import com.hp.hpl.jena.sparql.util.Context ;
 
 /** 
- * Reading and writing of Result Sets 
+ * Reading and writing of Result Sets.
+ * {@linkplain ResultSetFormatter} provides output to text.
+ * @see ResultSetFactory
+ * @see ResultSetFormatter 
  */
 public class ResultSetMgr {
     static { 
-        
-        ResultSetReaderRegistry.init() ;
-        ResultSetWriterRegistry.init() ;
+        ResultSetLang.init() ;
     }
     
-    // Register with RDFLanguages.
-    
     /**
      * Read from an {@code InputStream} and produce a {@linkplain ResultSet};
      * the stream is expect to use syntax {@code lang}.  Note that returned
@@ -56,21 +53,63 @@ public class ResultSetMgr {
      * @return ResultSet
      */
     public static ResultSet read(InputStream in, Lang lang) {
-        ResultSetReaderFactory f = ResultSetReaderRegistry.lookup(lang) ;
-        if ( f == null )
-            throw new RiotException("No result set reader for "+lang) ;
-        ResultSetReader rsr = f.create(lang) ;
-        return rsr.read(in, ARQ.getContext()) ;
+        return process(new TypedInputStream(in), null, lang, null) ;
     }
     
+    /** Read a result set from the URI */
     public static ResultSet read(String uri) {
         return read(uri, null) ;
     }
     
+    /** Read a result set from the URI, in the speficied syntax */ 
     public static ResultSet read(String uri, Lang lang) {
         return parse(uri, lang, null) ;
     }
 
+    /**
+     * Read from an {@code Reader} and produce a {@linkplain ResultSet};
+     * the stream is expect to use syntax {@code lang}.  
+     * Using InputStreams is better to ensure the character set
+     * of the input matches that of the syntax.  
+     * Note that returned
+     * result set may stream and so the input stream be read while the ResultSet is used.
+     * See {@linkplain ResultSetFactory#copyResults(ResultSet)}
+     * for a ResultSet that is detached from the {@code InputStream}.
+     * 
+     * @param in
+     * @param lang
+     * @return ResultSet
+     */
+    @Deprecated
+    public static ResultSet read(Reader in, Lang lang) {
+        ResultSetReaderFactory f = ResultSetReaderRegistry.getFactory(lang) ;
+        if ( f == null )
+            throw new RiotException("No result set reader for "+lang) ;
+        ResultSetReader rsr = f.create(lang) ;
+        return rsr.read(in, ARQ.getContext()) ;
+    }
+    
+    
+    /**
+     * Read from an {@code StringReader} and produce a {@linkplain ResultSet};
+     * the stream is expect to use syntax {@code lang}.  
+     * Note that returned
+     * result set may stream and so the input stream be read while the ResultSet is used.
+     * See {@linkplain ResultSetFactory#copyResults(ResultSet)}
+     * for a ResultSet that is detached from the {@code InputStream}.
+     * 
+     * @param in
+     * @param lang
+     * @return ResultSet
+     */
+    public static ResultSet read(StringReader in, Lang lang) {
+        ResultSetReaderFactory f = ResultSetReaderRegistry.getFactory(lang) ;
+        if ( f == null )
+            throw new RiotException("No result set reader for "+lang) ;
+        ResultSetReader rsr = f.create(lang) ;
+        return rsr.read(in, ARQ.getContext()) ;
+    }
+    
     /** Read ResultSet.
      * @param uri       URI to read from (includes file: and a plain file name).
      * @param hintLang  Hint for the syntax
@@ -78,6 +117,7 @@ public class ResultSetMgr {
      */
     public static ResultSet parse(String uri, Lang hintLang, Context context)
     {
+        // Conneg
         if ( uri == null )
             throw new IllegalArgumentException("URI to read from is null") ;
         if ( hintLang == null )
@@ -85,24 +125,70 @@ public class ResultSetMgr {
         TypedInputStream in = RDFDataMgr.open(uri, context) ;
         if ( in == null )
             throw new RiotException("Not found: "+uri) ;
-        //ct -> lang
-        return process(in, hintLang) ;
+        return process(in, uri, hintLang, context) ;
+    }
+        
+    private static ResultSet process(TypedInputStream in, String srcURI, Lang hintLang, Context context) {
+        ContentType ct = WebContent.determineCT(srcURI, in.getContentType(), hintLang) ;
+        if ( ct == null )
+            throw new RiotException("Failed to determine the content type: (URI="+srcURI+" : stream="+in.getContentType()+" : hint="+hintLang+")") ;
+        ResultSetReader reader = getReader(ct) ;
+        if ( reader == null )
+            throw new RiotException("No parser registered for content type: "+ct.getContentType()) ;
+        return reader.read(in, context) ;
+    }
+    
+    private static ResultSetReader getReader(ContentType ct)
+    {
+        Lang lang = RDFLanguages.contentTypeToLang(ct) ;
+        if ( lang == null )
+            return null ;
+        ResultSetReaderFactory r = ResultSetReaderRegistry.getFactory(lang) ;
+        if ( r == null )
+            return null ;
+        return r.create(lang) ;
     }
-    // Read from URL.
+    
+    // -------------------------------
 
-    private static ResultSet process(InputStream in, Lang lang) {
-        ResultSetReaderFactory f = ResultSetReaderRegistry.lookup(lang) ;
+    /** Write a SPARQL result set to the output stream in the speciifcied language/syntax.
+     * @param out
+     * @param resultSet
+     * @param lang
+     */
+    public static void write(OutputStream out, ResultSet resultSet, Lang lang) { 
+        ResultSetWriterFactory f = ResultSetWriterRegistry.lookup(lang) ;
         if ( f == null )
-            throw new RiotException("No result set reader for "+lang) ;
-        ResultSetReader rsr = f.create(lang) ;
-        return rsr.read(in, ARQ.getContext()) ;
+            throw new RiotException("No resultSet writer for "+lang) ;
+        f.create(lang).write(out, resultSet, null) ;
     }
- 
-    // ----
     
-    public static void write(OutputStream out, ResultSet resultSet, Lang lang) { 
+    /** Write a SPARQL result set to the {@link java.io.Writer} in the speciifcied language/syntax.
+     * Using {@link OutputStream}s is better because the charcater encoding will match the
+     * requirements of the language.   
+     * @param out
+     * @param resultSet
+     * @param lang
+     */
+    @Deprecated
+    public static void write(Writer out, ResultSet resultSet, Lang lang) { 
         ResultSetWriterFactory f = ResultSetWriterRegistry.lookup(lang) ;
+        if ( f == null )
+            throw new RiotException("No resultSet writer for "+lang) ;
         f.create(lang).write(out, resultSet, null) ;
     }
+
+    /** Write a SPARQL result set to the {@link java.io.Writer} in the speciifcied language/syntax.
+     * @param out
+     * @param resultSet
+     * @param lang
+     */
+    public static void write(StringWriter out, ResultSet resultSet, Lang lang) { 
+        ResultSetWriterFactory f = ResultSetWriterRegistry.lookup(lang) ;
+        if ( f == null )
+            throw new RiotException("No resultSet writer for "+lang) ;
+        f.create(lang).write(out, resultSet, null) ;
+    }
+
 }
 

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/WebContent.java Sat Aug  9 15:31:14 2014
@@ -206,4 +206,35 @@ public class WebContent
     public static boolean isMultiPartForm(ContentType ct) {
         return contentTypeMultipartFormData.equalsIgnoreCase(ct.getContentType()) ;
     }
+
+    /** Determine the content type to be used, given the target URL, the content-type from
+     *  Content Negotiation and a hint language.  This is a pragmatic balance.
+     *  A content-type of "text/plain" is ignored - it is too often wrong.  
+     */
+    public static ContentType determineCT(String target, String ctStr, Lang hintLang) {
+        boolean isTextPlain = contentTypeTextPlain.equals(ctStr) ;
+    
+        if ( ctStr != null  )
+            ctStr = contentTypeCanonical(ctStr) ;
+    
+        // The decision is:
+        // Content type (but not text/plain) > hint > file extension.
+    
+        // If it's text plain, we ignore it because a lot of naive
+        // server setups return text/plain for any file type.
+        // (It was never registered as being N-triples; 
+        // that was only for RDF 2004 testing.)
+        ContentType ct = null ;
+        if ( ! isTextPlain )
+            // Not guaranteed to be registered as a language here.
+            ct = (ctStr==null) ? null : ContentType.create(ctStr) ;
+        
+        if ( ct == null && hintLang != null ) 
+            ct = hintLang.getContentType() ;
+        
+        if ( ct == null )
+            ct = RDFLanguages.guessContentType(target) ;
+        
+        return ct ;
+    }
 }

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetLang.java Sat Aug  9 15:31:14 2014
@@ -57,11 +57,17 @@ public class ResultSetLang {
                      .addFileExtensions("txt")
                      .build() ;
 
+    private static boolean initialized = false ;
     public static void init() {
+        if ( initialized )
+            return ;
+        initialized = true ;
         RDFLanguages.register(SPARQLResultSetXML) ;
         RDFLanguages.register(SPARQLResultSetJSON) ;
         RDFLanguages.register(SPARQLResultSetCSV) ;
         RDFLanguages.register(SPARQLResultSetTSV) ;
         RDFLanguages.register(SPARQLResultSetThrift) ;
+        ResultSetReaderRegistry.init();
+        ResultSetWriterRegistry.init();
     }    
 }

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetReaderRegistry.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetReaderRegistry.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetReaderRegistry.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetReaderRegistry.java Sat Aug  9 15:31:14 2014
@@ -30,20 +30,21 @@ import java.util.HashMap ;
 import java.util.Map ;
 import java.util.Objects ;
 
+import org.apache.jena.atlas.lib.NotImplemented ;
 import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.RiotException ;
 
 import com.hp.hpl.jena.query.ResultSet ;
-import com.hp.hpl.jena.query.ResultSetFactory ;
 import com.hp.hpl.jena.sparql.resultset.CSVInput ;
 import com.hp.hpl.jena.sparql.resultset.JSONInput ;
+import com.hp.hpl.jena.sparql.resultset.TSVInput ;
 import com.hp.hpl.jena.sparql.resultset.XMLInput ;
 import com.hp.hpl.jena.sparql.util.Context ;
 
 public class ResultSetReaderRegistry {
     
     /** Lookup a {@linkplain Lang} to get the registered {@linkplain ResultSetReaderFactory} (or null) */
-    public static ResultSetReaderFactory lookup(Lang lang) {
+    public static ResultSetReaderFactory getFactory(Lang lang) {
         Objects.requireNonNull(lang) ;
         return registry.get(lang) ;
     }
@@ -56,9 +57,13 @@ public class ResultSetReaderRegistry {
     }
 
     private static Map<Lang, ResultSetReaderFactory> registry = new HashMap<>() ;
-    static { init(); }
     
-    /*package*/ static void init() {
+    private static boolean initialized = false ;
+    public static void init() {
+        if ( initialized )
+            return ;
+        initialized = true ;
+
         ResultSetReaderFactory factory = new ResultSetReaderFactoryStd() ;
         register(SPARQLResultSetXML, factory) ;
         register(SPARQLResultSetJSON, factory) ;
@@ -67,7 +72,7 @@ public class ResultSetReaderRegistry {
         register(SPARQLResultSetThrift, factory) ;
     }
     
-    static { init(); }
+    static { ResultSetLang.init(); }
 
     private static class ResultSetReaderFactoryStd implements ResultSetReaderFactory {
         @Override
@@ -83,22 +88,22 @@ public class ResultSetReaderRegistry {
     
     private static ResultSetReader readerXML = new ResultSetReader() {
         @Override public ResultSet read(InputStream in, Context context)    { return XMLInput.fromXML(in); }
-        @Override public ResultSet read(Reader in, Context context)         { return null ; } 
+        @Override public ResultSet read(Reader in, Context context)         { return XMLInput.fromXML(in); }
     } ;
 
     private static ResultSetReader readerJSON = new ResultSetReader() {
         @Override public ResultSet read(InputStream in, Context context)    { return JSONInput.fromJSON(in) ; }
-        @Override public ResultSet read(Reader in, Context context)         { return null ; }
+        @Override public ResultSet read(Reader in, Context context)         { throw new NotImplemented("Reader") ; } 
     } ;
 
     private static ResultSetReader readerCSV = new ResultSetReader() {
         @Override public ResultSet read(InputStream in, Context context)    { return CSVInput.fromCSV(in) ; }
-        @Override public ResultSet read(Reader in, Context context)         { return null ; }
+        @Override public ResultSet read(Reader in, Context context)         { throw new NotImplemented("Reader") ; } 
     } ;
     
     private static ResultSetReader readerTSV = new ResultSetReader() {
-        @Override public ResultSet read(InputStream in, Context context)    { return ResultSetFactory.fromTSV(in) ; }
-        @Override public ResultSet read(Reader in, Context context)         { return null ; }
+        @Override public ResultSet read(InputStream in, Context context)    { return TSVInput.fromTSV(in); }
+        @Override public ResultSet read(Reader in, Context context)         { throw new NotImplemented("Reader") ; } 
     } ;
 
     private static ResultSetReader readerNo = new ResultSetReader() {

Modified: jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetWriterRegistry.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetWriterRegistry.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetWriterRegistry.java (original)
+++ jena/trunk/jena-arq/src/main/java/org/apache/jena/riot/resultset/ResultSetWriterRegistry.java Sat Aug  9 15:31:14 2014
@@ -31,6 +31,7 @@ import java.util.HashMap ;
 import java.util.Map ;
 import java.util.Objects ;
 
+import org.apache.jena.atlas.lib.NotImplemented ;
 import org.apache.jena.riot.Lang ;
 import org.apache.jena.riot.RiotException ;
 
@@ -57,9 +58,12 @@ public class ResultSetWriterRegistry {
         registry.put(lang, factory) ;
     }
     
-    static { init(); }
-    
-    /*package*/ static void init() {
+    private static boolean initialized = false ;
+    public static void init() {
+        if ( initialized )
+            return ;
+        initialized = true ;
+
 //        RDFLanguages.register(SPARQLResultSetXML) ;
 //        RDFLanguages.register(SPARQLResultSetJSON) ;
 //        RDFLanguages.register(SPARQLResultSetCSV) ;
@@ -75,13 +79,14 @@ public class ResultSetWriterRegistry {
         register(SPARQLResultSetText, factory) ;
     }
  
+    static { ResultSetLang.init(); }
     
     private static ResultSetWriter writerXML = new ResultSetWriter() {
         @Override public void write(OutputStream out, ResultSet resultSet, Context context) { 
             XMLOutput xOut = new XMLOutput(null) ;
             xOut.format(out, resultSet) ;
         }
-        @Override public void write(Writer out, ResultSet resultSet, Context context)       {}
+        @Override public void write(Writer out, ResultSet resultSet, Context context) {throw new NotImplemented("Writer") ; } 
     } ;
 
     private static ResultSetWriter writerJSON = new ResultSetWriter() {
@@ -89,7 +94,7 @@ public class ResultSetWriterRegistry {
             JSONOutput jOut = new JSONOutput() ;
             jOut.format(out, resultSet) ; 
         }
-        @Override public void write(Writer out, ResultSet resultSet, Context context)       {}
+        @Override public void write(Writer out, ResultSet resultSet, Context context) {throw new NotImplemented("Writer") ; } 
     } ;
     
     private static ResultSetWriter writerCSV = new ResultSetWriter() {
@@ -97,7 +102,7 @@ public class ResultSetWriterRegistry {
             CSVOutput fmt = new CSVOutput() ;
             fmt.format(out, resultSet) ;
         }
-        @Override public void write(Writer out, ResultSet resultSet, Context context)       {}
+        @Override public void write(Writer out, ResultSet resultSet, Context context) {throw new NotImplemented("Writer") ; } 
     } ;
 
     private static ResultSetWriter writerTSV = new ResultSetWriter() {
@@ -105,7 +110,7 @@ public class ResultSetWriterRegistry {
             TSVOutput fmt = new TSVOutput() ;
             fmt.format(out, resultSet) ;
         }
-        @Override public void write(Writer out, ResultSet resultSet, Context context)       {}
+        @Override public void write(Writer out, ResultSet resultSet, Context context) {throw new NotImplemented("Writer") ; } 
     } ;
 
     private static ResultSetWriter writerNo = new ResultSetWriter() {
@@ -119,7 +124,7 @@ public class ResultSetWriterRegistry {
             TextOutput tFmt = new TextOutput(new SerializationContext((Prologue)null)) ;
             tFmt.format(out, resultSet) ; 
         }
-        @Override public void write(Writer out, ResultSet resultSet, Context context)       {}
+        @Override public void write(Writer out, ResultSet resultSet, Context context) {throw new NotImplemented("Writer") ; } 
     } ;
     
     private static class ResultSetWriterFactoryStd implements ResultSetWriterFactory {
@@ -133,7 +138,6 @@ public class ResultSetWriterRegistry {
             if ( lang.equals(SPARQLResultSetText) )     return writerText ;
             throw new RiotException("Lang not registered (ResultSet writer)") ;
         }
-        
     }
 }
 

Modified: jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/TestSyntaxDetermination.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/TestSyntaxDetermination.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/TestSyntaxDetermination.java (original)
+++ jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/TestSyntaxDetermination.java Sat Aug  9 15:31:14 2014
@@ -92,7 +92,7 @@ public class TestSyntaxDetermination ext
     { test(url, contentType, hintLang, expected) ; }
     
     static void test(String url, String ct, Lang hint, Lang expected) {
-        ContentType x = RDFDataMgr.determineCT(url, ct, hint) ;
+        ContentType x = WebContent.determineCT(url, ct, hint) ;
         Lang lang = RDFDataMgr.determineLang(url, ct, hint) ;
         assertEquals(expected, lang) ;
     }

Modified: jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/resultset/TestResultSetIO.java
URL: http://svn.apache.org/viewvc/jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/resultset/TestResultSetIO.java?rev=1616969&r1=1616968&r2=1616969&view=diff
==============================================================================
--- jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/resultset/TestResultSetIO.java (original)
+++ jena/trunk/jena-arq/src/test/java/org/apache/jena/riot/resultset/TestResultSetIO.java Sat Aug  9 15:31:14 2014
@@ -18,14 +18,21 @@
 
 package org.apache.jena.riot.resultset;
 
+import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetCSV ;
+import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetJSON ;
+import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetTSV ;
+import static org.apache.jena.riot.resultset.ResultSetLang.SPARQLResultSetXML ;
+
 import java.io.ByteArrayInputStream ;
 import java.io.ByteArrayOutputStream ;
 import java.util.ArrayList ;
 import java.util.Collection ;
 import java.util.List ;
 
+import org.apache.jena.atlas.junit.BaseTest ;
 import org.apache.jena.atlas.lib.StrUtils ;
 import org.apache.jena.riot.Lang ;
+import org.apache.jena.riot.ResultSetMgr ;
 import org.junit.Before ;
 import org.junit.Test ;
 import org.junit.runner.RunWith ;
@@ -40,13 +47,13 @@ import com.hp.hpl.jena.sparql.sse.SSE ;
 import com.hp.hpl.jena.sparql.sse.builders.BuilderResultSet ;
 
 @RunWith(Parameterized.class)
-public class TestResultSetIO {
-    @Parameters(name = "{index}: {0}") public static Collection<Object[]> data()
-    { 
-        Lang[] langs = { ResultSetLang.SPARQLResultSetXML
-                       , ResultSetLang.SPARQLResultSetJSON
-                       , ResultSetLang.SPARQLResultSetCSV
-                       , ResultSetLang.SPARQLResultSetTSV
+public class TestResultSetIO extends BaseTest {
+    @Parameters(name = "{index}: {0}") 
+    public static Collection<Object[]> data() { 
+        Lang[] langs = { SPARQLResultSetXML
+                       , SPARQLResultSetJSON
+                       , SPARQLResultSetCSV
+                       , SPARQLResultSetTSV
         } ;
         
         List<Object[]> x = new ArrayList<>() ;
@@ -61,8 +68,8 @@ public class TestResultSetIO {
         ,"   (row (?x _:b0) (?y _:b1))"
         ,"   (row (?x _:b2) (?y _:b3))"
         ,"   (row (?x _:b1) (?y _:b0))"
-        ,"   (row (?x 1) )"
-        ,"   (row (?y 2) )"
+        ,"   (row (?x 1)           )"
+        ,"   (row           (?y 2) )"
         ,"   (row )"
         ,")"
         ) ;
@@ -77,19 +84,54 @@ public class TestResultSetIO {
     }
     
     @Test public void test_resultset_01() {
+        // write(data)-read-compare
         ByteArrayOutputStream out = new ByteArrayOutputStream() ;
         ResultSetMgr.write(out, test_rs, lang) ;
         test_rs.reset(); 
         ByteArrayInputStream in = new ByteArrayInputStream(out.toByteArray()) ;
-        ResultSet rs = ResultSetMgr.read(in, lang) ;
-        ResultSetCompare.equalsByTerm(test_rs, rs) ;
         
-        out.reset();  
-        ResultSetMgr.write(out, rs, lang) ;
+        ResultSet rs = ResultSetMgr.read(in, lang) ;
+        ResultSetRewindable rsw = ResultSetFactory.makeRewindable(rs) ;
+        if ( ! lang.equals(SPARQLResultSetCSV) )
+            // CSV is not faithful
+            assertTrue(ResultSetCompare.equalsByTerm(test_rs, rsw)) ;
+
+        rsw.reset();
         test_rs.reset(); 
+        
+        out = new ByteArrayOutputStream() ;
+
+        // Round trip the output from above - write(rsw)-read-compare
+        ResultSetMgr.write(out, rsw, lang) ;
         in = new ByteArrayInputStream(out.toByteArray()) ;
         ResultSet rs2 = ResultSetMgr.read(in, lang) ;
-        ResultSetCompare.equalsByTerm(test_rs, rs2) ;
+        // Not test_rs -- CSV round-trips to itself.
+        assertTrue(ResultSetCompare.equalsByTerm(rsw, rs2)) ;
     }
+    
+//    @Test public void test_resultset_02() {
+//        StringWriter out = new StringWriter() ;
+//        ResultSetMgr.write(out, test_rs, lang) ;
+//        test_rs.reset(); 
+//        StringReader in = new StringReader(out.toString()) ;
+//        
+//        ResultSet rs = ResultSetMgr.read(in, lang) ;
+//        ResultSetRewindable rsw = ResultSetFactory.makeRewindable(rs) ;
+//        if ( ! lang.equals(SPARQLResultSetCSV) )
+//            // CSV is not faithful
+//            assertTrue(ResultSetCompare.equalsByTerm(test_rs, rsw)) ;
+//
+//        rsw.reset();
+//        test_rs.reset(); 
+//        
+//        out = new StringWriter() ;
+//
+//        // Round trip the output from above.
+//        ResultSetMgr.write(out, rsw, lang) ;
+//        in = new StringReader(out.toString()) ;
+//        ResultSet rs2 = ResultSetMgr.read(in, lang) ;
+//        // Not test_rs -- CSV is not faithful
+//        assertTrue(ResultSetCompare.equalsByTerm(rsw, rs2)) ;
+//    }
 }