You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@sling.apache.org by ro...@apache.org on 2017/11/07 09:16:26 UTC

[sling-maven-sling-plugin] 13/28: SLING-798 - Add web console version check.

This is an automated email from the ASF dual-hosted git repository.

rombert pushed a commit to annotated tag maven-sling-plugin-2.0.4-incubator
in repository https://gitbox.apache.org/repos/asf/sling-maven-sling-plugin.git

commit 0c7cb636b46419b1143194e48b9830e6c95120c8
Author: Carsten Ziegeler <cz...@apache.org>
AuthorDate: Mon Jan 19 09:33:18 2009 +0000

    SLING-798 - Add web console version check.
    
    git-svn-id: https://svn.apache.org/repos/asf/incubator/sling/trunk/maven/maven-sling-plugin@735637 13f79535-47bb-0310-9956-ffa450edef68
---
 .../bundlesupport/AbstractBundleInstallMojo.java   | 92 +++++++++++++++++-----
 1 file changed, 74 insertions(+), 18 deletions(-)

diff --git a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
index bbf4e12..e5c83a2 100644
--- a/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
+++ b/src/main/java/org/apache/sling/maven/bundlesupport/AbstractBundleInstallMojo.java
@@ -145,10 +145,34 @@ abstract class AbstractBundleInstallMojo extends AbstractBundlePostMojo {
                 + slingUrl);
         post(slingUrl, bundleFile);
         if ( mountByFS ) {
+            // if we get a version, we have a recent web console
+            final String version = checkWebConsoleVersion(slingUrl);
+            if ( version == null ) {
+                throw new MojoExecutionException("Apache Felix Web Console is too old to mount " +
+                        "the initial content through file system provider configs. " +
+                        "Either upgrade the web console or disable this feature.");
+            }
             configure(slingUrl, bundleFile);
         }
     }
 
+    /**
+     * Get the http client
+     */
+    protected HttpClient getHttpClient() {
+        final HttpClient client = new HttpClient();
+        client.getHttpConnectionManager().getParams().setConnectionTimeout(
+            5000);
+
+        // authentication stuff
+        client.getParams().setAuthenticationPreemptive(true);
+        Credentials defaultcreds = new UsernamePasswordCredentials(user,
+            password);
+        client.getState().setCredentials(AuthScope.ANY, defaultcreds);
+
+        return client;
+    }
+
     protected void post(String targetURL, File file)
             throws MojoExecutionException {
 
@@ -176,17 +200,8 @@ abstract class AbstractBundleInstallMojo extends AbstractBundlePostMojo {
 
             filePost.setRequestEntity(new MultipartRequestEntity(parts,
                 filePost.getParams()));
-            HttpClient client = new HttpClient();
-            client.getHttpConnectionManager().getParams().setConnectionTimeout(
-                5000);
-
-            // authentication stuff
-            client.getParams().setAuthenticationPreemptive(true);
-            Credentials defaultcreds = new UsernamePasswordCredentials(user,
-                password);
-            client.getState().setCredentials(AuthScope.ANY, defaultcreds);
 
-            int status = client.executeMethod(filePost);
+            int status = getHttpClient().executeMethod(filePost);
             if (status == HttpStatus.SC_OK) {
                 getLog().info("Bundle installed");
             } else {
@@ -222,14 +237,7 @@ abstract class AbstractBundleInstallMojo extends AbstractBundlePostMojo {
             throw new MojoExecutionException("Unable to read manifest from file " + file, ioe);
         }
         // setup http client
-        final HttpClient client = new HttpClient();
-        client.getHttpConnectionManager().getParams().setConnectionTimeout(5000);
-
-        // authentication stuff
-        client.getParams().setAuthenticationPreemptive(true);
-        final Credentials defaultcreds = new UsernamePasswordCredentials(user,
-                password);
-        client.getState().setCredentials(AuthScope.ANY, defaultcreds);
+        final HttpClient client = getHttpClient();
 
         getLog().info("Trying to configure file system provider...");
         // quick check if resources are configured
@@ -369,4 +377,52 @@ abstract class AbstractBundleInstallMojo extends AbstractBundlePostMojo {
             }
         }
     }
+
+    /**
+     * Try to get the version of the web console
+     * @return The version or <code>null</code> if version is not detectable.
+     */
+    protected String checkWebConsoleVersion(final String targetUrl) {
+        getLog().debug("Checking web console version....");
+        final String bundleUrl = targetUrl + "/bundles/org.apache.felix.webconsole.json";
+        final HttpClient client = getHttpClient();
+        final GetMethod gm = new GetMethod(bundleUrl);
+        // if something goes wrong, we assume an older version!!
+        try {
+            final int status = client.executeMethod(gm);
+            if ( status == 200 ) {
+                if ( gm.getResponseContentLength() == 0 ) {
+                    getLog().debug("Response has zero length. Assuming older version of web console.");
+                    return null;
+                }
+                final String jsonText = gm.getResponseBodyAsString();
+                try {
+                    final JSONObject obj = new JSONObject(jsonText);
+                    final JSONArray props = obj.getJSONArray("props");
+                    for(int i=0; i<props.length(); i++) {
+                        final JSONObject property = props.getJSONObject(i);
+                        if ( "Version".equals(property.get("key")) ) {
+                            final String version = property.getString("value");
+                            getLog().debug("Found web console version " + version);
+                            return version;
+                        }
+                    }
+                    getLog().debug("Version property not found in response. Assuming older version.");
+                    return null;
+                } catch (JSONException ex) {
+                    getLog().debug("Converting response to JSON failed. Assuming older version: " + ex.getMessage());
+                    return null;
+                }
+
+            }
+            getLog().debug("Status code from web console: " + status);
+       } catch (HttpException e) {
+            getLog().debug("HttpException: " + e.getMessage());
+        } catch (IOException e) {
+            getLog().debug("IOException: " + e.getMessage());
+        }
+
+        getLog().debug("Unknown version.");
+        return null;
+    }
 }
\ No newline at end of file

-- 
To stop receiving notification emails like this one, please contact
"commits@sling.apache.org" <co...@sling.apache.org>.