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] > >
