diff options
author | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-16 10:10:12 +0200 |
---|---|---|
committer | Jon Bratseth <bratseth@yahoo-inc.com> | 2017-10-16 10:10:12 +0200 |
commit | deffec3130034d9f216a096678724ab1de339569 (patch) | |
tree | 387d6fb7af27e4e892751947a182235c1ae6e12d | |
parent | ba9fe4df8dfd75ccaafab6888fb67bff9999ce92 (diff) |
Don't validate when reading stored applications
3 files changed, 30 insertions, 4 deletions
diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java index b86c0a5ca94..eda38f95054 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/DeploymentSpec.java @@ -187,9 +187,18 @@ public class DeploymentSpec { * @throws IllegalArgumentException if the XML is invalid */ public static DeploymentSpec fromXml(String xmlForm) { - return new DeploymentSpecXmlReader().read(xmlForm); + return fromXml(xmlForm, true); } - + + /** + * Creates a deployment spec from XML. + * + * @throws IllegalArgumentException if the XML is invalid + */ + public static DeploymentSpec fromXml(String xmlForm, boolean validate) { + return new DeploymentSpecXmlReader(validate).read(xmlForm); + } + public static String toMessageString(Throwable t) { StringBuilder b = new StringBuilder(); String lastMessage = null; diff --git a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java index 0b49325756d..35021d1b44a 100644 --- a/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java +++ b/config-model-api/src/main/java/com/yahoo/config/application/api/xml/DeploymentSpecXmlReader.java @@ -33,6 +33,22 @@ public class DeploymentSpecXmlReader { private static final String blockChangeTag = "block-change"; private static final String prodTag = "prod"; + private final boolean validate; + + /** Creates a validating reader */ + public DeploymentSpecXmlReader() { + this(true); + } + + /** + * Creates a reader + * + * @param validate true to validate the input, false to accept any input which can be unabiguously parsed + */ + public DeploymentSpecXmlReader(boolean validate) { + this.validate = validate; + } + public DeploymentSpec read(Reader reader) { try { return read(IOUtils.readAll(reader)); @@ -47,7 +63,8 @@ public class DeploymentSpecXmlReader { List<Step> steps = new ArrayList<>(); Optional<String> globalServiceId = Optional.empty(); Element root = XML.getDocument(xmlForm).getDocumentElement(); - validateTagOrder(root); + if (validate) + validateTagOrder(root); for (Element environmentTag : XML.getChildren(root)) { if ( ! isEnvironmentName(environmentTag.getTagName())) continue; diff --git a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java index f54dd2a010f..af47e3ecf40 100644 --- a/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java +++ b/controller-server/src/main/java/com/yahoo/vespa/hosted/controller/persistence/ApplicationSerializer.java @@ -229,7 +229,7 @@ public class ApplicationSerializer { Inspector root = slime.get(); ApplicationId id = ApplicationId.fromSerializedForm(root.field(idField).asString()); - DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString()); + DeploymentSpec deploymentSpec = DeploymentSpec.fromXml(root.field(deploymentSpecField).asString(), false); ValidationOverrides validationOverrides = ValidationOverrides.fromXml(root.field(validationOverridesField).asString()); List<Deployment> deployments = deploymentsFromSlime(root.field(deploymentsField)); DeploymentJobs deploymentJobs = deploymentJobsFromSlime(root.field(deploymentJobsField)); |