[jboss-dev-forums] [Design of JBossXB] - Problem with type from parent schema not properly picked up
kabir.khan@jboss.com
do-not-reply at jboss.com
Thu Nov 22 10:54:42 EST 2007
With the following schema and XML I get a validation exception
| <?xml version="1.0" encoding="UTF-8"?>
| <!-- A prototype xsd schema for javabeans
| $Id: aop-beans_1_0.xsd 64914 2007-08-28 15:27:14Z alesj $
| -->
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
| targetNamespace="urn:jboss:aop-beans:1.0"
| xmlns="urn:jboss:aop-beans:1.0"
| xmlns:mc="urn:jboss:bean-deployer:2.0"
| elementFormDefault="qualified"
| attributeFormDefault="unqualified"
| version="1.0"
| >
|
| <xsd:import namespace="urn:jboss:bean-deployer:2.0"/>
|
| <xsd:complexType name="managerAwareType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| Base type for all things that need installing in the aspect manager
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| <xsd:attribute name="manager-bean" type="xsd:string" use="optional"/>
| <xsd:attribute name="manager-property" type="xsd:string" use="optional"/>
| </xsd:complexType>
|
| <xsd:element name="aspect" type="aspectOrInterceptorType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| An aspect
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| </xsd:element>
|
| <xsd:complexType name="aspectOrInterceptorType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| aspects or interceptors
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| <xsd:complexContent>
| <xsd:extension base="managerAwareType">
| <xsd:choice minOccurs="0" maxOccurs="1">
| <xsd:element name="property" type="mc:propertyType" minOccurs="0" maxOccurs="unbounded"/>
| </xsd:choice>
| <xsd:attribute name="name" type="xsd:string" use="optional"/>
| <xsd:attribute name="class" type="xsd:string" use="optional"/>
| <xsd:attribute name="scope" type="xsd:string" use="optional"/>
| <xsd:attribute name="factory" type="xsd:string" use="optional"/>
| </xsd:extension>
| </xsd:complexContent>
| </xsd:complexType>
| ....
| </xsd:schema>
|
| <?xml version="1.0" encoding="UTF-8"?>
|
| <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" class="org.jboss.test.microcontainer.beans2.TestAspectWithDependency">
| <property name="dependency"><inject bean="Dependency"/></property>
| </aspect>
| </deployment>
|
|
| org.jboss.xb.binding.JBossXBException: Failed to parse source: file:/C:/cygwin/home/Kabir/sourcecontrol/microcontainer/aop-mc-int/target/tests-classes/org/jboss/test/microcontainer/beans2/test/AspectWithDependencyAopTestCaseNotAutomatic1.xml at 10,60
| at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:184)
| at org.jboss.xb.binding.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:139)
| at org.jboss.kernel.plugins.deployment.xml.BasicXMLDeployer.deploy(BasicXMLDeployer.java:147)
| at org.jboss.test.kernel.junit.MicrocontainerTestDelegate.deploy(MicrocontainerTestDelegate.java:255)
| at org.jboss.test.kernel.junit.MicrocontainerTest.deploy(MicrocontainerTest.java:168)
| at org.jboss.test.microcontainer.beans2.test.AspectWithDependencyTest.testInterceptorWithDependencyCorrectOrder(AspectWithDependencyTest.java:55)
| at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
| at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
| at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
| at java.lang.reflect.Method.invoke(Method.java:585)
| at junit.framework.TestCase.runTest(TestCase.java:154)
| at junit.framework.TestCase.runBare(TestCase.java:127)
| at junit.framework.TestResult$1.protect(TestResult.java:106)
| at junit.framework.TestResult.runProtected(TestResult.java:124)
| at junit.framework.TestResult.run(TestResult.java:109)
| at junit.framework.TestCase.run(TestCase.java:118)
| at junit.framework.TestSuite.runTest(TestSuite.java:208)
| at junit.framework.TestSuite.run(TestSuite.java:203)
| at junit.extensions.TestDecorator.basicRun(TestDecorator.java:22)
| at junit.extensions.TestSetup$1.protect(TestSetup.java:19)
| at junit.framework.TestResult.runProtected(TestResult.java:124)
| at junit.extensions.TestSetup.run(TestSetup.java:23)
| at org.eclipse.jdt.internal.junit.runner.junit3.JUnit3TestReference.run(JUnit3TestReference.java:130)
| at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:460)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:673)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:386)
| at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:196)
| Caused by: org.jboss.xb.binding.JBossXBRuntimeException: {urn:jboss:aop-beans:1.0}inject not found as a child of {urn:jboss:aop-beans:1.0}property
| at org.jboss.xb.binding.sunday.unmarshalling.SundayContentHandler.startElement(SundayContentHandler.java:370)
| at org.jboss.xb.binding.parser.sax.SaxJBossXBParser$DelegatingContentHandler.startElement(SaxJBossXBParser.java:402)
| 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:180)
| ... 27 more
|
The bean deployer schema contains the propertyType definition and works with inject, null etc. Am I referencing it wrong?
The old aop schema worked, but did things slightly differently, to do this with the new schema this would probably look something like
| <?xml version="1.0" encoding="UTF-8"?>
| <!-- A prototype xsd schema for javabeans
| $Id: aop-beans_1_0.xsd 64914 2007-08-28 15:27:14Z alesj $
| -->
| <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
| targetNamespace="urn:jboss:aop-beans:1.0"
| xmlns="urn:jboss:aop-beans:1.0"
| xmlns:mc="urn:jboss:bean-deployer:2.0"
| elementFormDefault="qualified"
| attributeFormDefault="unqualified"
| version="1.0"
| >
|
| <xsd:import namespace="urn:jboss:bean-deployer:2.0"/>
|
| <xsd:complexType name="managerAwareType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| Base type for all things that need installing in the aspect manager
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| <xsd:complexContent>
| <xsd:extension base="mc:beanfactoryType">
| <xsd:attribute name="manager-bean" type="xsd:string" use="optional"/>
| <xsd:attribute name="manager-property" type="xsd:string" use="optional"/>
| </xsd:extension>
| </xsd:complexContent>
| </xsd:complexType>
|
| <xsd:element name="aspect" type="aspectOrInterceptorType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| An aspect
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| </xsd:element>
|
| <xsd:complexType name="aspectOrInterceptorType">
| <xsd:annotation>
| <xsd:documentation>
| <![CDATA[
| aspects or interceptors
| ]]>
| </xsd:documentation>
| </xsd:annotation>
| <xsd:complexContent>
| <xsd:extension base="managerAwareType">
| <xsd:attribute name="name" type="xsd:string" use="optional"/>
| <xsd:attribute name="class" type="xsd:string" use="optional"/>
| <xsd:attribute name="scope" type="xsd:string" use="optional"/>
| <xsd:attribute name="factory" type="xsd:string" use="optional"/>
| </xsd:extension>
| </xsd:complexContent>
| </xsd:complexType>
| ....
| </xsd:schema>
|
However this does not work for me since the beans schema specifies that the beanFactoryType must have a class attribute?
| <xsd:complexType name="beanfactoryType">
| <xsd:annotation>
| <xsd:documentation>
| </xsd:documentation>
| </xsd:annotation>
| <xsd:sequence>
| <xsd:element name="alias" type="aliasType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="classloader" type="classloaderType" minOccurs="0"/>
| <xsd:element name="constructor" type="constructorType" minOccurs="0"/>
| <xsd:element name="property" type="propertyType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="create" type="lifecycleType" minOccurs="0"/>
| <xsd:element name="start" type="lifecycleType" minOccurs="0"/>
| <xsd:element name="depends" type="dependsType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="demand" type="demandType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="supply" type="supplyType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="install" type="installType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="uninstall" type="installType" minOccurs="0" maxOccurs="unbounded"/>
| <!--
| <xsd:element name="incallback" type="callbackType" minOccurs="0" maxOccurs="unbounded"/>
| <xsd:element name="uncallback" type="callbackType" minOccurs="0" maxOccurs="unbounded"/>
| -->
| </xsd:sequence>
| <xsd:attribute name="name" type="xsd:string" use="optional"/>
| <xsd:attribute name="class" type="xsd:token" use="required"/>
| </xsd:complexType>
|
|
And I need to be able to do things like
| <?xml version="1.0" encoding="UTF-8"?>
|
| <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" factory="org.acme.SomeFactory">
| <property name="dependency"><inject bean="Dependency"/></property>
| </aspect>
| </deployment>
|
|
What can I do?
View the original post : http://www.jboss.com/index.html?module=bb&op=viewtopic&p=4107139#4107139
Reply to the post : http://www.jboss.com/index.html?module=bb&op=posting&mode=reply&p=4107139
More information about the jboss-dev-forums
mailing list