I've been trying to marshal an AbstractKernelDeployment without success:
AbstractKernelDeployment deployment = new AbstractKernelDeployment();
| AbstractBeanMetaData beanMetaData = new AbstractBeanMetaData();
| beanMetaData.setBean(Test.class.getName());
| beanMetaData.setName("test");
| List<BeanMetaDataFactory> beanFactories = new
ArrayList<BeanMetaDataFactory>();
| beanFactories.add(beanMetaData);
| deployment.setBeanFactories(beanFactories);
| MarshallerImpl marshaller = new MarshallerImpl();
| SchemaBindingResolver resolver =
SingletonSchemaResolverFactory.getInstance().getSchemaBindingResolver();
| marshaller.setSchemaResolver(resolver);
| StringWriter writer = new StringWriter();
|
| URL url =
Test.class.getClassLoader().getResource("schema/bean-deployer_2_0.xsd");
|
| marshaller.marshal(url.toString(), null, deployment, writer);
I'm getting this exception:
Exception in thread "main" org.jboss.xb.binding.JBossXBRuntimeException: Missing
value for the required attribute bean of element {urn:jboss:bean-deployer:2.0}lazy
| at
org.jboss.xb.binding.sunday.marshalling.DefaultAttributeMarshaller.marshalValue(DefaultAttributeMarshaller.java:89)
| at
org.jboss.xb.binding.sunday.marshalling.AbstractAttributeMarshaller.marshal(AbstractAttributeMarshaller.java:39)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshalComplexType(MarshallerImpl.java:547)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshalElementType(MarshallerImpl.java:430)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshalElement(MarshallerImpl.java:329)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshalElementOccurence(MarshallerImpl.java:309)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshallInternal(MarshallerImpl.java:215)
| at
org.jboss.xb.binding.sunday.marshalling.MarshallerImpl.marshal(MarshallerImpl.java:150)
| at org.jboss.microcontainer.tools.Test.main(Test.java:69)
Debugging the code, I see that MarshallerImpl (lines 211-216) marshals the deployment by
iterating through the ElementBindings and marshalling the ocurrences of each of one those
elements:
while(elements.hasNext())
| {
| ParticleBinding element = elements.next();
| ctx.particle = element;
| marshalElementOccurence((ElementBinding) element.getTerm(), root, true,
true);
| }
It seems that at some point, between the marshalElementOcurrence() call and the execution
of marshalComplexType(), MarshallerImpl assumes that the element at the stack is a lazy
element instead of a deployment element. Given that it isn't, MarshallerImpl fails to
find the value of the mandatory bean attribute of lazy and throws the exception above.
Taking a look at XsdBinder (lines 476-483), I see that it binds the schema elements with a
minOcurrences of 1:
XSNamedMap elements = model.getComponents(XSConstants.ELEMENT_DECLARATION);
| if (trace)
| log.trace("Model elements: " + types.getLength());
| for(int i = 0; i < elements.getLength(); ++i)
| {
| XSElementDeclaration element = (XSElementDeclaration)elements.item(i);
| bindElement(element, 1, 0, false);
| }
I'm not sure if this has something to do with the problem or not, but it looks weird
from my point of view.
So, am I doing this the wrong way? Or is this a bug?
View the original post :
http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4233925#...
Reply to the post :
http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&a...