I tried the above configuration and found that Swagger2Feature is not
applicable for fortress 3.0.0 since version 3.0.0 has been moved using
jakarta dependency.

found log with the following :

04-Nov-2023 12:42:19.573 SEVERE [main]
> org.apache.catalina.core.StandardContext.listenerStart Exception sending
> context initialized event to listener instance of class
> [org.springframework.web.context.ContextLoaderListener]
> org.springframework.beans.factory.BeanCreationException: Error creating
> bean with name 'restContainer': javax/ws/rs/core/Application
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1770)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:598)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:520)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:326)
> at
> org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:234)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:324)
> at
> org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:200)
> at
> org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:973)
> at
> org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:942)
> at
> org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:608)
> at
> org.springframework.web.context.ContextLoader.configureAndRefreshWebApplicationContext(ContextLoader.java:394)
> at
> org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:274)
> at
> org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:102)
> at
> org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4422)
> at
> org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:4860)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
> at
> org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:683)
> at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:658)
> at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:712)
> at
> org.apache.catalina.startup.HostConfig.deployDirectory(HostConfig.java:1136)
> at
> org.apache.catalina.startup.HostConfig$DeployDirectory.run(HostConfig.java:1974)
> at
> java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:577)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> at
> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:123)
> at
> org.apache.catalina.startup.HostConfig.deployDirectories(HostConfig.java:1046)
> at org.apache.catalina.startup.HostConfig.deployApps(HostConfig.java:428)
> at org.apache.catalina.startup.HostConfig.start(HostConfig.java:1659)
> at
> org.apache.catalina.startup.HostConfig.lifecycleEvent(HostConfig.java:309)
> at
> org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(LifecycleBase.java:114)
> at
> org.apache.catalina.util.LifecycleBase.setStateInternal(LifecycleBase.java:402)
> at org.apache.catalina.util.LifecycleBase.setState(LifecycleBase.java:345)
> at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:893)
> at
> org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:845)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
> at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1332)
> at
> org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1322)
> at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:317)
> at
> org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
> at
> java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
> at
> org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:866)
> at
> org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:240)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
> at
> org.apache.catalina.core.StandardService.startInternal(StandardService.java:433)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
> at
> org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:917)
> at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:171)
> at org.apache.catalina.startup.Catalina.start(Catalina.java:795)
> at
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
> at java.base/java.lang.reflect.Method.invoke(Method.java:578)
> at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:347)
> at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:478)
> Caused by: java.lang.NoClassDefFoundError: javax/ws/rs/core/Application
> at
> org.apache.cxf.jaxrs.swagger.Swagger2Feature$Portable.addSwaggerResource(Swagger2Feature.java:267)
> at
> org.apache.cxf.jaxrs.swagger.AbstractSwaggerFeature$Portable.initialize(AbstractSwaggerFeature.java:190)
> at
> org.apache.cxf.feature.DelegatingFeature.initialize(DelegatingFeature.java:48)
> at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.applyFeatures(JAXRSServerFactoryBean.java:260)
> at
> org.apache.cxf.jaxrs.JAXRSServerFactoryBean.create(JAXRSServerFactoryBean.java:192)
> at
> java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
> at java.base/java.lang.reflect.Method.invoke(Method.java:578)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeCustomInitMethod(AbstractAutowireCapableBeanFactory.java:1874)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.invokeInitMethods(AbstractAutowireCapableBeanFactory.java:1827)
> at
> org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.initializeBean(AbstractAutowireCapableBeanFactory.java:1766)
> ... 51 more
> Caused by: java.lang.ClassNotFoundException: javax.ws.rs.core.Application
> at
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1353)
> at
> org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1165)
> ... 61 more
>

and also it is confirmed by the Swagger2Feature code that it still used
javax dependency on swagger feature.

[image: image.png]

With all the things i've found, i think it is imposible to use swagger
feature at cxf for fortress version 3.0.0

Have you tried with fortress version 2.x.x ?


On Fri, Nov 3, 2023 at 3:24 AM Shawn McKinney <[email protected]> wrote:

>
>
> > On Nov 2, 2023, at 11:42 AM, Veniamin Gvozdikov <
> [email protected]> wrote:
> >
> > I'm trying to use the CXF feature
> > https://cxf.apache.org/docs/swagger2feature.html on fortress 3.0.0 to
> get
> > API access over swagger interface. I've already added these lines but I
> > don't understand where I need to turn the feature on in java code. Could
> > you please give me some advice on this?
> >
>
> A little progress.  Added the dependency to the pom
>
> ```
> <dependency>
>       <groupId>org.apache.cxf</groupId>
>       <artifactId>cxf-rt-rs-service-description-swagger</artifactId>
>       <version>3.6.2</version>
> </dependency>
> ```
>
> And enabled the swagger feature in applicationContext.xml
>
> ```
> <!-- CXF Swagger2Feature -->
> <bean id="swagger2Feature"
> class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
>     <property name="basePath" value="/app/swaggerSample"/>
> </bean>
> ```
>
> Can build and deploy, but don’t know what to do next. I’m sure it can’t be
> this easy.
>
> Also, the endpoint is secured so the container will enforce http basic
> auth.  Not a show stopper just something that will have to be handled
> somehow.
>
> Still digging …
>
> —
> Shawn
>
> > --- a/src/main/resources/applicationContext.xml
> > +++ b/src/main/resources/applicationContext.xml
> > @@ -46,6 +46,12 @@ under the License.
> >     </bean>
> >
> >     <bean id="fortressResponseInterceptor"
> > class="org.apache.directory.fortress.rest.FortressResponseInterceptor"/>
> > +
> > +    <!-- CXF Swagger2Feature -->
> > +    <bean id="swagger2Feature"
> > class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
> > +        <!-- customize some of the properties -->
> > +        <property name="basePath" value="/app/swaggerSample"/>
> > +    </bean>
> >
> >     <jaxrs:server id="restContainer" address="/">
> >         <jaxrs:serviceBeans>
> > @@ -67,6 +73,11 @@ under the License.
> >         <jaxrs:providers>
> >            <ref bean="customJsonProvider"/>
> >         </jaxrs:providers>
> > +
> > +        <!-- Swagger -->
> > +        <jaxrs:features>
> > +            <ref bean="swagger2Feature" />
> > +        </jaxrs:features>
> >     </jaxrs:server>
> >
> > </beans>
> >
> > --
> > Regards,
> > Veniamin
>
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [email protected]
> For additional commands, e-mail: [email protected]
>
>

Reply via email to