Merge pull request #774 from afs/jena1935-subquery

JENA-1935: No prologue for subquery
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
index 90dba1b..0c8393e 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/RDFLanguages.java
@@ -123,6 +123,7 @@
                                                      .addAltNames("RDF_THRIFT", "RDFTHRIFT", "RDF/THRIFT", "TRDF")
                                                      .addFileExtensions("rt", "trdf")
                                                      .build() ;
+    /** @deprecated Use {@link #RDFTHRIFT} */
     public static final Lang THRIFT     = RDFTHRIFT;
 
     /** Text */
@@ -184,7 +185,7 @@
         Lang.NQUADS     = RDFLanguages.NQUADS ;
         Lang.NQ         = RDFLanguages.NQ ;
         Lang.TRIG       = RDFLanguages.TRIG ;
-        Lang.RDFTHRIFT  = RDFLanguages.THRIFT ;
+        Lang.RDFTHRIFT  = RDFLanguages.RDFTHRIFT ;
         Lang.TRIX       = RDFLanguages.TRIX ;
         Lang.RDFNULL    = RDFLanguages.RDFNULL ;
         Lang.SHACLC     = RDFLanguages.SHACLC ;
@@ -215,7 +216,7 @@
         register(RDFJSON) ;
         register(TRIG) ;
         register(NQUADS) ;
-        register(THRIFT) ;
+        register(RDFTHRIFT) ;
         register(TRIX) ;
         register(RDFNULL) ;
         register(SHACLC) ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
index 4109d2c..4f0b3d9 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/StreamRDF2Thrift.java
@@ -18,117 +18,118 @@
 
 package org.apache.jena.riot.thrift;
 
-import java.io.OutputStream ;
+import java.io.OutputStream;
 
-import org.apache.jena.atlas.logging.Log ;
-import org.apache.jena.graph.Node ;
-import org.apache.jena.graph.Triple ;
-import org.apache.jena.riot.RiotException ;
-import org.apache.jena.riot.system.PrefixMap ;
-import org.apache.jena.riot.system.PrefixMapFactory ;
-import org.apache.jena.riot.system.StreamRDF ;
-import org.apache.jena.riot.thrift.wire.* ;
-import org.apache.jena.sparql.core.Quad ;
-import org.apache.thrift.TException ;
-import org.apache.thrift.protocol.TProtocol ;
+import org.apache.jena.atlas.logging.Log;
+import org.apache.jena.graph.Node;
+import org.apache.jena.graph.Triple;
+import org.apache.jena.riot.RiotException;
+import org.apache.jena.riot.system.PrefixMap;
+import org.apache.jena.riot.system.PrefixMapFactory;
+import org.apache.jena.riot.system.StreamRDF;
+import org.apache.jena.riot.thrift.wire.*;
+import org.apache.jena.sparql.core.Quad;
+import org.apache.thrift.TException;
+import org.apache.thrift.protocol.TProtocol;
 
 /** Encode StreamRDF in Thrift.
- *  Usually used via {@link BinRDF} functions. 
- * 
+ *  Usually used via {@link BinRDF} functions.
+ *
  * @see Thrift2StreamRDF (for each RDF_StreamRow) for the reverse process.
- */ 
-public class StreamRDF2Thrift implements StreamRDF, AutoCloseable 
+ */
+public class StreamRDF2Thrift implements StreamRDF, AutoCloseable
 {
     // No REPEAT support.
-    private final OutputStream out ;
-    private final TProtocol protocol ;
-    private PrefixMap pmap = PrefixMapFactory.create() ;
-    private final boolean encodeValues ;
+    private final OutputStream out;
+    private final TProtocol protocol;
+    private PrefixMap pmap = PrefixMapFactory.create();
+    private final boolean encodeValues;
 
-//    public StreamRDF2Thrift(OutputStream out) {
-//        this(out, false) ;
-//    }
-    
+    public StreamRDF2Thrift(OutputStream out) {
+        this(out, false);
+    }
+
     public StreamRDF2Thrift(OutputStream out, boolean encodeValues) {
-        this.out = out ;
-        this.protocol = TRDF.protocol(out) ;
-        this.encodeValues = encodeValues ;
+        this(TRDF.protocol(out), encodeValues);
     }
 
 //    public StreamRDF2Thrift(TProtocol out) {
-//        this(out, false) ;
+//        this(out, false);
 //    }
-    
-    public StreamRDF2Thrift(TProtocol out, boolean encodeValues) { 
-        this.out = null ;
-        this.protocol = out ;
-        this.pmap = PrefixMapFactory.create() ;
-        this.encodeValues = encodeValues ;
+
+    public StreamRDF2Thrift(TProtocol out, boolean encodeValues) {
+        this.out = null;
+        this.protocol = out;
+        this.pmap = PrefixMapFactory.create();
+        this.encodeValues = encodeValues;
     }
 
     @Override
     public void start() { }
 
-    private final RDF_StreamRow  tStreamRow   = new RDF_StreamRow() ;
-    
-    private final RDF_Triple ttriple    = new RDF_Triple() ;
-    private final RDF_Quad   tquad      = new RDF_Quad() ;
-    
-    private final RDF_Term   tsubject   = new RDF_Term() ;
-    private final RDF_Term   tpredicate = new RDF_Term() ;
-    private final RDF_Term   tobject    = new RDF_Term() ;
-    private final RDF_Term   tgraph     = new RDF_Term() ;
-    
+    private final RDF_StreamRow  tStreamRow   = new RDF_StreamRow();
+
+    private final RDF_Triple ttriple    = new RDF_Triple();
+    private final RDF_Quad   tquad      = new RDF_Quad();
+
+    private final RDF_Term   tsubject   = new RDF_Term();
+    private final RDF_Term   tpredicate = new RDF_Term();
+    private final RDF_Term   tobject    = new RDF_Term();
+    private final RDF_Term   tgraph     = new RDF_Term();
+
     @Override
     public void triple(Triple triple) {
-        doTriple(triple.getSubject(), triple.getPredicate(), triple.getObject()) ;
+        doTriple(triple.getSubject(), triple.getPredicate(), triple.getObject());
     }
 
     private void doTriple(Node subject, Node predicate, Node object) {
-        ThriftConvert.toThrift(subject, pmap, tsubject, encodeValues) ;
-        ThriftConvert.toThrift(predicate, pmap, tpredicate, encodeValues) ;
-        ThriftConvert.toThrift(object, pmap, tobject, encodeValues) ;
-        ttriple.setS(tsubject) ;
-        ttriple.setP(tpredicate) ;
-        ttriple.setO(tobject) ;
+        ThriftConvert.toThrift(subject, pmap, tsubject, encodeValues);
+        ThriftConvert.toThrift(predicate, pmap, tpredicate, encodeValues);
+        ThriftConvert.toThrift(object, pmap, tobject, encodeValues);
+        ttriple.setS(tsubject);
+        ttriple.setP(tpredicate);
+        ttriple.setO(tobject);
 
-        tStreamRow.setTriple(ttriple) ;
-        try { tStreamRow.write(protocol) ; }
-        catch (TException e) { TRDF.exception(e) ; }
-        tStreamRow.clear();
-        ttriple.clear();
-        tsubject.clear();
-        tpredicate.clear() ;
-        tobject.clear() ;
+        tStreamRow.setTriple(ttriple);
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        finally {
+            tStreamRow.clear();
+            ttriple.clear();
+            tsubject.clear();
+            tpredicate.clear();
+            tobject.clear();
+        }
     }
-    
+
     @Override
     public void quad(Quad quad) {
         if ( quad.getGraph() == null || quad.isDefaultGraph() ) {
-            doTriple(quad.getSubject(), quad.getPredicate(), quad.getObject()) ;
-            return ;
+            doTriple(quad.getSubject(), quad.getPredicate(), quad.getObject());
+            return;
         }
-        
-        ThriftConvert.toThrift(quad.getGraph(), pmap, tgraph, encodeValues) ;
-        ThriftConvert.toThrift(quad.getSubject(), pmap, tsubject, encodeValues) ;
-        ThriftConvert.toThrift(quad.getPredicate(), pmap, tpredicate, encodeValues) ;
-        ThriftConvert.toThrift(quad.getObject(), pmap, tobject, encodeValues) ;
-        
-        tquad.setG(tgraph) ;
-        tquad.setS(tsubject) ;
-        tquad.setP(tpredicate) ;
-        tquad.setO(tobject) ;
-        tStreamRow.setQuad(tquad) ;
-        
-        try { tStreamRow.write(protocol) ; } 
-        catch (TException e) { TRDF.exception(e) ; }
-        
-        tStreamRow.clear() ;
-        tquad.clear();
-        tgraph.clear();
-        tsubject.clear();
-        tpredicate.clear() ;
-        tobject.clear() ;
+
+        ThriftConvert.toThrift(quad.getGraph(), pmap, tgraph, encodeValues);
+        ThriftConvert.toThrift(quad.getSubject(), pmap, tsubject, encodeValues);
+        ThriftConvert.toThrift(quad.getPredicate(), pmap, tpredicate, encodeValues);
+        ThriftConvert.toThrift(quad.getObject(), pmap, tobject, encodeValues);
+
+        tquad.setG(tgraph);
+        tquad.setS(tsubject);
+        tquad.setP(tpredicate);
+        tquad.setO(tobject);
+        tStreamRow.setQuad(tquad);
+
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        finally {
+            tStreamRow.clear();
+            tquad.clear();
+            tgraph.clear();
+            tsubject.clear();
+            tpredicate.clear();
+            tobject.clear();
+        }
     }
 
     @Override
@@ -138,24 +139,24 @@
 
     @Override
     public void prefix(String prefix, String iri) {
-        try { pmap.add(prefix, iri) ; }
+        try { pmap.add(prefix, iri); }
         catch ( RiotException ex) {
-            Log.warn(this, "Prefix mapping error", ex) ;
+            Log.warn(this, "Prefix mapping error", ex);
         }
-        RDF_PrefixDecl tprefix = new RDF_PrefixDecl(prefix, iri) ; 
-        tStreamRow.setPrefixDecl(tprefix) ;
-        try { tStreamRow.write(protocol) ; }
-        catch (TException e) { TRDF.exception(e) ; }
-        tStreamRow.clear(); 
+        RDF_PrefixDecl tprefix = new RDF_PrefixDecl(prefix, iri);
+        tStreamRow.setPrefixDecl(tprefix);
+        try { tStreamRow.write(protocol); }
+        catch (TException e) { TRDF.exception(e); }
+        tStreamRow.clear();
     }
 
     @Override
     public void close() {
-        finish() ;
+        finish();
     }
-    
+
     @Override
     public void finish() {
-        TRDF.flush(protocol) ;
+        TRDF.flush(protocol);
     }
 }
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
index e7bd316..a896709 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/TRDF.java
@@ -41,9 +41,9 @@
 
 /** Support operations for RDF Thrift */
 public class TRDF {
-    public static final int InputBufferSize     = 128*1024 ; 
-    public static final int OutputBufferSize    = 128*1024 ; 
-    
+    public static final int InputBufferSize     = 128*1024 ;
+    public static final int OutputBufferSize    = 128*1024 ;
+
     /**
      * Create Thrift protocol for the InputStream.
      * @param in InputStream
@@ -61,13 +61,13 @@
 
     /**
      * Create Thrift protocol for the OutputStream.
-     * The caller must call {@link TRDF#flush(TProtocol)} 
-     * which will flush the underlying (internally buffered) output stream. 
+     * The caller must call {@link TRDF#flush(TProtocol)}
+     * which will flush the underlying (internally buffered) output stream.
      * @param out OutputStream
      */
     public static TProtocol protocol(OutputStream out) {
         try {
-            // Flushing the protocol will flush the BufferedOutputStream 
+            // Flushing the protocol will flush the BufferedOutputStream
             if ( !( out instanceof BufferedOutputStream ) )
                 out = new BufferedOutputStream(out, OutputBufferSize) ;
             TTransport transport = new TIOStreamTransport(out) ;
@@ -89,26 +89,26 @@
 
     public static TProtocol protocol(TTransport transport) {
         if ( true ) return new TCompactProtocol(transport) ;
-    
+
         // Keep the warnings down.
         if ( false ) return new TTupleProtocol(transport) ;
         if ( false ) return new TJSONProtocol(transport) ;
         throw new RiotThriftException("No protocol impl choosen") ;
     }
 
-    /** Flush a TProtocol; exceptions converted to {@link RiotException} */  
+    /** Flush a TProtocol; exceptions converted to {@link RiotException} */
     public static void flush(TProtocol protocol) {
         flush(protocol.getTransport()) ;
     }
 
-    /** Flush a TTransport; exceptions converted to {@link RiotException} */  
+    /** Flush a TTransport; exceptions converted to {@link RiotException} */
     public static void flush(TTransport transport) {
         try { transport.flush() ; }
         catch (TException ex) { TRDF.exception(ex) ; }
     }
 
     public static final RDF_ANY ANY = new RDF_ANY() ;
-    /** The Thrift RDF Term 'ANY' */ 
+    /** The Thrift RDF Term 'ANY' */
     public static final RDF_Term tANY = new RDF_Term() ;
     /** The Thrift RDF Term 'UNDEF' */
     public static final RDF_UNDEF UNDEF = new RDF_UNDEF() ;
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
index c1b0ef9..f1308f5 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterDatasetThrift.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 
 import java.io.OutputStream ;
 import java.io.Writer ;
@@ -41,7 +41,7 @@
     }
     @Override
     public Lang getLang() {
-        return THRIFT ;
+        return RDFTHRIFT ;
     }
     @Override
     public void write(Writer out, DatasetGraph dsg, PrefixMap prefixMap, String baseURI, Context context) {
diff --git a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
index 2ec3a47..665fca9 100644
--- a/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
+++ b/jena-arq/src/main/java/org/apache/jena/riot/thrift/WriterGraphThrift.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 
 import java.io.OutputStream ;
 import java.io.Writer ;
@@ -42,12 +42,13 @@
     }
     @Override
     public Lang getLang() {
-        return THRIFT ;
+        return RDFTHRIFT ;
     }
     @Override
     public void write(Writer out, Graph graph, PrefixMap prefixMap, String baseURI, Context context) {
         throw new NotImplemented("Writing binary data to a java.io.Writer is not supported. Please use an OutputStream") ;
     }
+
     @Override
     public void write(OutputStream out, Graph graph, PrefixMap prefixMap, String baseURI, Context context) {
         StreamRDF stream = BinRDF.streamToOutputStream(out, withValues) ;
diff --git a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
index 5590b6e..0b650a7 100644
--- a/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
+++ b/jena-arq/src/test/java/org/apache/jena/riot/thrift/TestThriftSetup.java
@@ -18,7 +18,7 @@
 
 package org.apache.jena.riot.thrift;
 
-import static org.apache.jena.riot.RDFLanguages.THRIFT ;
+import static org.apache.jena.riot.RDFLanguages.RDFTHRIFT ;
 import static org.junit.Assert.assertEquals;
 import static org.junit.Assert.assertNotNull;
 import static org.junit.Assert.assertTrue;
@@ -29,25 +29,25 @@
 public class TestThriftSetup {
 
     @Test public void setup_01() {
-        assertTrue(RDFLanguages.isRegistered(THRIFT)) ;
+        assertTrue(RDFLanguages.isRegistered(RDFTHRIFT)) ;
     }
 
     @Test public void setup_02() {
         Lang lang = RDFLanguages.filenameToLang("data.rt") ;
-        assertEquals(lang, THRIFT) ;
+        assertEquals(lang, RDFTHRIFT) ;
     }
 
     @SuppressWarnings("deprecation")
     @Test public void setup_03() {
-        assertTrue(RDFParserRegistry.isQuads(THRIFT)) ;
-        assertTrue(RDFParserRegistry.isTriples(THRIFT)) ;
-        assertTrue(RDFParserRegistry.isRegistered(THRIFT));
-        assertNotNull(RDFParserRegistry.getFactory(THRIFT)) ;
+        assertTrue(RDFParserRegistry.isQuads(RDFTHRIFT)) ;
+        assertTrue(RDFParserRegistry.isTriples(RDFTHRIFT)) ;
+        assertTrue(RDFParserRegistry.isRegistered(RDFTHRIFT));
+        assertNotNull(RDFParserRegistry.getFactory(RDFTHRIFT)) ;
     }
-    
+
     @Test public void setup_04() {
-        assertTrue(RDFWriterRegistry.contains(THRIFT)) ;
-        assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(THRIFT)) ;
+        assertTrue(RDFWriterRegistry.contains(RDFTHRIFT)) ;
+        assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(RDFTHRIFT)) ;
         assertTrue(RDFWriterRegistry.contains(RDFFormat.RDF_THRIFT)) ;
         assertNotNull(RDFWriterRegistry.getWriterDatasetFactory(RDFFormat.RDF_THRIFT)) ;
         assertTrue(RDFWriterRegistry.contains(RDFFormat.RDF_THRIFT_VALUES)) ;
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
index a261689..285d9bf 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/Dispatcher.java
@@ -20,7 +20,7 @@
 
 import static java.lang.String.format;
 import static org.apache.commons.lang3.StringUtils.isEmpty;
-import static org.apache.jena.fuseki.server.Operation.*;
+import static org.apache.jena.fuseki.server.Operation.GSP_R;
 import static org.apache.jena.fuseki.server.Operation.GSP_RW;
 import static org.apache.jena.fuseki.server.Operation.Query;
 import static org.apache.jena.fuseki.server.Operation.Update;
@@ -37,6 +37,7 @@
 import org.apache.jena.fuseki.auth.Auth;
 import org.apache.jena.fuseki.servlets.*;
 import org.apache.jena.fuseki.system.ActionCategory;
+import org.apache.jena.riot.WebContent;
 import org.apache.jena.riot.web.HttpNames;
 import org.apache.jena.web.HttpSC;
 import org.slf4j.Logger;
@@ -228,23 +229,31 @@
      * look for a named endpoint that supplies the operation.
      */
     private static Endpoint chooseEndpoint(HttpAction action, DataService dataService, String endpointName) {
-        Endpoint ep = chooseEndpointNoLegacy(action, dataService, endpointName);
-        if ( ep != null )
-            return ep;
-        // No dispatch so far.
+        try {
+            Endpoint ep = chooseEndpointNoLegacy(action, dataService, endpointName);
+            if ( ep != null )
+                return ep;
+            // No dispatch so far.
 
-        if ( ! isEmpty(endpointName) )
-            return ep;
-        // [DISPATCH LEGACY]
+            if ( ! isEmpty(endpointName) )
+                return ep;
+            // [DISPATCH LEGACY]
 
-        // When it is a unnamed service request (operation on the dataset) and there
-        // is no match, search the named services.
-        Operation operation = chooseOperation(action);
-        // Search for an endpoint that provides the operation.
-        // No guarantee it has the access controls for the operation
-        // but in this case, access control will validate against all possible endpoints.
-        ep = findEndpointForOperation(action, dataService, operation, true);
-        return ep;
+            // When it is a unnamed service request (operation on the dataset) and there
+            // is no match, search the named services.
+            Operation operation = chooseOperation(action);
+            // Search for an endpoint that provides the operation.
+            // No guarantee it has the access controls for the operation
+            // but in this case, access control will validate against all possible endpoints.
+            ep = findEndpointForOperation(action, dataService, operation, true);
+            return ep;
+        } catch (ActionErrorException ex) {
+            throw ex;
+        } catch (RuntimeException ex) {
+            // Example: Jetty throws BadMessageException when it is an HTML form and it is too big.
+            ServletOps.errorBadRequest(ex.getMessage());
+            return null;
+        }
     }
 
     /**
@@ -267,7 +276,7 @@
             return null;
 
         // If there is one endpoint, dispatch there directly.
-        Endpoint ep = epSet.getOnly();
+        Endpoint ep = epSet.getExactlyOne();
         if ( ep != null )
             return ep;
         // No single direct dispatch. Multiple choices (different operation, same endpoint name)
@@ -373,11 +382,23 @@
 
         // -- Any other queryString
         // Query string now unexpected.
+
         // Place for an extension point.
         boolean hasParams = request.getParameterMap().size() > 0;
         if ( hasParams ) {
+            // One nasty case:
+            // Bad HTML form (content-type  application/x-www-form-urlencoded), but body is not an HTML form.
+            //  map is one entry, and the key is all of the body,
+            if ( WebContent.contentTypeHTMLForm.equals(request.getContentType()) ) {
+                ServletOps.errorBadRequest("Malformed request: unrecognized HTML form request");
+                return null;
+            }
             // Unrecognized ?key=value
-            ServletOps.errorBadRequest("Malformed request: unrecognized query string parameters: " + request.getQueryString());
+            String qs = request.getQueryString();
+            if ( qs != null )
+                ServletOps.errorBadRequest("Malformed request: unrecognized parameters: " + qs);
+            else
+                ServletOps.errorBadRequest(HttpSC.getMessage(HttpSC.BAD_REQUEST_400));
         }
 
 
diff --git a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
index 8aa9c98..c4f2b5a 100644
--- a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
+++ b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/server/EndpointSet.java
@@ -104,7 +104,7 @@
     public Collection<Operation> operations() { return endpoints.keySet(); }
     
     /** Get the Endpoint for a singleton EndpointSet */
-    public Endpoint getOnly() {
+    public Endpoint getExactlyOne() {
         return single;
     }
     
diff --git a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
index 8f6e75f..2b09b94 100644
--- a/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
+++ b/jena-fuseki2/jena-fuseki-main/src/main/java/org/apache/jena/fuseki/main/FusekiServer.java
@@ -273,7 +273,7 @@
         static {
             // This is the CrossOriginFilter default.
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_ORIGINS_PARAM, "*");
-            // Variatiosn from CrossOriginFilter defaults.
+            // Variations from CrossOriginFilter defaults.
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_METHODS_PARAM, "GET,POST,DELETE,PUT,HEAD,OPTIONS,PATCH");
             corsInitParamsDft.put(CrossOriginFilter.ALLOWED_HEADERS_PARAM,
                 "X-Requested-With, Content-Type, Accept, Origin, Last-Modified, Authorization");
@@ -974,6 +974,8 @@
             context.setDisplayName(Fuseki.servletRequestLogName);
             context.setErrorHandler(new FusekiErrorHandler1());
             context.setContextPath(contextPath);
+            // SPARQL Update by HTML - not the best way but.
+            context.setMaxFormContentSize(1024*1024);
             // securityHandler done in buildAccessControl
             return context;
         }
diff --git a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
index a51d754..48d322c 100644
--- a/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
+++ b/jena-rdfconnection/src/main/java/org/apache/jena/rdfconnection/RDFConnectionRemoteBuilder.java
@@ -286,7 +286,7 @@
         return this;
     }
 
-    /** Build an {RDFConnection}. */
+    /** Build an {@link RDFConnection}. */
     public RDFConnection build() {
         requireNonNull(txnLifecycle);