use of javax.json.JsonException in project sling by apache.
the class TeleporterHttpClient method verifyCorrectBundleState.
void verifyCorrectBundleState(String bundleSymbolicName, int timeoutInSeconds) throws IOException {
final String url = baseUrl + "/system/console/bundles/" + bundleSymbolicName + ".json";
final long end = System.currentTimeMillis() + timeoutInSeconds * 1000;
final ExponentialBackoffDelay d = new ExponentialBackoffDelay(50, 250);
while (System.currentTimeMillis() < end) {
String jsonBody = waitForStatus(url, 200, timeoutInSeconds * 1000);
// deserialize json (https://issues.apache.org/jira/browse/SLING-6536)
try (JsonReader jsonReader = Json.createReader(new StringReader(jsonBody))) {
// extract state
JsonArray jsonArray = jsonReader.readObject().getJsonArray("data");
if (jsonArray == null) {
throw new JsonException("Could not find 'data' array");
}
JsonObject bundleObject = jsonArray.getJsonObject(0);
String state = bundleObject.getString("state");
if ("Active".equals(state)) {
return;
}
// otherwise evaluate the import section
JsonArray propsArray = bundleObject.getJsonArray("props");
if (propsArray == null) {
throw new JsonException("Could not find 'props' object");
}
// iterate through all of them until key="Imported Packages" is found
for (JsonValue propValue : propsArray) {
if (propValue.getValueType().equals(ValueType.OBJECT)) {
JsonObject propObject = (JsonObject) propValue;
if ("Imported Packages".equals(propObject.getString("key"))) {
JsonArray importedPackagesArray = propObject.getJsonArray("value");
String reason = null;
for (JsonValue importedPackageValue : importedPackagesArray) {
if (importedPackageValue.getValueType().equals(ValueType.STRING)) {
String importedPackage = ((JsonString) importedPackageValue).getString();
if (importedPackage.startsWith("ERROR:")) {
reason = importedPackage;
}
}
}
// only if ERROR is found there is no more need to wait for the bundle to become active, otherwise it might just be started in the background
if (reason != null) {
throw new IllegalStateException("The test bundle '" + bundleSymbolicName + "' is in state '" + state + "'. This is due to unresolved import-packages: " + reason);
}
}
}
}
} catch (JsonException | IndexOutOfBoundsException e) {
throw new IllegalArgumentException("Test bundle '" + bundleSymbolicName + "' not correctly installed. Could not parse JSON response though to expose further information: " + jsonBody, e);
}
d.waitNextDelay();
}
throw new IOException("Bundle '" + bundleSymbolicName + "' was not started after " + timeoutInSeconds + " seconds. The check at " + url + " was not successfull. Probably some dependent bundle was not started.");
}
use of javax.json.JsonException in project sling by apache.
the class FsMountMojo method getBundleInstalledVersion.
/**
* Get version of fsresource bundle that is installed in the instance.
* @param targetUrl Target URL
* @return Version number or null if non installed
* @throws MojoExecutionException
*/
private String getBundleInstalledVersion(final String bundleSymbolicName, final String targetUrl) throws MojoExecutionException {
final String getUrl = targetUrl + "/bundles/" + bundleSymbolicName + ".json";
final GetMethod get = new GetMethod(getUrl);
try {
final int status = getHttpClient().executeMethod(get);
if (status == 200) {
final String jsonText;
try (InputStream jsonResponse = get.getResponseBodyAsStream()) {
jsonText = IOUtils.toString(jsonResponse, CharEncoding.UTF_8);
}
try {
JsonObject response = JsonSupport.parseObject(jsonText);
JsonArray data = response.getJsonArray("data");
if (data.size() > 0) {
JsonObject bundleData = data.getJsonObject(0);
return bundleData.getString("version");
}
} catch (JsonException ex) {
throw new MojoExecutionException("Reading bundle data from " + getUrl + " failed, cause: " + ex.getMessage(), ex);
}
}
} catch (HttpException ex) {
throw new MojoExecutionException("Reading bundle data from " + getUrl + " failed, cause: " + ex.getMessage(), ex);
} catch (IOException ex) {
throw new MojoExecutionException("Reading bundle data from " + getUrl + " failed, cause: " + ex.getMessage(), ex);
} finally {
get.releaseConnection();
}
// no version detected, bundle is not installed
return null;
}
Aggregations