Return-Path: Delivered-To: apmail-geronimo-scm-archive@www.apache.org Received: (qmail 51921 invoked from network); 7 Mar 2005 02:18:44 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur-2.apache.org with SMTP; 7 Mar 2005 02:18:44 -0000 Received: (qmail 26723 invoked by uid 500); 7 Mar 2005 02:18:44 -0000 Delivered-To: apmail-geronimo-scm-archive@geronimo.apache.org Received: (qmail 26577 invoked by uid 500); 7 Mar 2005 02:18:44 -0000 Mailing-List: contact scm-help@geronimo.apache.org; run by ezmlm Precedence: bulk list-help: list-unsubscribe: List-Post: Reply-To: dev@geronimo.apache.org Delivered-To: mailing list scm@geronimo.apache.org Received: (qmail 26561 invoked by uid 99); 7 Mar 2005 02:18:43 -0000 X-ASF-Spam-Status: No, hits=-9.8 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from minotaur.apache.org (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.28) with SMTP; Sun, 06 Mar 2005 18:18:43 -0800 Received: (qmail 51905 invoked by uid 65534); 7 Mar 2005 02:18:42 -0000 Message-ID: <20050307021842.51904.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Mailer: svnmailer-1.0.0-dev Date: Mon, 07 Mar 2005 02:18:42 -0000 Subject: svn commit: r156363 - geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java To: scm@geronimo.apache.org From: djencks@apache.org X-Virus-Checked: Checked X-Spam-Rating: minotaur-2.apache.org 1.6.2 0/1000/N Author: djencks Date: Sun Mar 6 18:18:41 2005 New Revision: 156363 URL: http://svn.apache.org/viewcvs?view=3Drev&rev=3D156363 Log: GERONIMO-491. Validate service plans Modified: geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/dep= loyment/service/ServiceConfigBuilder.java Modified: geronimo/trunk/modules/service-builder/src/java/org/apache/geroni= mo/deployment/service/ServiceConfigBuilder.java URL: http://svn.apache.org/viewcvs/geronimo/trunk/modules/service-builder/s= rc/java/org/apache/geronimo/deployment/service/ServiceConfigBuilder.java?vi= ew=3Ddiff&r1=3D156362&r2=3D156363 =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D=3D= =3D=3D=3D --- geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/dep= loyment/service/ServiceConfigBuilder.java (original) +++ geronimo/trunk/modules/service-builder/src/java/org/apache/geronimo/dep= loyment/service/ServiceConfigBuilder.java Sun Mar 6 18:18:41 2005 @@ -32,9 +32,11 @@ import java.util.List; import java.util.Map; import java.util.Set; +import java.util.ArrayList; import java.util.jar.JarFile; import javax.management.MalformedObjectNameException; import javax.management.ObjectName; +import javax.xml.namespace.QName; =20 import org.apache.geronimo.common.DeploymentException; import org.apache.geronimo.deployment.ConfigurationBuilder; @@ -61,6 +63,7 @@ import org.apache.geronimo.kernel.repository.Repository; import org.apache.xmlbeans.XmlCursor; import org.apache.xmlbeans.XmlException; +import org.apache.xmlbeans.XmlOptions; =20 /** * @version $Rev$ $Date$ @@ -73,6 +76,7 @@ //TODO this being static is a really good argument that all other buil= ders should have a reference to this gbean, not use static methods on it. private static final Map xmlAttributeBuilderMap =3D new HashMap(); private Map refMap; + private static final QName SERVICE_QNAME =3D new QName("http://geronim= o=2Eapache.org/xml/ns/deployment", "configuration"); =20 public ServiceConfigBuilder(URI defaultParentId, Repository repository= ) { this(defaultParentId, repository, null, null); @@ -98,14 +102,29 @@ return null; } =20 - // todo tell the difference between an invalid plan and one that's= not for me try { ConfigurationDocument configurationDoc =3D ConfigurationDocume= nt.Factory.parse(planFile); + XmlCursor cursor =3D configurationDoc.newCursor(); + try { + cursor.toFirstChild(); + if (!SERVICE_QNAME.equals(cursor.getName())) { + return null; + } + } finally { + cursor.dispose(); + } + XmlOptions xmlOptions =3D new XmlOptions(); + xmlOptions.setLoadLineNumbers(); + Collection errors =3D new ArrayList(); + xmlOptions.setErrorListener(errors); + if (!configurationDoc.validate(xmlOptions)) { + throw new DeploymentException("Invalid deployment descript= or: " + errors + "\nDescriptor: " + configurationDoc.toString()); + } return configurationDoc.getConfiguration(); } catch (XmlException e) { - return null; - } catch (Exception e) { - throw new DeploymentException(e); + throw new DeploymentException("Could not parse xml in plan", e= ); + } catch (IOException e) { + throw new DeploymentException("no plan at " + planFile, e); } } =20