You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Benson Margulies <be...@basistech.com> on 2015/08/27 16:02:55 UTC

JAX-RS considering the same bean twice in 3.1.2?

There is one bean with one method named 'runCategorization', but I get
a complaint that it's having trouble making up it's mind, as if I'd
added it twice. The code used from prior versions does add both a
resource class and a service bean for the same thing. Was that always
silly?

3165 [main] WARN  org.apache.cxf.jaxrs.utils.JAXRSUtils  - Both
com.basistech.ws.frontend.service.RaasRsCategorizationService#runCategorization
and com.basistech.ws.frontend.service.RaasRsCategorizationService#runCategorization
are equal candidates for handling the current request which

Here is the setup code:

AbstractRaasRsService raasRsService = new RaasRsPingService(); // some
service or another. Why?
raasRsService.setClientFactory(mockedWsBusClientFactory);
raasRsService.setRequestTracker(mockedRequestTracker);
raasRsService.setLanguageofUseIdentifier(mockedLanguageOfUseIdentifier);
serviceBeans.add(0, raasRsService);

JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
sf.setServiceBeanObjects(serviceBeans);
sf.setResourceClasses(resourceClasses);
sf.setResourceProviders(resourceProviders);
sf.setProvider(new JacksonJaxbJsonProvider(JsonUtils.getObjectMapper(),
        JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS));
sf.setProvider(new JsonExceptionMapper());
sf.setProvider(new WebApplicationExceptionMapper());
sf.setProvider(new GenericExceptionMapper());
sf.setAddress(endpointAddress());
server = sf.create();

and then:

protected void addChildService(Class<? extends AbstractRaasRsService>
clazz) throws Exception {
    AbstractRaasRsService childService = clazz.newInstance();
    childService.setClientFactory(mockedWsBusClientFactory);
    childService.setRequestTracker(mockedRequestTracker);
    serviceBeans.add(childService);
    resourceClasses.add(clazz);
    resourceProviders.add(new SingletonResourceProvider(childService, true));
}

Re: JAX-RS considering the same bean twice in 3.1.2?

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Benson
Yes, this a new warning in 3.1.2 as suggested by Romain, to avoid the 
confusing results when two resource methods are completely equal candidates.
In your case below CXF treats the object and the class as two separate 
resources, it can be that an instance is setting some properties that 
are not enabled otherwise, etc... This is also done in few cases in TCK 
tests as far as I recall, so leaving a single setter should do...

Thanks, Sergey




On 27/08/15 15:02, Benson Margulies wrote:
> There is one bean with one method named 'runCategorization', but I get
> a complaint that it's having trouble making up it's mind, as if I'd
> added it twice. The code used from prior versions does add both a
> resource class and a service bean for the same thing. Was that always
> silly?
>
> 3165 [main] WARN  org.apache.cxf.jaxrs.utils.JAXRSUtils  - Both
> com.basistech.ws.frontend.service.RaasRsCategorizationService#runCategorization
> and com.basistech.ws.frontend.service.RaasRsCategorizationService#runCategorization
> are equal candidates for handling the current request which
>
> Here is the setup code:
>
> AbstractRaasRsService raasRsService = new RaasRsPingService(); // some
> service or another. Why?
> raasRsService.setClientFactory(mockedWsBusClientFactory);
> raasRsService.setRequestTracker(mockedRequestTracker);
> raasRsService.setLanguageofUseIdentifier(mockedLanguageOfUseIdentifier);
> serviceBeans.add(0, raasRsService);
>
> JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
> sf.setServiceBeanObjects(serviceBeans);
> sf.setResourceClasses(resourceClasses);
> sf.setResourceProviders(resourceProviders);
> sf.setProvider(new JacksonJaxbJsonProvider(JsonUtils.getObjectMapper(),
>          JacksonJaxbJsonProvider.DEFAULT_ANNOTATIONS));
> sf.setProvider(new JsonExceptionMapper());
> sf.setProvider(new WebApplicationExceptionMapper());
> sf.setProvider(new GenericExceptionMapper());
> sf.setAddress(endpointAddress());
> server = sf.create();
>
> and then:
>
> protected void addChildService(Class<? extends AbstractRaasRsService>
> clazz) throws Exception {
>      AbstractRaasRsService childService = clazz.newInstance();
>      childService.setClientFactory(mockedWsBusClientFactory);
>      childService.setRequestTracker(mockedRequestTracker);
>      serviceBeans.add(childService);
>      resourceClasses.add(clazz);
>      resourceProviders.add(new SingletonResourceProvider(childService, true));
> }
>


-- 
Sergey Beryozkin

Talend Community Coders
http://coders.talend.com/