1 Reply Latest reply on Apr 1, 2009 1:48 AM by aloubyansky

    Integrating PropertyMetaData into another model

    starksm64

      I tried reusing the mc beans PropertyMetaData/AbstractPropertyMetaData in a custom bean factory model I'm working on

      @JBossXmlSchema(namespace="urn:jboss:proxied-mbean:1.0", elementFormDefault=XmlNsForm.QUALIFIED, replacePropertyRefs=true)
      @XmlRootElement(name="proxied-mbeans")
      @XmlType(name="proxiedMBeanType")
      public class ProxiedMBeanMetaData implements Serializable, BeanMetaDataFactory
      {
       private static final long serialVersionUID = 1;
       private static Logger log = Logger.getLogger(ProxiedMBeanMetaData.class);
      
       private List<MBeanProxyMetaData> proxies;
       private List<String> depends = new ArrayList<String>();
       private MBeanServer server;
      ...
      
      @XmlType(name="proxy")
      public class MBeanProxyMetaData
      {
      ...
       @XmlElement(name="property", type=AbstractPropertyMetaData.class)
       public List<PropertyMetaData> getProperties()
       {
       return properties;
       }
       public void setProperties(List<PropertyMetaData> properties)
       {
       this.properties = properties;
       }
      


      but when I parse a fragment in a jboss-beans.xml like:
       <proxied-mbeans xmlns="urn:jboss:proxied-mbean:1.0">
       <depend>WebServer</depend>
       <proxy>
       <delegate-class>org.jboss.web.tomcat.service.management.ConnectorBean</delegate-class>
       <target-name>jboss.web:type=GlobalRequestProcessor,*</target-name>
       <target-interface>org.jboss.web.tomcat.service.management.IConnector</target-interface>
       <annotation>@org.jboss.managed.api.annotation.ManagementObject(componentType=@org.jboss.managed.api.annotation.ManagementComponent(type = "MBean", subtype = "Web:GlobalRequestProcessor"),isRuntime=true)</annotation>
       </proxy>
       <proxy>
       <delegate-class>org.jboss.web.tomcat.service.management.Host</delegate-class>
       <target-name>jboss.web:host=localhost,type=Host</target-name>
       <target-interface>org.jboss.web.tomcat.service.management.IHost</target-interface>
       <annotation>@org.jboss.managed.api.annotation.ManagementObject(name="jboss.web:host=localhost,type=Host", componentType=@org.jboss.managed.api.annotation.ManagementComponent(type = "MBean", subtype = "Web:Host"),isRuntime=true)</annotation>
       <property name="mbeanNameAsString">jboss.web:host=localhost,type=Host</property>
       </proxy>
       </proxied-mbeans>
      


      the following exception occurs that I don't understand:
      Caused by: org.jboss.xb.binding.JBossXBException: Failed to parse source: The type of the attribute search must be simple or complex with a value adapter: org.jboss.xb.binding.sunday.unmarshalling.TypeBinding@809011[null]
      at org.jboss.beans.metadata.plugins.AbstractDependencyValueMetaData.search
      at org.jboss.beans.metadata.plugins.AbstractClassLoaderMetaData.classLoader
      at org.jboss.beans.metadata.plugins.AbstractBeanMetaData.classLoader
      at org.jboss.beans.metadata.plugins.AbstractPropertyMetaData.value
      at org.jboss.system.metadata.MBeanProxyMetaData.properties
      at org.jboss.system.metadata.ProxiedMBeanMetaData.proxies
      at org.jboss.system.metadata.ProxiedMBeanMetaData
       at org.jboss.xb.binding.parser.sax.SaxJBossXBParser.parse(SaxJBossXBParser.java:203)
       at org.jboss.xb.binding.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:168)
       at org.jboss.deployers.vfs.spi.deployer.JBossXBDeployerHelper.parse(JBossXBDeployerHelper.java:199)
       at org.jboss.deployers.vfs.spi.deployer.JBossXBDeployerHelper.parse(JBossXBDeployerHelper.java:170)
       at org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer.parse(SchemaResolverDeployer.java:132)
       at org.jboss.deployers.vfs.spi.deployer.SchemaResolverDeployer.parse(SchemaResolverDeployer.java:118)
       at org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer.parseAndInit(AbstractVFSParsingDeployer.java:256)
       at org.jboss.deployers.vfs.spi.deployer.AbstractVFSParsingDeployer.parse(AbstractVFSParsingDeployer.java:239)
      


      I don't see how the AbstractPropertyMetaData.value property relates to AbstractBeanMetaData.classLoader?



        • 1. Re: Integrating PropertyMetaData into another model
          aloubyansky

          This error should happen during binding, it's not an XML parsing error.

          The relation is not between AbstractPropertyMetaData.value and AbstractBeanMetaData.classLoader but between AbstractPropertyMetaData.value and AbstractBeanMetaData.
          The error shows a binding stack: binding property value triggered binding of bean metadata which has classLoader.

          Java properties bound to schema attributes are expected to be of simple types. The attribute search is not of a simple type. And XB is asking for an adapter.