[jboss-dev-forums] [Design the new POJO MicroContainer] - Re: Imposed ordering of elements

kabir.khan@jboss.com do-not-reply at jboss.com
Thu May 7 13:56:04 EDT 2009


Coming back to this a number of my tests are failing again. When parsing the following xml


  | <deployment xmlns="urn:jboss:bean-deployer:2.0">
  | 
  |    <bean name="AspectManager" class="org.jboss.aop.AspectManager">
  |       <constructor factoryClass="org.jboss.aop.AspectManager" factoryMethod="instance"/>
  |    </bean>
  | 
  |    <aspect xmlns="urn:jboss:aop-beans:1.0" name="InterceptedAdvice" class="org.jboss.test.microcontainer.support.TestAspect"/> <!-- Line 9 -->
  |    
  |    ...   
  | </deployment>
  | 

It falls over with the following exception

  | org.jboss.xb.binding.JBossXBException: Failed to parse source: file:/Users/kabir/sourcecontrol/microcontainer/Branch_2_0/subversion/aop-mc-int/target/test-classes/org/jboss/test/microcontainer/test/SimpleAspectTestCase.xml at 9,127
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:177)
  | ...
  | Caused by: org.jboss.xb.binding.JBossXBRuntimeException: Property order is not specified for type org.jboss.aop.microcontainer.beans.metadata.AnnotationOverrideBeanMetaDataFactory bound to a sequence. Property order can be specified using @XmlTy
  | pe.propOrder or @XmlAccessorOrder. List of properties: demands start classLoader installs properties uninstalls annotations constructor create installCallbacks beans supplies uninstallCallbacks depends classShortName aliases
  | at org.jboss.aop.microcontainer.beans.metadata.AOPDeployment.beanFactories
  | at org.jboss.aop.microcontainer.beans.metadata.AOPDeployment
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.rethrowWithLocation(JBossXBNoSchemaBuilder.java:2018)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElementBinding(JBossXBNoSchemaBuilder.java:346)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElements(JBossXBNoSchemaBuilder.java:321)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.build(JBossXBNoSchemaBuilder.java:232)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:291)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:181)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:160)
  |         at org.jboss.xb.binding.resolver.AbstractMutableSchemaResolver.resolve(AbstractMutableSchemaResolver.java:261)
  |         at org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding.getElement(WildcardBinding.java:174)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding$1.startElement(SequenceBinding.java:276)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding$1.startElement(SequenceBinding.java:223)
  |         at org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding$Cursor.startElement(ModelGroupBinding.java:220)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.startElement(SundayContentHandler.java:423)
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser$DelegatingContentHandler.startElement(SaxJBossXBParser.java:401)
  |         at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
  |         at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
  |         at org.apache.xerces.xinclude.XIncludeHandler.emptyElement(Unknown Source)
  |         at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
  |         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
  |         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
  |         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  |         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  |         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
  |         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
  |         at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:173)
  |         ... 22 more
  | Caused by: org.jboss.xb.binding.JBossXBRuntimeException: Property order is not specified for type org.jboss.aop.microcontainer.beans.metadata.AnnotationOverrideBeanMetaDataFactory bound to a sequence. Property order can be specified using @XmlTy
  | pe.propOrder or @XmlAccessorOrder. List of properties: demands start classLoader installs properties uninstalls annotations constructor create installCallbacks beans supplies uninstallCallbacks depends classShortName aliases
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.assertPropOrderNotRequired(JBossXBNoSchemaBuilder.java:1278)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateType(JBossXBNoSchemaBuilder.java:1071)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:779)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:767)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateTypeBinding(JBossXBNoSchemaBuilder.java:523)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.resolveTypeBinding(JBossXBNoSchemaBuilder.java:482)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.bindProperty(JBossXBNoSchemaBuilder.java:1684)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateType(JBossXBNoSchemaBuilder.java:1118)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:779)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:767)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateTypeBinding(JBossXBNoSchemaBuilder.java:523)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.resolveTypeBinding(JBossXBNoSchemaBuilder.java:482)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createElementBinding(JBossXBNoSchemaBuilder.java:361)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElementBinding(JBossXBNoSchemaBuilder.java:341)
  |         ... 46 more
  | 
This seems to be on first access to anything within the "urn:jboss:aop-beans:1.0" schema, and I believe it is from trying to parse the schema. Here is the top-level class:

  | @ManagementObject(properties = ManagementProperties.EXPLICIT) // TODO - explicitly add props we want to manage 
  | @JBossXmlSchema(namespace="urn:jboss:aop-beans:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
  | @XmlRootElement(name="aop")
  | @XmlType(propOrder={"annotations", "classLoader", "beanFactories", "create", "start", "stop", "destroy", "aliases"})
  | public class AOPDeployment extends AbstractKernelDeployment
  | {
  |    private static final long serialVersionUID = 1L;
  |    
  |    
  |    @XmlElements
  |    ({
  |       @XmlElement(name="annotation", type=AnnotationOverrideBeanMetaDataFactory.class),
  |       @XmlElement(name="annotation-introduction", type=AnnotationIntroductionBeanMetaDataFactory.class),
  |       @XmlElement(name="arrayreplacement", type=ArrayReplacementBeanMetaDataFactory.class),
  |       //Many more!
  |    })
  |    @XmlAnyElement
  |    public void setBeanFactories(List<BeanMetaDataFactory> beanFactories)
  |    {
  |       super.setBeanFactories(beanFactories);
  |    }   
  | }
  | 

AnnotationOverrideBeanMetaDataFactory:

  | @JBossXmlSchema(namespace="urn:jboss:aop-beans:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
  | @XmlRootElement(name="annotation")
  | public class AnnotationOverrideBeanMetaDataFactory extends AbstractAnnotationBeanMetaDataFactory
  | {
  | 
  |    private static final long serialVersionUID = 1L;
  | 
  |    @Override
  |    protected String getBeanClassName()
  |    {
  |       return AnnotationOverride.class.getName();
  |    }
  | }
  | 

AbstractAnnotationBeanMetaDataFactory

  | public abstract class AbstractAnnotationBeanMetaDataFactory extends AspectManagerAwareBeanMetaDataFactory
  | {
  |    private static final long serialVersionUID = 1L;
  | 
  |    String expr;
  |    
  |    boolean invisible;
  |    
  |    String annotation;
  | 
  |    public String getExpr()
  |    {
  |       return expr;
  |    }
  | 
  |    @XmlAttribute
  |    public void setExpr(String expr)
  |    {
  |       this.expr = expr;
  |    }
  | 
  |    public boolean isInvisible()
  |    {
  |       return invisible;
  |    }
  | 
  |    @XmlAttribute
  |    public void setInvisible(boolean invisible)
  |    {
  |       this.invisible = invisible;
  |    }
  | 
  |    public String getAnnotation()
  |    {
  |       return annotation;
  |    }
  | 
  |    @XmlValue
  |    public void setAnnotation(String annotation)
  |    {
  |       this.annotation = annotation;
  |    }
  | 
  |    @Override
  |    public List<BeanMetaData> getBeans()
  |    {
  |       ArrayList<BeanMetaData> result = new ArrayList<BeanMetaData>();
  |       if (name == null)
  |       {
  |          name = GUID.asString();
  |       }
  |       BeanMetaDataBuilder builder = BeanMetaDataBuilder.createBuilder(name, getBeanClassName());
  |       builder.addPropertyMetaData("invisible", invisible);
  |       builder.addPropertyMetaData("expr", expr);
  |       builder.addPropertyMetaData("annotation", annotation);
  |       
  |       setAspectManagerProperty(builder);
  |       
  |       result.add(builder.getBeanMetaData());
  |       
  |       return result;
  |    }
  | 
  |    
  |    protected abstract String getBeanClassName();
  | }
  | 
AspectManagerAwareBeanMetaDataFactory

  | public abstract class AspectManagerAwareBeanMetaDataFactory extends GenericBeanFactoryMetaData
  | {
  |    //Setters to handle the aspectmanager to add the aop metadata to
  | }
  | 

Then from MC we have GenericBeanFactoryMetaData

  | @XmlRootElement(name="beanfactory")
  | @XmlType(name="beanfactoryType", propOrder={"aliases", "annotations", "classLoader", "constructor", "properties", "create", "start", "depends", "demands", "supplies", "installs", "uninstalls", "installCallbacks", "uninstallCallbacks"})
  | public class GenericBeanFactoryMetaData extends JBossObject implements BeanMetaDataFactory, Serializable
  | {
  |    ...
  | }
  | 

If I add @XmlType(propOrder={})to AnnotationOverrideBeanMetaDataFactory:

  | @JBossXmlSchema(namespace="urn:jboss:aop-beans:1.0", elementFormDefault=XmlNsForm.QUALIFIED)
  | @XmlRootElement(name="annotation")
  | @XmlType(propOrder={})
  | public class AnnotationOverrideBeanMetaDataFactory extends AbstractAnnotationBeanMetaDataFactory
  | {
  | 
  |    private static final long serialVersionUID = 1L;
  | 
  |    @Override
  |    protected String getBeanClassName()
  |    {
  |       return AnnotationOverride.class.getName();
  |    }
  | }
  | 

I then get a new error

  | org.jboss.xb.binding.JBossXBException: Failed to parse source: file:/Users/kabir/sourcecontrol/microcontainer/Branch_2_0/subversion/aop-mc-int/target/test-classes/org/jboss/test/microcontainer/test/SimpleAspectTestCase.xml at 9,127
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:177)
  | Caused by: org.jboss.xb.binding.JBossXBRuntimeException: Property order is not specified for type org.jboss.beans.metadata.spi.BeanMetaData bound to a sequence. Property order can be specified using @XmlType.propOrder or @XmlAccessorOrder. List of
  |  properties: demands start classLoader installs properties related uninstalls destroy annotations accessMode errorHandlingMode constructor create autowireType installCallbacks name supplies mode uninstallCallbacks bean depends stop abstract autowi
  | reCandidate parent aliases
  | at org.jboss.aop.microcontainer.beans.metadata.AnnotationOverrideBeanMetaDataFactory.beans
  | at org.jboss.aop.microcontainer.beans.metadata.AOPDeployment.beanFactories
  | at org.jboss.aop.microcontainer.beans.metadata.AOPDeployment
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.rethrowWithLocation(JBossXBNoSchemaBuilder.java:2018)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElementBinding(JBossXBNoSchemaBuilder.java:346)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElements(JBossXBNoSchemaBuilder.java:321)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.build(JBossXBNoSchemaBuilder.java:232)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:291)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:181)
  |         at org.jboss.xb.builder.JBossXBBuilder.build(JBossXBBuilder.java:160)
  |         at org.jboss.xb.binding.resolver.AbstractMutableSchemaResolver.resolve(AbstractMutableSchemaResolver.java:261)
  |         at org.jboss.xb.binding.sunday.unmarshalling.WildcardBinding.getElement(WildcardBinding.java:174)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding$1.startElement(SequenceBinding.java:276)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SequenceBinding$1.startElement(SequenceBinding.java:223)
  |         at org.jboss.xb.binding.sunday.unmarshalling.ModelGroupBinding$Cursor.startElement(ModelGroupBinding.java:220)
  |         at org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.startElement(SundayContentHandler.java:423)
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser$DelegatingContentHandler.startElement(SaxJBossXBParser.java:401)
  |         at org.apache.xerces.parsers.AbstractSAXParser.startElement(Unknown Source)
  |         at org.apache.xerces.parsers.AbstractXMLDocumentParser.emptyElement(Unknown Source)
  |         at org.apache.xerces.xinclude.XIncludeHandler.emptyElement(Unknown Source)
  |         at org.apache.xerces.impl.XMLNSDocumentScannerImpl.scanStartElement(Unknown Source)
  |         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl$FragmentContentDispatcher.dispatch(Unknown Source)
  |         at org.apache.xerces.impl.XMLDocumentFragmentScannerImpl.scanDocument(Unknown Source)
  |         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  |         at org.apache.xerces.parsers.XML11Configuration.parse(Unknown Source)
  |         at org.apache.xerces.parsers.XMLParser.parse(Unknown Source)
  |         at org.apache.xerces.parsers.AbstractSAXParser.parse(Unknown Source)
  |         at org.apache.xerces.jaxp.SAXParserImpl$JAXPSAXParser.parse(Unknown Source)
  |         at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:173)
  |         ... 22 more
  | Caused by: org.jboss.xb.binding.JBossXBRuntimeException: Property order is not specified for type org.jboss.beans.metadata.spi.BeanMetaData bound to a sequence. Property order can be specified using @XmlType.propOrder or @XmlAccessorOrder. List of
  |  properties: demands start classLoader installs properties related uninstalls destroy annotations accessMode errorHandlingMode constructor create autowireType installCallbacks name supplies mode uninstallCallbacks bean depends stop abstract autowi
  | reCandidate parent aliases
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.assertPropOrderNotRequired(JBossXBNoSchemaBuilder.java:1278)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateType(JBossXBNoSchemaBuilder.java:1071)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:779)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:767)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateTypeBinding(JBossXBNoSchemaBuilder.java:523)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.resolveTypeBinding(JBossXBNoSchemaBuilder.java:482)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.bindProperty(JBossXBNoSchemaBuilder.java:1684)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateType(JBossXBNoSchemaBuilder.java:1118)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:779)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:767)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateTypeBinding(JBossXBNoSchemaBuilder.java:523)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.resolveTypeBinding(JBossXBNoSchemaBuilder.java:482)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.bindProperty(JBossXBNoSchemaBuilder.java:1684)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateType(JBossXBNoSchemaBuilder.java:1118)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:779)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateBean(JBossXBNoSchemaBuilder.java:767)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.generateTypeBinding(JBossXBNoSchemaBuilder.java:523)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.resolveTypeBinding(JBossXBNoSchemaBuilder.java:482)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createElementBinding(JBossXBNoSchemaBuilder.java:361)
  |         at org.jboss.xb.builder.JBossXBNoSchemaBuilder.createRootElementBinding(JBossXBNoSchemaBuilder.java:341)
  |         ... 46 more
  | 

First, I thought it might be due to the @XmlType set in the AnnotationOverrideBeanMetaDataFactory somehow interfering with the one in its superclass GenericBeanFactoryMetaData.

But it looks more likely that is is due to BeanMetaData which is returned by the AnnotationOverrideBeanMetaDataFactory.getBeans() not having @XmlType(propOrder={})? BeanMetaData is an mc spi interface with no xb annotations. The annotations are on impl classes instead, which is probably how it should be?

If my reasoning is correct, how to get around this?

View the original post : http://www.jboss.org/index.html?module=bb&op=viewtopic&p=4229517#4229517

Reply to the post : http://www.jboss.org/index.html?module=bb&op=posting&mode=reply&p=4229517



More information about the jboss-dev-forums mailing list