Repository: jena
Updated Branches:
  refs/heads/master 930d4d333 -> 2a5381f9f


Detect Fuseki by request id. Remove dev logging.


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

Branch: refs/heads/master
Commit: 2a5381f9ff7e7581b1c6dde5e484ddcd486a7286
Parents: 930d4d3
Author: Andy Seaborne <[email protected]>
Authored: Thu Mar 29 16:36:30 2018 +0100
Committer: Andy Seaborne <[email protected]>
Committed: Thu Mar 29 16:36:30 2018 +0100

----------------------------------------------------------------------
 .../java/org/apache/jena/fuseki/FusekiLib.java  | 56 ++++++++++++--------
 .../TestRDFConnectionFusekiBinary.java          | 15 ++----
 2 files changed, 39 insertions(+), 32 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/jena/blob/2a5381f9/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
----------------------------------------------------------------------
diff --git 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
index c0346e5..2da827b 100644
--- 
a/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
+++ 
b/jena-fuseki2/jena-fuseki-core/src/main/java/org/apache/jena/fuseki/FusekiLib.java
@@ -24,6 +24,7 @@ import java.util.Iterator ;
 
 import javax.servlet.http.HttpServletRequest ;
 
+import org.apache.http.Header;
 import org.apache.http.HttpResponse;
 import org.apache.http.client.HttpClient;
 import org.apache.http.client.methods.HttpOptions;
@@ -275,9 +276,12 @@ public class FusekiLib {
         }
     }
 
-    /** Test whether a URL identifies a Fuseki server */  
+    /**
+     * Test whether a URL identifies a Fuseki server. This operation can not 
guaranttee to
+     * detech a Fuseki server - for example, it may be behind a reverse proxy 
that masks
+     * the signature.
+     */
     public static boolean isFuseki(String datasetURL) {
-               System.err.println("isFuseki: "+datasetURL);
         HttpOptions request = new HttpOptions(datasetURL);
         HttpClient httpClient = HttpOp.getDefaultHttpClient();
         if ( httpClient == null ) 
@@ -285,7 +289,11 @@ public class FusekiLib {
         return isFuseki(request, httpClient, null);
     }
 
-    /** Test whether a {@link RDFConnectionRemote} connects to a Fuseki server 
*/  
+    /**
+     * Test whether a {@link RDFConnectionRemote} connects to a Fuseki server. 
This
+     * operation can not guaranttee to detech a Fuseki server - for example, 
it may be
+     * behind a reverse proxy that masks the signature.
+     */
     public static boolean isFuseki(RDFConnectionRemote connection) {
         HttpOptions request = new HttpOptions(connection.getDestination());
         HttpClient httpClient = connection.getHttpClient();
@@ -296,28 +304,34 @@ public class FusekiLib {
     }
 
     private static boolean isFuseki(HttpOptions request, HttpClient 
httpClient, HttpContext httpContext) {
-               System.err.println("isFuseki(worker)");
-               if ( httpClient == null ) {
-                       System.err.println("httpClient is null");
-               }
         try {
             HttpResponse response = httpClient.execute(request);
-            // Fuseki-Request-ID:
-            //String reqId = 
response.getFirstHeader("Fuseki-Request-ID").getValue();
-            // Server:
-                               System.err.println("isFuseki(worker)-1");
-            String serverIdent = response.getFirstHeader("Server").getValue();
-                               System.err.println("isFuseki(worker)-2");
-            Log.debug(ARQ.getHttpRequestLogger(), "Server: "+serverIdent);
-                               System.err.println("isFuseki(worker)-3");
-            boolean isFuseki = serverIdent.startsWith("Apache Jena Fuseki");
-                               System.err.println("isFuseki(worker)-4");
-            if ( !isFuseki )
-                isFuseki = serverIdent.toLowerCase().contains("fuseki");
-                       System.err.println("isFuseki(worker)-return");
-            return isFuseki; // Maybe
+            // Fuseki does not send "Server" in release mode.
+            // (best practice).
+            // All we can do is try for the "Fuseki-Request-ID" 
+            String reqId = safeGetHeader(response, "Fuseki-Request-ID");
+            if ( reqId != null )
+                return true;
+
+            // If returning "Server"
+            String serverIdent = safeGetHeader(response, "Server");
+            if ( serverIdent != null ) {
+                Log.debug(ARQ.getHttpRequestLogger(), "Server: "+serverIdent);
+                boolean isFuseki = serverIdent.startsWith("Apache Jena 
Fuseki");
+                if ( !isFuseki )
+                    isFuseki = serverIdent.toLowerCase().contains("fuseki");
+                return isFuseki;
+            }
+            return false; 
         } catch (IOException ex) {
             throw new HttpException("Failed to check for a Fuseki server", ex);
         }
     }
+    
+    private static String safeGetHeader(HttpResponse response, String header) {
+        Header h = response.getFirstHeader(header);
+        if ( h == null )
+            return null;
+        return h.getValue();
+    }
 }

http://git-wip-us.apache.org/repos/asf/jena/blob/2a5381f9/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionFusekiBinary.java
----------------------------------------------------------------------
diff --git 
a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionFusekiBinary.java
 
b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionFusekiBinary.java
index 1a0d502..9619798 100644
--- 
a/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionFusekiBinary.java
+++ 
b/jena-integration-tests/src/test/java/org/apache/jena/test/rdfconnection/TestRDFConnectionFusekiBinary.java
@@ -51,22 +51,15 @@ public class TestRDFConnectionFusekiBinary {
         model.getGraph().add(triple);
         
         int PORT = FusekiLib.choosePort();
-        FusekiServer server = createFusekiServer(PORT).build().start(); 
+        FusekiServer server = createFusekiServer(PORT).build().start();
         try {
             String dsURL = "http://localhost:"+PORT+"/ds"; ;
-                       {
-                               System.err.println("dsURL="+dsURL);
-                               boolean b1 = FusekiLib.isFuseki(dsURL);
-                               assertTrue("isFuseki(1)", b1) ;
-                       }
-                       System.err.println("builder");
+            assertTrue(FusekiLib.isFuseki(dsURL)); 
+
             RDFConnectionRemoteBuilder builder = 
RDFConnectionFuseki.create().destination(dsURL);
 
             try (RDFConnectionFuseki conn = 
(RDFConnectionFuseki)builder.build()) {
-                               {
-                                       boolean b2 = FusekiLib.isFuseki(conn);  
 
-                                       assertTrue("isFuseki(2)", b2);
-                               }
+                assertTrue(FusekiLib.isFuseki(conn));
                 // GSP
                 conn.put(model);
                 checkModel(conn, "b3456");

Reply via email to