cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Willem Jiang <ning.ji...@iona.com>
Subject Question about the spring custom xml parasering in HTTP-JETTY module
Date Thu, 26 Jul 2007 10:07:22 GMT
Hi,

I am working on adding the some HTTP Jetty Engine configuration support, 
and now fighting with the spring APIs.
My question is how can I get
*<beans:bean class="org.mortbay.jetty.bio.SocketConnector"/>
*the  bean's instance in the * *AbstractBeanDefinitionParser's doParse 
method ?*          *

I changed the  http-jetty.xsd, wanted to add some supports for adding 
connector and handlers by using the spring bean's syntax.

<xs:complexType name="JettyHTTPServerEngineConfigType">
       <xs:sequence>
         <xs:choice minOccurs="0" maxOccurs="1">
          <xs:element name="tlsServerParameters"
                      type="sec:TLSServerParametersType"/>
          <xs:element name="tlsServerParametersRef"
                      type="tns:ParametersRefType"/>
         </xs:choice>
         <xs:choice minOccurs="0" maxOccurs="1">
          <xs:element name="threadingParameters"
                      type="tns:ThreadingParametersType"/>
          <xs:element name="threadingParametersRef"
                      type="tns:ParametersRefType"/>
         </xs:choice>        
        * <xs:element name="connector" type="xsd:anyType" minOccurs="0"/>
         <xs:element name="handlers" type="xsd:anyType" minOccurs="0"/>
         <xs:element name="useSession" type="xsd:boolean" 
minOccurs="0"/>         *
       </xs:sequence>
          <xs:attribute name="port" type="xs:int" use="required"/>
    </xs:complexType>

The Bean's xml
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:beans="http://www.springframework.org/schema/beans"   
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xmlns:h="http://cxf.apache.org/transports/http/configuration"
       xmlns:hj="http://cxf.apache.org/transports/http-jetty/configuration"
       xmlns:sec="http://cxf.apache.org/configuration/security"
       xsi:schemaLocation="
        http://www.springframework.org/schema/beans
            http://www.springframework.org/schema/beans/spring-beans.xsd
        http://cxf.apache.org/configuration/security
            http://cxf.apache.org/schemas/configuration/security.xsd
        http://cxf.apache.org/transports/http/configuration
            http://cxf.apache.org/schemas/configuration/http-conf.xsd
        http://cxf.apache.org/transports/http-jetty/configuration
            http://cxf.apache.org/schemas/configuration/http-jetty.xsd"
 >
<hj:engine-factory bus="cxf">
       <hj:identifiedThreadingParameters id="sampleThreading1">
          <hj:threadingParameters minThreads="111" maxThreads="120"/>
       </hj:identifiedThreadingParameters>
      
       <hj:engine port="9000">
          <hj:threadingParametersRef id="sampleThreading1"/>
       </hj:engine>
      
       <hj:engine port="0">
          <hj:threadingParameters minThreads="99" maxThreads="777"/>
       </hj:engine>
      
       <hj:engine port="9001">
       <hj:connector>
        *     <beans:bean class="org.mortbay.jetty.bio.SocketConnector">
             <beans:property name = "port" value="9001" />*
         </beans:bean>
       </hj:connector>
       <hj:handlers>
            *<beans:bean 
class="org.mortbay.jetty.handler.DefaultHandler"/>         *
       </hj:handlers>
      <hj:sessionSupport> true </hj:sessionSupport>
      </hj:engine>
    </hj:engine-factory>
</beans>

When I try to  parser the connector and handlers parameters ,  I need  
a  way  to get the *<beans:bean ... * represent object instance from the 
parser context.
But when I use the below code to get the handlers list,
 
ctx.getDelegate().parseListElement((Element) element, 
bean.getBeanDefinition());

I just get a bunch of  BeanDefinitionHolders and I can't get the bean's 
represent object instance.
I know I can use the beanFactory.getBean(beanName) to get the bean's 
represent object instance ,but I don't know how to get the beanFactory 
from the parser context.

Can I get the bean's object instance in the AbstractBeanDefinitionParser 
doParse method ?

Maybe I missed some magic things of spring , I am really a new guy to 
using spring.

BTW
I had try to paraser the <hj:engine > element by register another 
JettyHTTPServerEngineBeanDefinitionParser
<hj:engine-factory> 
  <hj:engine>
   </hj:engine>
</hj:engine-factory>

And because engine is in the engine-factory block,  I can't see any 
JettyHTTPServerEngine object created after I used a applicationContext 
to load the bean.xml.
But I can see the JettyHTTPServerEngineFactory's instance is created 
after bean.xml is loaded.

I use the ctx.getDelegate().parseCustomElement(first, 
bean.getBeanDefinition()); to parser the  <hj:engine> element, but I 
don't call the bean.addPropertyReference().
Can I create the JettyHTTPServerEngine instance in the 
JettyHTTPServerEngineFactoryBeanDefinitionParser's doParser method?

Thanks,

Willem

Mime
View raw message