cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Daniel Kulp <dk...@apache.org>
Subject Re: Spring integration using @Configuration & @ComponentScan annotations
Date Tue, 21 Jan 2014 20:09:10 GMT

What happens if you pass “null” in for the implementor bean?   Looking at the code, that
LOOKS like it should work as there are “if (implementor == null)” type checks all over
the place.   Maybe we’re missing one someplace.

That said, normally we would suggest using the JaxWsServerFactoryBean instead of creating
an EndpointImpl unless you really need the EndpointImpl object for some reason.

Dan



On Jan 21, 2014, at 5:20 AM, Przemysław Bielicki <pbielicki@gmail.com> wrote:

> Hi Guys,
> 
> I need your help. I moved along with my Spring integration and the code I
> showed you works fine but only for Spring beans that are Singletons
> (because they are eagerly created by Spring during the initialization).
> 
> The problem starts when we have @WebService classes that are stateful (in a
> sense that they are of "prototype" scope). It means that Spring does not
> instantiates then automatically - only on demand. That's why  usage of
> BeanPostProcessor is not possible. I have to use BeanFactoryPostProcessor.
> So far, so good. What do I do? I do almost the same thing as before:
> 
>  public void postProcessBeanFactory(ConfigurableListableBeanFactory
> beanFactory) throws BeansException {
>    for (String beanName : beanFactory.getBeanDefinitionNames()) {
>      BeanDefinition beanDefinition =
> beanFactory.getBeanDefinition(beanName);
> 
>     // ... details
> 
>      if (isWebService(beanClass)) {
>        Bus bus = beanFactory.getBean(Bus.DEFAULT_BUS_ID, Bus.class);
>        EndpointImpl endpoint = new EndpointImpl(bus,
> *beanFactory.getBean(beanName)*, new SpringServerFactoryBean(beanName));
>        endpoint.setAddress(blahblah);
>        endpoint.getInInterceptors().addAll(blahblah);
>        endpoint.getOutInterceptors().addAll(blahblah);
>        bus.setExtension(blahblah);
>        endpoint.publish();
>    }
> 
> But now I have to tell CXF how to obtain an instance of the service when
> there is a client call. I do it passing SpringServerFactoryBean that knows
> how to get the service object from Spring context.
> SpringServerFactoryBean is my own simple class that instantiates web
> service object on demand:
> 
> import org.apache.cxf.jaxws.JAXWSMethodInvoker;
> import org.apache.cxf.jaxws.JaxWsServerFactoryBean;
> import org.apache.cxf.service.invoker.Invoker;
> import org.apache.cxf.service.invoker.SpringBeanFactory;
> 
> public class SpringServerFactoryBean extends JaxWsServerFactoryBean {
> 
>  private final String beanName;
> 
>  public SpringServerFactoryBean(String beanName) {
>    this.beanName = beanName;
>  }
> 
>  @Override
>  protected Invoker createInvoker() {
>    return new JAXWSMethodInvoker(new SpringBeanFactory(beanName));
>  }
> }
> 
> It would fly and work nicely but there is one big issue with
> org.apache.cxf.jaxws.EndpointImpl.
> Why does it need an implementor object? To publish the service you don't
> need the implementation instance - you need just a class metadata to check
> what methods are public, what are their parameters, etc. This is big issue
> because in BeanFactoryPostProcessor you are allowed to call
> *beanFactory.getBean(beanName).
> *
> 
> Is it possible to modify or extend EndpointImpl so that it does not need
> the implementor? It is able to get the implementor later (when it's really
> needed) using JaxWsServerFactoryBean.
> 
> I'm not sure my problem is clear enough. If not I'm eager to explain in
> details.
> 
> Best regards,
> Przemyslaw
> 
> 
> On Mon, Dec 9, 2013 at 4:50 PM, Przemysław Bielicki <pbielicki@gmail.com>wrote:
> 
>> I just created a jira issue:
>> https://issues.apache.org/jira/browse/CXF-5448
>> 
>> I hope it's clear.
>> 
>> Cheers,
>> Przemyslaw
>> 
>> 
>> On Mon, Dec 9, 2013 at 3:14 PM, cschneider [via CXF] <
>> ml-node+s547215n5737562h75@n5.nabble.com> wrote:
>> 
>>> We have some factory classes but they are often not as convenient to use
>>> as the namespaces.
>>> 
>>> In any case it would be interesting to see what you did. Can you open a
>>> jira and attach your code as a patch?
>>> If it is just a few lines you can also just paste the code or point to a
>>> github repo or similar.
>>> 
>>> Christian
>>> 
>>> On 09.12.2013 15:05, pbielicki wrote:
>>> 
>>>> Hi,
>>>> 
>>>> in order to integrate CXF with Spring developers need to go through an
>>> XML
>>>> file, right (i.e.
>>>> http://cxf.apache.org/docs/writing-a-service-with-spring.html)?
>>>> 
>>>> Is it possible out-of-the box to integrate CXF with Spring using
>>>> annotation-driven context configuration? I am talking about
>>>> @org.springframework.context.annotation.Configuration and
>>>> @org.springframework.context.annotation.ComponentScan annotations
>>>> (
>>> http://docs.spring.io/spring/docs/3.2.x/javadoc-api/org/springframework/context/annotation/Configuration.html).
>>> 
>>>> Are they supported by CXF integration?
>>>> 
>>>> The goal is to avoid any XML configuration.
>>>> 
>>>> If it's not part of CXF I may help because I just implemented such
>>>> integration (few lines of code, really), and I find it pretty useful.
>>>> 
>>>> Please let me know what you think? I wanted to open a JIRA issue
>>> straight
>>>> away but I prefer to ask you before.
>>>> 
>>>> Cheers,
>>>> Przemyslaw Bielicki
>>>> 
>>>> 
>>>> 
>>>> --
>>>> View this message in context:
>>> http://cxf.547215.n5.nabble.com/Spring-integration-using-Configuration-ComponentScan-annotations-tp5737561.html
>>>> Sent from the cxf-dev mailing list archive at Nabble.com.
>>> 
>>> 
>>> --
>>> Christian Schneider
>>> http://www.liquid-reality.de
>>> 
>>> Open Source Architect
>>> http://www.talend.com
>>> 
>>> 
>>> 
>>> ------------------------------
>>> If you reply to this email, your message will be added to the
>>> discussion below:
>>> 
>>> http://cxf.547215.n5.nabble.com/Spring-integration-using-Configuration-ComponentScan-annotations-tp5737561p5737562.html
>>> To unsubscribe from Spring integration using @Configuration &
>>> @ComponentScan annotations, click here<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=unsubscribe_by_code&node=5737561&code=cGJpZWxpY2tpQGdtYWlsLmNvbXw1NzM3NTYxfC0xODU3NDYzNDAz>
>>> .
>>> NAML<http://cxf.547215.n5.nabble.com/template/NamlServlet.jtp?macro=macro_viewer&id=instant_html%21nabble%3Aemail.naml&base=nabble.naml.namespaces.BasicNamespace-nabble.view.web.template.NabbleNamespace-nabble.view.web.template.NodeNamespace&breadcrumbs=notify_subscribers%21nabble%3Aemail.naml-instant_emails%21nabble%3Aemail.naml-send_instant_email%21nabble%3Aemail.naml>
>>> 
>> 
>> 

-- 
Daniel Kulp
dkulp@apache.org - http://dankulp.com/blog
Talend Community Coder - http://coders.talend.com


Mime
View raw message