You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cxf.apache.org by Tanuja S <sh...@gmail.com> on 2022/10/23 15:19:03 UTC

Reg: REST API documentation for cxf-2.4.6 version

Hello everyone,

My project uses cxf-2.4.6 version. There is no REST API documentation as of
date.
I plan to create one and have been exploring various options for this
version.

Official documentation mentions that SwaggerFeature needs to be used for
this version.
https://cwiki.apache.org/confluence/display/CXF20DOC/Swagger2Feature

As per the above link,

*For generating Swagger 1.2
<https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md>
documents,
you can use SwaggerFeature instead of Swagger2Feature (for CXF versions <=
3.1.x).*

But, I am lost here.

Added all the needed jars. Ant is used as a build tool; hence, individual
jars are added manually.

scala-library-2.7.7.jar
swagger-jaxrs_2.10-1.3.13.jar
swagger-ui-2.1.2.jar
swagger-annotations-1.5.2.jar
swagger-jaxrs-1.5.2.jar
cxf-rt-rs-service-description-3.0.0.jar

I've added this bean in the cxfbeans.xml.

     <!-- CXF SwaggerFeature -->
    <bean id="swaggerFeature"
class="org.apache.cxf.jaxrs.swagger.SwaggerFeature">
        <!-- customize some of the properties -->
        <property name="basePath" value=""/>
    </bean>

 <bean class="com.test" id="testClass"/>

<jaxrs:server address="/testService" id="testServiceId">
      <jaxrs:serviceBeans>
            <ref bean="testClass"/>
      </jaxrs:serviceBeans>
     <jaxrs:extensionMappings>
            <entry key="xml" value="application/xml"/>
            <entry key="json" value="application/json"/>
      </jaxrs:extensionMappings>
       <jaxrs:features>
            <ref bean="swaggerFeature" />
        </jaxrs:features>
</jaxrs:server>

Now, server doesn't start and I get this exception.

org.springframework.beans.factory.BeanCreationException: Error creating
bean with name ' testServiceId': Invocation of init method failed; nested
exception is org.apache.cxf.service.factory.ServiceConstructionException
 at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
at java.security.AccessController.doPrivileged(Native Method)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
at
org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
at
org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
at
org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
at
org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
at
org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
at
org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
at
org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
at
org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
at
org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
at
org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
at
org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
at
org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
at
org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
Caused by: org.apache.cxf.service.factory.ServiceConstructionException
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:192)
at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
at
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
at
org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
... 24 more
Caused by: java.lang.NullPointerException
at
org.apache.cxf.jaxrs.swagger.SwaggerFeature.calulateDefaultResourcePackage(SwaggerFeature.java:69)
at
org.apache.cxf.jaxrs.swagger.SwaggerFeature.initialize(SwaggerFeature.java:46)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.applyFeatures(JAXRSServerFactoryBean.java:203)
at
org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:180)
... 30 more

Regards,
Sandy

Re: Reg: REST API documentation for cxf-2.4.6 version

Posted by Tanuja S <sh...@gmail.com>.
Thank you for your response, Andriy.

This is an existing application and I am bound by certain limitations
which include not being able to upgrade to any newer version.
This is a POC that I am trying to develop on my own and not a requirement
from the higher ups. Yet, giving my best shot.

How about generating WADL? Postman tool can still import WADL files and
this solves at least half the purpose.
And there are WADL to Swagger conversion tools as well. This would be my
next step in the process provided a WADL file can be generated with Apache
CXF 2.4.6

There are @Descriptions and @Description annotations available and I have
annotated one of the existing REST classes and methods appropriately. But,
how is the WADL file generated? Do I have to follow any steps to create
one? If yes, pls mention those.

I am referring to the following links.

https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-WADL

https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-DocumentingresourceclassesandmethodsingeneratedWADL

On Mon, Oct 24, 2022 at 6:25 AM Andriy Redko <dr...@gmail.com> wrote:

> Hello Tanuja,
>
> The SwaggerFeature was introduced in Apache CXF 3.0 [1], but as far as I
> understand, you are trying to use Apache CXF 2.4.6 and pulling the
> cxf-rt-rs-service-description-3.0.0.jar with it. If that is the case,
> it is not going to work out. The recommendation would be to update to
> one of the supported Apache CXF releases [2].
>
> Thank you.
>
> [1] https://issues.apache.org/jira/browse/CXF-5379
> [2] https://cxf.apache.org/download.html
>
> Best Regards,
>     Andriy Redko
>
> TS> Hello everyone,
>
> TS> My project uses cxf-2.4.6 version. There is no REST API documentation
> as of
> TS> date.
> TS> I plan to create one and have been exploring various options for this
> TS> version.
>
> TS> Official documentation mentions that SwaggerFeature needs to be used
> for
> TS> this version.
> TS> https://cwiki.apache.org/confluence/display/CXF20DOC/Swagger2Feature
>
> TS> As per the above link,
>
> TS> *For generating Swagger 1.2
> TS> <
> https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md>
> TS> documents,
> TS> you can use SwaggerFeature instead of Swagger2Feature (for CXF
> versions <=
> TS> 3.1.x).*
>
> TS> But, I am lost here.
>
> TS> Added all the needed jars. Ant is used as a build tool; hence,
> individual
> TS> jars are added manually.
>
> TS> scala-library-2.7.7.jar
> TS> swagger-jaxrs_2.10-1.3.13.jar
> TS> swagger-ui-2.1.2.jar
> TS> swagger-annotations-1.5.2.jar
> TS> swagger-jaxrs-1.5.2.jar
> TS> cxf-rt-rs-service-description-3.0.0.jar
>
> TS> I've added this bean in the cxfbeans.xml.
>
> TS>      <!-- CXF SwaggerFeature -->
> TS>     <bean id="swaggerFeature"
> TS> class="org.apache.cxf.jaxrs.swagger.SwaggerFeature">
> TS>         <!-- customize some of the properties -->
> TS>         <property name="basePath" value=""/>
> TS>     </bean>
>
> TS>  <bean class="com.test" id="testClass"/>
>
> TS> <jaxrs:server address="/testService" id="testServiceId">
> TS>       <jaxrs:serviceBeans>
> TS>             <ref bean="testClass"/>
> TS>       </jaxrs:serviceBeans>
> TS>      <jaxrs:extensionMappings>
> TS>             <entry key="xml" value="application/xml"/>
> TS>             <entry key="json" value="application/json"/>
> TS>       </jaxrs:extensionMappings>
> TS>        <jaxrs:features>
> TS>             <ref bean="swaggerFeature" />
> TS>         </jaxrs:features>
> TS> </jaxrs:server>
>
> TS> Now, server doesn't start and I get this exception.
>
> TS> org.springframework.beans.factory.BeanCreationException: Error creating
> TS> bean with name ' testServiceId': Invocation of init method failed;
> nested
> TS> exception is
> org.apache.cxf.service.factory.ServiceConstructionException
> TS>  at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
> TS> at java.security.AccessController.doPrivileged(Native Method)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
> TS> at
> TS>
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
> TS> at
> TS>
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
> TS> at
> TS>
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
> TS> at
> TS>
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
> TS> at
> TS>
> org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
> TS> at
> TS>
> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
> TS> at
> TS>
> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
> TS> at
> TS>
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
> TS> at
> TS>
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
> TS> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
> TS> at
> TS>
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
> TS> at
> TS>
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
> TS> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
> TS> at
> TS>
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> TS> at
> TS>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> TS> at java.lang.Thread.run(Thread.java:745)
> TS> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
> TS> at
> TS>
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:192)
> TS> at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
> TS> at
> TS>
> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
> TS> at java.lang.reflect.Method.invoke(Method.java:498)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
> TS> at
> TS>
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
> TS> ... 24 more
> TS> Caused by: java.lang.NullPointerException
> TS> at
> TS>
> org.apache.cxf.jaxrs.swagger.SwaggerFeature.calulateDefaultResourcePackage(SwaggerFeature.java:69)
> TS> at
> TS>
> org.apache.cxf.jaxrs.swagger.SwaggerFeature.initialize(SwaggerFeature.java:46)
> TS> at
> TS>
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.applyFeatures(JAXRSServerFactoryBean.java:203)
> TS> at
> TS>
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:180)
> TS> ... 30 more
>
> TS> Regards,
> TS> Sandy
>
>

Re: Reg: REST API documentation for cxf-2.4.6 version

Posted by Andriy Redko <dr...@gmail.com>.
Hello Tanuja,

Yes, you could use WADL [1], if you would like to auto-generate WADL, please check [2].
Thank you.
 
[1] https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-WADL 
[2] https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-WADLAutoGenerationatRuntime
 
Best Regards,
    Andriy Redko 

> Thank you for your response, Andriy. 

> This is an existing application and I am bound by certain limitations which include not being able to upgrade to any newer version. 
> This is a POC that I am trying to develop on my own and not a requirement from the higher ups. Yet, giving my best shot. 

> How about generating WADL? Postman tool can still import WADL files and this solves at least half the purpose. 
> And there are WADL to Swagger conversion tools as well. This would be my next step in the process provided a WADL file can be generated with Apache CXF 2.4.6 

> There are @Descriptions and @Description annotations available and I have annotated one of the existing REST classes and methods appropriately. But, how is the WADL file generated? Do I have to follow any steps to create one? If yes, pls mention those. 

> I am referring to the following links.

> https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-WADL

> https://cxf.apache.org/docs/jaxrs-services-description.html#JAXRSServicesDescription-DocumentingresourceclassesandmethodsingeneratedWADL



> On Mon, Oct 24, 2022 at 6:25 AM Andriy Redko <dr...@gmail.com> wrote:

>> Hello Tanuja,

>> The SwaggerFeature was introduced in Apache CXF 3.0 [1], but as far as I
>> understand, you are trying to use Apache CXF 2.4.6 and pulling the
>> cxf-rt-rs-service-description-3.0.0.jar with it. If that is the case, 
>> it is not going to work out. The recommendation would be to update to 
>> one of the supported Apache CXF releases [2]. 

>> Thank you.

>> [1] https://issues.apache.org/jira/browse/CXF-5379
>> [2] https://cxf.apache.org/download.html

>> Best Regards,
>>     Andriy Redko

TS>>> Hello everyone,

TS>>> My project uses cxf-2.4.6 version. There is no REST API documentation as of
TS>>> date.
TS>>> I plan to create one and have been exploring various options for this
TS>>> version.

TS>>> Official documentation mentions that SwaggerFeature needs to be used for
TS>>> this version.
TS>>> https://cwiki.apache.org/confluence/display/CXF20DOC/Swagger2Feature

TS>>> As per the above link,

TS>>> *For generating Swagger 1.2
TS>>> <https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md>
TS>>> documents,
TS>>> you can use SwaggerFeature instead of Swagger2Feature (for CXF versions <=
TS>>> 3.1.x).*

TS>>> But, I am lost here.

TS>>> Added all the needed jars. Ant is used as a build tool; hence, individual
TS>>> jars are added manually.

TS>>> scala-library-2.7.7.jar
TS>>> swagger-jaxrs_2.10-1.3.13.jar
TS>>> swagger-ui-2.1.2.jar
TS>>> swagger-annotations-1.5.2.jar
TS>>> swagger-jaxrs-1.5.2.jar
TS>>> cxf-rt-rs-service-description-3.0.0.jar

TS>>> I've added this bean in the cxfbeans.xml.

TS>>>      <!-- CXF SwaggerFeature -->
TS>>>     <bean id="swaggerFeature"
TS>>> class="org.apache.cxf.jaxrs.swagger.SwaggerFeature">
TS>>>         <!-- customize some of the properties -->
TS>>>         <property name="basePath" value=""/>
TS>>>     </bean>

TS>>>  <bean class="com.test" id="testClass"/>

TS>>> <jaxrs:server address="/testService" id="testServiceId">
TS>>>       <jaxrs:serviceBeans>
TS>>>             <ref bean="testClass"/>
TS>>>       </jaxrs:serviceBeans>
TS>>>      <jaxrs:extensionMappings>
TS>>>             <entry key="xml" value="application/xml"/>
TS>>>             <entry key="json" value="application/json"/>
TS>>>       </jaxrs:extensionMappings>
TS>>>        <jaxrs:features>
TS>>>             <ref bean="swaggerFeature" />
TS>>>         </jaxrs:features>
TS>>> </jaxrs:server>

TS>>> Now, server doesn't start and I get this exception.

TS>>> org.springframework.beans.factory.BeanCreationException: Error creating
TS>>> bean with name ' testServiceId': Invocation of init method failed; nested
TS>>> exception is org.apache.cxf.service.factory.ServiceConstructionException
TS>>>  at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
TS>>> at java.security.AccessController.doPrivileged(Native Method)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
TS>>> at
TS>>> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
TS>>> at
TS>>> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
TS>>> at
TS>>> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
TS>>> at
TS>>> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
TS>>> at
TS>>> org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
TS>>> at
TS>>> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
TS>>> at
TS>>> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
TS>>> at
TS>>> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
TS>>> at
TS>>> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
TS>>> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
TS>>> at
TS>>> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
TS>>> at
TS>>> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
TS>>> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
TS>>> at
TS>>> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
TS>>> at
TS>>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
TS>>> at java.lang.Thread.run(Thread.java:745)
TS>>> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
TS>>> at
TS>>> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:192)
TS>>> at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
TS>>> at
TS>>> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
TS>>> at java.lang.reflect.Method.invoke(Method.java:498)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
TS>>> at
TS>>> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
TS>>> ... 24 more
TS>>> Caused by: java.lang.NullPointerException
TS>>> at
TS>>> org.apache.cxf.jaxrs.swagger.SwaggerFeature.calulateDefaultResourcePackage(SwaggerFeature.java:69)
TS>>> at
TS>>> org.apache.cxf.jaxrs.swagger.SwaggerFeature.initialize(SwaggerFeature.java:46)
TS>>> at
TS>>> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.applyFeatures(JAXRSServerFactoryBean.java:203)
TS>>> at
TS>>> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:180)
TS>>> ... 30 more

TS>>> Regards,
TS>>> Sandy


Re: Reg: REST API documentation for cxf-2.4.6 version

Posted by Andriy Redko <dr...@gmail.com>.
Hello Tanuja,

The SwaggerFeature was introduced in Apache CXF 3.0 [1], but as far as I
understand, you are trying to use Apache CXF 2.4.6 and pulling the
cxf-rt-rs-service-description-3.0.0.jar with it. If that is the case, 
it is not going to work out. The recommendation would be to update to 
one of the supported Apache CXF releases [2]. 

Thank you.

[1] https://issues.apache.org/jira/browse/CXF-5379
[2] https://cxf.apache.org/download.html

Best Regards,
    Andriy Redko

TS> Hello everyone,

TS> My project uses cxf-2.4.6 version. There is no REST API documentation as of
TS> date.
TS> I plan to create one and have been exploring various options for this
TS> version.

TS> Official documentation mentions that SwaggerFeature needs to be used for
TS> this version.
TS> https://cwiki.apache.org/confluence/display/CXF20DOC/Swagger2Feature

TS> As per the above link,

TS> *For generating Swagger 1.2
TS> <https://github.com/swagger-api/swagger-spec/blob/master/versions/1.2.md>
TS> documents,
TS> you can use SwaggerFeature instead of Swagger2Feature (for CXF versions <=
TS> 3.1.x).*

TS> But, I am lost here.

TS> Added all the needed jars. Ant is used as a build tool; hence, individual
TS> jars are added manually.

TS> scala-library-2.7.7.jar
TS> swagger-jaxrs_2.10-1.3.13.jar
TS> swagger-ui-2.1.2.jar
TS> swagger-annotations-1.5.2.jar
TS> swagger-jaxrs-1.5.2.jar
TS> cxf-rt-rs-service-description-3.0.0.jar

TS> I've added this bean in the cxfbeans.xml.

TS>      <!-- CXF SwaggerFeature -->
TS>     <bean id="swaggerFeature"
TS> class="org.apache.cxf.jaxrs.swagger.SwaggerFeature">
TS>         <!-- customize some of the properties -->
TS>         <property name="basePath" value=""/>
TS>     </bean>

TS>  <bean class="com.test" id="testClass"/>

TS> <jaxrs:server address="/testService" id="testServiceId">
TS>       <jaxrs:serviceBeans>
TS>             <ref bean="testClass"/>
TS>       </jaxrs:serviceBeans>
TS>      <jaxrs:extensionMappings>
TS>             <entry key="xml" value="application/xml"/>
TS>             <entry key="json" value="application/json"/>
TS>       </jaxrs:extensionMappings>
TS>        <jaxrs:features>
TS>             <ref bean="swaggerFeature" />
TS>         </jaxrs:features>
TS> </jaxrs:server>

TS> Now, server doesn't start and I get this exception.

TS> org.springframework.beans.factory.BeanCreationException: Error creating
TS> bean with name ' testServiceId': Invocation of init method failed; nested
TS> exception is org.apache.cxf.service.factory.ServiceConstructionException
TS>  at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1338)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:473)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory$1.run(AbstractAutowireCapableBeanFactory.java:409)
TS> at java.security.AccessController.doPrivileged(Native Method)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:380)
TS> at
TS> org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:264)
TS> at
TS> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222)
TS> at
TS> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:261)
TS> at
TS> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:185)
TS> at
TS> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:164)
TS> at
TS> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:429)
TS> at
TS> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:728)
TS> at
TS> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:380)
TS> at
TS> org.springframework.web.context.ContextLoader.createWebApplicationContext(ContextLoader.java:255)
TS> at
TS> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:199)
TS> at
TS> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:45)
TS> at
TS> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4727)
TS> at
TS> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
TS> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
TS> at
TS> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1403)
TS> at
TS> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1393)
TS> at java.util.concurrent.FutureTask.run(FutureTask.java:266)
TS> at
TS> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
TS> at
TS> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
TS> at java.lang.Thread.run(Thread.java:745)
TS> Caused by: org.apache.cxf.service.factory.ServiceConstructionException
TS> at
TS> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:192)
TS> at sun.reflect.GeneratedMethodAccessor61.invoke(Unknown Source)
TS> at
TS> sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
TS> at java.lang.reflect.Method.invoke(Method.java:498)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1414)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1375)
TS> at
TS> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1335)
TS> ... 24 more
TS> Caused by: java.lang.NullPointerException
TS> at
TS> org.apache.cxf.jaxrs.swagger.SwaggerFeature.calulateDefaultResourcePackage(SwaggerFeature.java:69)
TS> at
TS> org.apache.cxf.jaxrs.swagger.SwaggerFeature.initialize(SwaggerFeature.java:46)
TS> at
TS> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.applyFeatures(JAXRSServerFactoryBean.java:203)
TS> at
TS> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:180)
TS> ... 30 more

TS> Regards,
TS> Sandy