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@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@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?