On Oct 4, 2006, at 8:43 AM, Sachin Patel wrote:

I must be overlooking something but I'm having trouble using XMLBeans to get to the EnvironmentType for a given deployment plan.

If I have...

XmlObject xmlObject = XmlBeansUtil.parse(planFile.getLocation().toFile());

from there if I cast to a particular DocumentType (WebAppDocument, etc..) there are no methods to get me to the EnvioronmentType..

So I looked at the o.a.g.deployment.Deployer and in there... and what got me even more confused was the following code...  There are only two implementations of ConfigurationBuilder, (ServiceConfigBuilder and EARConfigBuilder), so how is the configID being retrieved? Where is the getConfigurationID implementation for the other plan types?


Object plan = null;
           ConfigurationBuilder builder = null;
            for (Iterator i = builders.iterator(); i.hasNext();) {
                ConfigurationBuilder candidate = (ConfigurationBuilder) i.next();
                System.out.println("***********" + candidate.getClass().getName());
                plan = candidate.getDeploymentPlan(planFile, module, idBuilder);
                if (plan != null) {
                    builder = candidate;
                    break;
                }
            }
            if (builder == null) {
                throw new DeploymentException("Cannot deploy the requested application module because no deployer is able to handle it. " +
                        " This can happen if you have omitted the J2EE deployment descriptor, disabled a deployer module, or if, for example, you are trying to deploy an" +
                        " EJB module on a minimal Geronimo server that does not have EJB support installed.  (" +
                        (planFile == null ? "" : "planFile=" + planFile.getAbsolutePath()) +
                        (moduleFile == null ? "" : (planFile == null ? "" : ", ") + "moduleFile=" + moduleFile.getAbsolutePath()) + ")");
            }

            Artifact configID = builder.getConfigurationID(plan, module, idBuilder);

Thanks

That code's from Deployer which doesn't know anything about xml or plans or anything like that.  All the ConfigBuilders and ModuleBuilders have code that extracts the Enviroment element, typicaly like

        EnvironmentType environmentType = gerConnector.getEnvironment();
        Environment environment = EnvironmentBuilder.buildEnvironment(environmentType, defaultEnvironment);


However you may find it easier to do something more generic like
QNameSet ENV_QNAMESET = EnvironementDocument.type.getDocumentElementQName();

....

XmlObject untypedEnv = plan.selectChildren(ENV_QNAMESET);
EnvironmentType env = (EnvironmentType)untypedEnv.changeType(EnvironmentType.type);

Sometimes it's hard to convince xmlbeans to change the type correctly, you get null out of changeType.  In that case I use

env = (EnvironemntType)untypedEnv.copy().changeTYpe(EnvironmentTYpe.type);

but then changes you make to env won't be reflected in the original XmlObject or written back into the xml if you save.  It's possible to get around this.... but if changeType works without copying do that.

thanks
david jencks


-sachin



Reply via email to