Search code examples
javaspringapachejax-rscxf

Apache cxf jaxrs server ServiceConstructionException


Hi i have write jaxrs apache cxf rest server .previously it works fine.suddenly it didn't start and it gives this error.

Caused by: java.lang.ClassCastException: org.apache.cxf.jaxrs.model.wadl.WadlGenerator cannot be cast to javax.ws.rs.container.ContainerRequestFilter
    at org.apache.cxf.jaxrs.provider.ServerProviderFactory.createWadlGenerator(ServerProviderFactory.java:104)
    at org.apache.cxf.jaxrs.provider.ServerProviderFactory.<init>(ServerProviderFactory.java:95)
    at org.apache.cxf.jaxrs.provider.ServerProviderFactory.initBaseFactory(ServerProviderFactory.java:132)
    at org.apache.cxf.jaxrs.provider.ServerProviderFactory.createInstance(ServerProviderFactory.java:116)
    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.setupFactory(JAXRSServerFactoryBean.java:234)
    at org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:182)

And this is the my spring configuration

<jaxrs:server name="server" address="${url}">
    <jaxrs:serviceBeans>
        <ref bean="serverApi"/>
        <ref bean="swaggerResourceJSON"/>
    </jaxrs:serviceBeans>
    <jaxrs:providers>
        <ref bean="jacksonProvider"/>
        <ref bean="resourceWriter"/>
        <ref bean="apiWriter"/>
        <ref bean="corsFilter"/>
    </jaxrs:providers>
</jaxrs:server>

Is there anyone what is the issue ??


Solution

  • In my case I was running into this problem while trying to test a CXF JAX_RX API. I was running into this problem while trying to create a server in a test situation. I tried a few different approaches...

    This game me the ClassCastException:

    JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
    sf.setTransportId(LocalTransportFactory.TRANSPORT_ID);
    sf.setAddress("api/address");
    sf.setResourceClasses(OurJaxResource.class);
    server = sf.create();
    

    As did this:

    JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
    sf.setResourceClasses(OurJaxResource.class);
    
    List<Object> providers = new ArrayList<Object>();
    sf.setProviders(providers);
    sf.setResourceProvider(OurJaxResource.class, new SingletonResourceProvider(new OurJaxResource(), true));
    sf.setAddress(ENDPOINT_ADDRESS);
    
    server = sf.create();
    

    What ended up working for me to get around that exception was this:

    JAXRSServerFactoryBean sf = new JAXRSServerFactoryBean();
    sf.setBindingId(JAXRSBindingFactory.JAXRS_BINDING_ID);
    sf.setAddress("api/address");
    server = serverFactory.create();
    server.start();
    

    Not sure of your specific situation but hopefully this at least gets you going in the right direction.