4 Replies Latest reply on Nov 22, 2007 6:11 PM by aloubyansky

    Problem with type from parent schema not properly picked up

    kabirkhan

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