[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