You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Willem Jiang <ni...@iona.com> on 2007/07/26 12:07:22 UTC
Question about the spring custom xml parasering in HTTP-JETTY module
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
Re: Question about the spring custom xml parasering in HTTP-JETTY
module
Posted by Willem Jiang <ni...@iona.com>.
Hi
I had resolved this issue by using
JettyHTTPServerEngineBeanDefinitionParser to parse the <engine> element
and call the bean.addPropertyValue("enginesList", list) to inject the
spring instantiated engines to the jetty engine factory.
You can find the codes from this URL[1] .
I must misunderstand the spring file parsing with the customer bean's
object instantiating.
Anyway, now you could set up the CXF standalone Jetty engine's
connector and handlers within CXF spring configuration.
Cheers,
Willem
[1] http://svn.apache.org/viewvc?view=rev&revision=560509
Willem Jiang wrote:
> 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
>