Hi Andriy, Removing the basepackages property indeed resolved the issue.
Regards, J.P. Urkens -----Original Message----- From: Andriy Redko <[email protected]> Sent: dinsdag 25 juli 2023 2:32 To: Jean Pierre URKENS <[email protected]> Cc: Daniel Kulp <[email protected]> Subject: Re: Request mapping warnings Hi Jean, The issue with duplicate beans registration comes from JAXRS server definition: <jaxrs:server id="KmopOpenApiServer" basePackages="be.dvtm.aeo.op.openapi" address="/openapi"> The basePackages property triggers automatic scans which basically means that the same beans will be discovered twice. I think you could safely bring the @Service annotation back and remove basePackages property to get rid of the issue. Thanks! Best Regards, Andriy Redko JPU> No, I am not using SpringBoot in any way. JPU> Regards, JPU> J.P. JPU> *From:* Andrey Redko <[email protected]> JPU> *Sent:* donderdag 20 juli 2023 15:24 JPU> *To:* Jean Pierre URKENS <[email protected]> JPU> *Cc:* Daniel Kulp <[email protected]> JPU> *Subject:* Re: Request mapping warnings JPU> Hi Jean, JPU> Do you use CXF Spring Boot autoconfiguration [1]? If yes, it has a JPU> few controls over scans [1], either beans or classes (I am off this JPU> week so cannot look into the configuration). Thank you. JPU> [1] https://cxf.apache.org/docs/springboot.html JPU> Best Regards, JPU> Andriy Redko JPU> On Thu, Jul 20, 2023, 2:23 AM Jean Pierre URKENS < JPU> [email protected]> wrote: JPU> Hi all, JPU> As a test I removed the @org.springframework.stereotype.Service(“ JPU> *KmopDienstverlenerApi*”) annotation on my service implementation JPU> class. So no @Service annotations further exist. Still when JPU> checking the return of *JAXRSUtils.**getRootResources*(Message JPU> message) via breakpoint I JPU> Still notice that my service classes are listed twice in the return JPU> result *List<ClassResourceInfo>*. JPU> The only annotations I’ve left in my code are: JPU> - standard JAX-RS annotations: JPU> javax.ws.rs.[GET|POST|Consumes|Produces|HeaderParam|PathParam|QueryParam|Path|core.MediaType|core.Response] JPU> - io.swagger.v3.oas.annotations.* JPU> I suppose none of these would be responsible for an extra JPU> registration of my service classes. JPU> So the only point where service registration occurs is in the bean JPU> declaration file cxf-endpoint.xml, see attachment. The only thing I JPU> can think of a possible double registration in this file is the JPU> declaration of the OpenApiFeature (e.g. <bean JPU> id=”*KmopOpenApiFeature*” …> ) for each resource endpoint in JPU> addition to the <jaxrs:server /> declaration using this OpenApiFeature. JPU> But I would assume that configuring the OpenApiFeature, through a JPU> bean declaration, wouldn’t register a service. JPU> The ‘imported’ resources context-v2.xml and onderneming-context.xml JPU> define some <jaxws:client/> instances that have nothing to do with JPU> these JAX-WS/RS endpoints declared in this file. JPU> Is there something I can trace into to see when a service gets JPU> registered as a *ClassResourceInfo *? JPU> Regards, JPU> J.P. Urkens JPU> *From:* Andrey Redko <[email protected]> JPU> *Sent:* woensdag 19 juli 2023 19:30 JPU> *To:* Jean Pierre URKENS <[email protected]> JPU> *Cc:* Daniel Kulp <[email protected]> JPU> *Subject:* Re: Request mapping warnings JPU> Hi Jean, JPU> Indeed it looks like you have the same resource registered twice JPU> hence the warning. It may come from the use of automatic resource JPU> scans and manual resource registration. JPU> Best Regards, JPU> Andriy Redko JPU> On Wed, Jul 19, 2023, 7:39 AM Jean Pierre URKENS < JPU> [email protected]> wrote: JPU> Still some minor issue related to request mapping. JPU> I notice I am getting warnings like: JPU> *2023-07-19 13:08:23,022 [T8N1TP1-4] WARN JPU> (SID=8806F673DEC6B53D9248AF0DD81F6882) JPU> (org.apache.cxf.jaxrs.model.OperationResourceInfoComparatorBase:102 JPU> ) - Both JPU> be.dvtm.aeo.op.openapi.api.impl.KmopDienstverlenerApiServiceImpl#ge JPU> tDvlById JPU> and JPU> be.dvtm.aeo.op.openapi.api.impl.KmopDienstverlenerApiServiceImpl#ge JPU> tDvlById are equal candidates for handling the current request JPU> which can lead to unpredictable results* JPU> Obvious that they are equal candidates because they are the same JPU> class. But what is the cause of this double detection? JPU> Is it because when *JAXRSUtils.**getRootResources*(Message message) JPU> gets called, I see that it contains 4 entries: JPU> · (twice) KmopDienstverlenerApiServiceImpl -> my service endpoint JPU> · io.swagger.v3.jaxrs2.integration.resources.OpenApiResource JPU> · org.apache.cxf.jaxrs.swagger.ui.SwaggerUiService JPU> So twice my service implementation, I wouldn’t know why this is the case? JPU> On my classpath I have set: JPU> · cxf-rt-rs-service-description-3.5.6.jar -> this JPU> handles request for ‘_wadl’ JPU> · cxf-rt-rs-service-description-openapi-v3-3.5.6.jar -> this JPU> handles request for ‘openapi.[yaml|json]’ JPU> · cxf-rt-rs-service-description-swagger-ui-3.5.6.jar -> this JPU> handles request for ‘Swagger documentation’ JPU> would this be a cause for my service endpoint to appear multiple times? JPU> Aside from that I have no idea what could cause this. JPU> J.P. JPU> -----Original Message----- JPU> From: Andriy Redko <[email protected]> JPU> Sent: donderdag 13 juli 2023 18:24 JPU> To: Jean Pierre URKENS <[email protected]>; JPU> [email protected] JPU> Subject: Re: How to setup multiple JAXRS server endpoints JPU> Got it, thank you (the Swagger sometimes does surprising things). JPU> Thursday, July 13, 2023, 1:33:07 AM, you wrote: JPU>> The @Parameter annotation seems to be ignored at this level. JPU>> -----Original Message----- JPU>> From: Jean Pierre URKENS <[email protected]> JPU>> Sent: donderdag 13 juli 2023 7:11 JPU>> To: 'Andriy Redko' <[email protected]>; '[email protected]' JPU>> <[email protected]> JPU>> Subject: RE: How to setup multiple JAXRS server endpoints JPU>> Yes, SwaggerUI works too! JPU>> I noticed that v2.x of swagger-jaxrs relates to OpenApi v3.1.x JPU>> while my spec is compliant with OpenApi v3.0.x, so I am going to JPU>> stick with v2.1.13 which seems to be that last version for OpenApi JPU> v3.0.x. JPU>> I thought the @Parameter only applied to input parameters JPU>> ("query", JPU>> "header", "path" or "cookie" parameters), but I'll give it a try. JPU>> J.P. JPU>> -----Original Message----- JPU>> From: Andriy Redko <[email protected]> JPU>> Sent: woensdag 12 juli 2023 22:16 JPU>> To: Jean Pierre URKENS <[email protected]>; JPU>> [email protected] JPU>> Subject: Re: How to setup multiple JAXRS server endpoints JPU>> Hi Jean, JPU>> That's awesome, have you got SwaggerUI working as well? JPU>> Yes, you could use 2.2.15 (we already updated to this version, no JPU>> regressions). It seems like the description applies to the whole JPU>> schema (which is the same for both properties), may be you could JPU>> use @Parameter JPU>> instead: JPU>> @Parameter(description="The description I want for prop1") JPU>> Thank you. JPU>> Best Regards, JPU>> Andriy Redko >>> Hi Andriy, >>> After having migrated everything to "io.swagger.v3.oas.annotations.*" >>> the swagger endpoints for each of my services became active. >>> So far so good, but I do notice that there are discrepancies when >>> annotating models, e.g.: >>> public class Model1 { >>> @Schema(description="The description I want for prop1") >>> private Model2 prop1; >>> @Schema(description="The description I want for prop2") >>> private Model2 prop2; >>> ... >>> } >>> When I generate the openapi.[json|yaml] specification I see that >>> both >>> prop1 and prop2 have a reference to the schema component "Model2" >>> with description ' The description I want for prop2' which is >>> inappropriate for 'prop1'. >>> It is not unlikely to have multiple properties within one Model that >>> are of the same class but are semantically used in a different context. JPU> E.g. >>> something as simple as a ShipmentOrder having two 'Address' >>> properties 'from' and 'to' would result in wrong API documentation. >>> I am aware it has nothing to do with CXF but rather with >>> swagger-jaxrs2-vx.y.z.jar and depending libraries. CXF-3.5.6 has >>> dependency on swagger-jaxrs2-2.1.13.jar. Would it be an issue to >>> replace this dependency with e.g. swagger-jaxrs2-2.2.15.jar (latest >>> stable release according to maven central repo)? >>> J.P. >>> -----Original Message----- >>> From: Jean Pierre URKENS <[email protected]> >>> Sent: woensdag 12 juli 2023 8:25 >>> To: 'Andriy Redko' <[email protected]>; '[email protected]' >>> <[email protected]> >>> Subject: RE: How to setup multiple JAXRS server endpoints I seem to >>> be mistaken here, the endpoint was loaded (I did a manual HTTP GET >>> test to the endpoint to verify this) although no breakpoints where >>> hit during startup. >>> I am first going to complete the migration to >>> "io.swagger.v3.oas.annotations.*" annotations for all endpoints and >>> then I am going to test again. >>> The application is composed of libraries, some of which use SLF4J >>> but >>> most use LOG4J for logging. >>> J.P. >>> -----Original Message----- >>> From: Andriy Redko <[email protected]> >>> Sent: woensdag 12 juli 2023 1:13 >>> To: Jean Pierre URKENS <[email protected]>; >>> [email protected] >>> Subject: Re: How to setup multiple JAXRS server endpoints Hi Jean, >>> The >>> OpenApiFeature$Portable#initiliaze(…) should definitely be called >>> (otherwise you shouldn't even see the openapi.json endpoint), so I >>> am >>> not sure why these are not triggering for you. >>> >>> For logging, it seems like you are using SLF4J >>> (org.apache.cxf.common.logging.Slf4jLogger), >>> and also reload4j (aka log4j), why do you need both? >>> Thank you. >>> Best Regards, >>> Andriy Redko JPU>>>> After some code investigation: JPU>>>> OpenApiFeature implements SwaggerUiSupport and in its JPU>>>> portable#registerSwaggerUiResources(…) method it will call JPU>>>> SwaggerUiSupport#getSwaggerUi(…) which will register the JPU>> SwaggerUiService. JPU>>>> I have put breakpoints on: JPU>>>> - OpenApiFeature$Portable#initiliaze(…) JPU>>>> - SwaggerUiService constructor JPU>>>> - SwaggerUiSupport#getSwaggerUi(…) JPU>>>> but none of them are hit when starting my application? JPU>>>> Although the (spring) logging shows all beans in my JPU>>>> cxf-endpoints.xml have been created? JPU>>>> The *WADL* and *OpenAPI* endpoints to get the specification work. JPU>>>> Even the actual endpoint seems to work although I didn’t hit any JPU>>>> of the breakpoint? JPU>>>> CXF, also doesn’t seem to log a lot, I am hardly getting any log JPU>>>> entries although log level I set to DEBUG. JPU>>>> My logging (except wire message logging) for cxf is setup JPU>>>> correctly (I JPU>>>> think): JPU>>>> - ../META-INF/cxf/org.apache.cxf.Logger contains the line JPU>>>> ‘org.apache.cxf.common.logging.Slf4jLogger’ JPU>>>> - slf4j-api-1.7.36.jar, slf4j-reload4j-1.7.36.jar and JPU>>>> reload4j-1.2.19.jar are on the classpath JPU>>>> - the log4j.properties file contains the line: JPU>>>> ‘log4j.logger.org.apache.cxf=DEBUG’ JPU>>>> There are no special instructions mentioned on JPU>>>> https://cxf.apache.org/docs/general-cxf-logging.html so the JPU>>>> above JPU>>>> should work (it works for all other packages I use in my JPU> application). JPU>>>> J.P. JPU>>>> *From:* Jean Pierre URKENS <[email protected]> JPU>>>> *Sent:* dinsdag 11 juli 2023 9:58 JPU>>>> *To:* 'Andriy Redko' <[email protected]>; '[email protected]' < [email protected]>>>>> JPU>>>> *Subject:* RE: How to setup multiple JAXRS server endpoints JPU>>>> Hi Andriy, JPU>>>> As a test I removed all JAX-RS endpoints that use Swagger v2 JPU>>>> annotations from my configuration file (see attachment). JPU>>>> So I've now only 1 JAX-RS endpoint, fully annotated with Swagger JPU>>>> v3 annotations, using the OpenApiFeature i.o. Swagger2Feature. JPU>>>> If I run my server with this configuration I only get the JPU>>>> (working) JPU>>>> *WADL* and *OpenAPI* endpoints, no Swagger UI endpoint: JPU>>>> So there is some configuration missing to detect/activate the JPU>>>> Swagger endpoint. When I look at the samples that come with the JPU>>>> distribution of CXF (I am using v3.5.6) nothing special seems to JPU>>>> be JPU>> configured to activate this? JPU>>>> Do you have any idea how the SwaggerUiService is picked up when JPU>> loading? JPU>>>> J.P. JPU>>>> -----Original Message----- JPU>>>> From: Andriy Redko <[email protected]> JPU>>>> Sent: dinsdag 11 juli 2023 3:44 JPU>>>> To: Jean Pierre URKENS <[email protected]>; JPU>>>> [email protected] JPU>>>> Subject: Re: How to setup multiple JAXRS server endpoints JPU>>>> Hi Jean, JPU>>>> I guess you figured one issue, swagger.json -> openapi.json, but JPU>>>> to be honest we have never tested or envisioned the application JPU>>>> that would use OpenAPI 2.0 (Swagger) and OpenAPI 3.0 at the same JPU>>>> time, I am afraid this is just not supported. You may get things JPU>>>> back on track when going with OpenAPI 3.0 for all services. JPU>>>> Thank you. JPU>>>> Best Regards, JPU>>>> Andriy Redko >>>>> Hi Andriy, >>>>> I am trying to trace the difference in handling with another >>>>> application where I’ve got only one CXF service endpoint that uses >>>>> swagger v3 openapi annotations. >>>>> There I see that when handling the Swagger page request ( >>>>> http://l-p53-008:8082/idb-fe/services/api-docs?url=openapi.json) >>>>> the JAXRSInInterceptor is calling: >>>>> *JAXRSUtils.**getRootResources*(Message message) >>>>> It contains 4 entries: >>>>> - (twice) InkomOndernemingApiserviceImpl -> my service endpoint >>>>> - io.swagger.v3.jaxrs2.integration.resources.OpenApiResource >>>>> - org.apache.cxf.jaxrs.swagger.ui.SwaggerUiService >>>>> On the application described below with the service ‘oidcsim’ when >>>>> calling the swagger page request >>>>> (l-p53-008:8081/op/services/oidcsim/api-docs?url=openapi.json) the >>>>> result of the getRootResources doesn’t contain the >>>>> ClassResourceInfo ‘ SwaggerUiService’. It only contains 3 entries: >>>>> - (twice) OidcProviderApiServiceImpl (my service endpoint) >>>>> - io.swagger.v3.jaxrs2.integration.resources.OpenApiResource >>>>> The SwaggerUiService is the one that is configured to handle the JPU>>>> ‘api-docs’ >>>>> path-request. Since it is missing the request is tried to match >>>>> with the other two resources but fails, hence ‘NOT FOUND’ exception. >>>>> I can’t trace back where these rootResources are set and why the >>>>> SwaggerUiService’ isn’t listed. >>>>> J.P. >>>>> *From:* Jean Pierre URKENS <[email protected]> >>>>> *Sent:* maandag 10 juli 2023 13:43 >>>>> *To:* 'Andriy Redko' <[email protected]> >>>>> *Subject:* RE: How to setup multiple JAXRS server endpoints >>>>> Andriy, >>>>> I am trying to switch from Swagger v2 to OpenApi v3 annotations >>>>> basically because my starting point is an OpenApi v3.0.7 yaml file >>>>> description and OpenAPI seems to be the way forward. >>>>> For applications where I have only one CXF JAX-RS endpoint exposed >>>>> I had no problems converting. However as soon as there are >>>>> multiple >>>>> endpoints I run into troubles. >>>>> So, to recall, I've an application exposing 3 JAX-RS endpoints >>>>> that >>>>> where previously annotated with swagger v2 annotations (i.e. >>>>> package >>>>> io.swagger.annotations.*) which I migrated to >>>>> swagger v3 annotations (package io.swagger.v3.oas.annotations.*). >>>>> In accordance I altered my CXF JAX-RS endpoint configuration from >>>>> (only showing relevant parts, see attachment for full setup): >>>>> <!-- CXF Swagger2Feature --> >>>>> <bean id="SwaggerUiConfigOidcApi" >>>>> class="org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig"> >>>>> <property name="queryConfigEnabled" >>>>> <property name="url" >>>>> value="/op/services/oidcsim/swagger.yaml"/> >>>>> </bean> >>>>> <bean id="Swagger2FeatureOidcApi" >>>>> class="org.apache.cxf.jaxrs.swagger.Swagger2Feature"> >>>>> <property name="basePath" >>>>> value="/op/services/oidcsim"/> >>>>> <property name="usePathBasedConfig" >>>>> <property name="resourcePackage" >>>>> value="be.dvtm.aeo.op.oidc"/> >>>>> <property name="supportSwaggerUi" >>>>> <property name="swaggerUiConfig" >>>>> ref="SwaggerUiConfigOidcApi"/> >>>>> </bean> >>>>> <jaxrs:server id="OidcProviderApiServer" >>>>> basePackages="be.dvtm.aeo.op.oidc" address="/oidcsim"> >>>>> .... >>>>> <jaxrs:features> >>>>> <ref >>>>> bean="Swagger2FeatureOidcApi" /> >>>>> </jaxrs:features> >>>>> ... >>>>> </jaxrs:server> >>>>> TO: >>>>> <!-- CXF OpenAPIFeature --> >>>>> <bean id="OidcSwaggerUiConfig" >>>>> class="org.apache.cxf.jaxrs.swagger.ui.SwaggerUiConfig"> >>>>> <property name="queryConfigEnabled" >>>>> <property name="url" >>>>> value="openapi.json"/> >>>>> </bean> >>>>> <bean id="OidcOpenApiFeature" >>>>> class="org.apache.cxf.jaxrs.openapi.OpenApiFeature"> >>>>> <property name="supportSwaggerUi" >>>>> <property name="swaggerUiConfig" >>>>> ref="OidcSwaggerUiConfig"/> >>>>> <property name="swaggerUiVersion" >>>>> <property name="scan" >>>>> value="false"/> >>>>> <property name="useContextBasedConfig" >>>>> <property name="resourcePackages" >>>>> value="be.dvtm.aeo.op.oidc"/> >>>>> </bean> >>>>> <jaxrs:server id="OidcProviderApiServer" >>>>> basePackages="be.dvtm.aeo.op.oidc" address="/oidcsim"> >>>>> .... >>>>> <jaxrs:features> >>>>> <ref JPU>>>> bean="OidcOpenApiFeature" >>>>> </jaxrs:features> >>>>> ... >>>>> </jaxrs:server> >>>>> Now when starting my application and navigating to the root part " >>>>> http://localhost:localPort/op/services" I get an overview of all >>>>> my >>>>> endpoints: >>>>> Now there are 3 RESTful service endpoints setup: >>>>> 1. ‘oidcsim’ which I switched to swagger v3 annotations >>>>> 2. ‘openapi’ currently still swagger v2 annotations >>>>> 3. ‘sdx’ currently still swagger v2 annotations >>>>> all endpoints work except for the ‘swagger endpoint address for >>>>> the >>>>> oidcsim >>>>> endpoint: >>>>> http://l-p53-008:8081/op/services/oidcsim/api-docs?url=/op/service >>>>> s >>>>> /o >>>>> i >>>>> dcsim/swagger.json >>>>> So the *WADL* and *OpenAPI* endpoint work but not the *Swagger* >>>>> endpoint of the oidcsim resource. I am getting an error (the value >>>>> of the ‘url’ query parameter isn’t relevant): >>>>> “WebApplicationException has been caught, status: 404, >>>>> message: HTTP 404 Not Found” >>>>> When I try (without the ‘/oidcsim’ context): >>>>> http://l-p53-008:8081/op/services/api-docs I get: >>>>> “No service was found.” >>>>> So the endpoint http://l-p53-008:8081/op/services/oidcsim/api-docs >>>>> doesn’t exist, where as the endpoint >>>>> http://l-p53-008:8081/op/services/api-docs does exist but no >>>>> service JPU>>>> description is found? >>>>> Of course my intention is to get working, as previously with the >>>>> swagger v2 setup for which I then specifically added the >>>>> *Swagger2Feature* config >>>>> parameters: >>>>> <property name="basePath" >>>>> value="/op/services/oidcsim"/> >>>>> <property name="usePathBasedConfig" >>>>> But I don’t find the according configuration options for the >>>>> *OpenApiFeature* class or whether I should configure this in >>>>> another way. >>>>> Any suggestions on this? >>>>> Regards, >>>>> J.P. >>>>> -----Original Message----- >>>>> From: Andriy Redko <[email protected]> >>>>> Sent: donderdag 25 mei 2023 2:27 >>>>> To: Jean Pierre URKENS <[email protected]>; >>>>> [email protected] >>>>> Subject: Re: How to setup multiple JAXRS server endpoints >>>>> Hi Jean, >>>>> You may run into Swagger JAX-RS scanner limitations, as far as I >>>>> can tell - it checks class annotations for SwaggerDefinition, does >>>>> not traverse the hierarchy [1]. >>>>> [1] >>>>> https://github.com/swagger-api/swagger-core/blob/1.5/modules/swagg >>>>> e >>>>> r- >>>>> j >>>>> axrs/src/main/java/io/swagger/jaxrs/Reader.java#L194 >>>>> Best Regards, >>>>> Andriy Redko >>>>>> RE: How to setup multiple JAXRS server endpoints >>>>>> Still one question ); >>>>>> The generated swagger file doesn’t take into account the >>>>>> @SwaggerDefintion on my interface classes? >>>>>> As a test I looked at >>>>>> *https://github.com/apache/cxf/tree/3.6.x-fixes/distribution/src/ >>>>>> m >>>>>> a >>>>>> in/release/samples/jax_rs/description_swagger2_web** >>>>>> and** modified** sample2* >>>>>> <https://github.com/apache/cxf/tree/3.6.x-fixes/distribution/src/ >>>>>> m >>>>>> a >>>>>> in/release/samples/jax_rs/description_swagger2_web >>>>>> and modified sample2> as follows: >>>>>> @Path("/sample2") >>>>>> @Api(value = "/sample2",authorizations= >>>>>> {@Authorization(value="bearer")},description = "Sample2 >>>>> (modified) JAX-RS >>>>>> service with Swagger documentation") >>>>>> @SwaggerDefinition( >>>>>> info = @Info( >>>>>> description = "Sample2 server", >>>>>> version="1.0", >>>>>> title = "Test2", >>>>>> contact = @Contact(name = "J.P. >>>>>> Urkens",email = JPU> " >>>>>> *[email protected]* < >>>>> [email protected]> >>>>>> ")), >>>>>> securityDefinition = >>>>>> @SecurityDefinition(apiKeyAuthDefinitions= >>>>> *{@ApiKeyAuthDefinition(key="bearer",in=ApiKeyLocation.HEADER,name >>>>> = JPU> <*%7B@ApiKeyAuthDefinition(key=> >>>>> "A >>>>> u >>>>> thorization",description="Use* >>>>>> <{@ApiKeyAuthDefinition(key=> the format 'Bearer >>>>>> <accessToken>'")}) >>>>>> ) >>>>>> public class Sample2 {...} >>>>>> This correctly generates the ‘securityDefintions’ in the swagger >>>>>> file. >>>>>> If include the same @SwaggerDefinition and the authorizations on >>>>>> the @Api annotation as above in my interface classes then the >>>>>> generated swagger file doesn’t contain the ‘securityDefintions’ ? >>>>>> Any idea what I might be missing? >>>>>> Regards, >>>>>> J.P. >>>>>> -----Original Message----- >>>>>> From: Jean Pierre URKENS <[email protected]> >>>>>> Sent: dinsdag 23 mei 2023 12:52 >>>>>> To: 'Andriy Redko' <[email protected]>; '[email protected]' < >>>>>> Subject: RE: How to setup multiple JAXRS server endpoints >>>>>> Hi Andriy, >>>>>> I added the parameter usePathBasedConfig=true to the >>>>>> Swagger2Feature bean declarations but still it does generate an >>>>>> empty swagger.yaml for interfaces KmopResources and >>>>>> KmopDienstverlener although I noticed that for these interfaces >>>>>> the >>>>>> @Path() annotation was commented out (as I included it in the >>>>>> server declaration). After providing an empty @Path("") >>>>>> declaration on >>>>> the API interface classes everything worked. >>>>>> Thanks for the support. >>>>>> -----Original Message----- >>>>>> From: Andriy Redko <[email protected]> >>>>>> Sent: dinsdag 23 mei 2023 3:42 >>>>>> To: Jean Pierre URKENS <[email protected]>; >>>>>> [email protected] >>>>>> Subject: Re: How to setup multiple JAXRS server endpoints >>>>>> Hi Jean, >>>>>> The main problem to configure Swagger property in your particular >>>>>> case is that the server address is not "known" or "introspectable" >>>>>> for >>>>> Swagger. >>>>>> Intuitively, it has to be set manually using basePath to the, >>>>>> essentially, the server address >>>>>> part: >>>>>> - /op/services/accounts >>>>>> - /op/services/resources >>>>>> - /op/services/dienstverlener >>>>>> You could read more about other Swagger properties you have asked JPU> here: >>>>>> https://github.com/swagger-api/swagger-core/wiki/Swagger-2.X---In >>>>>> t >>>>>> e >>>>>> gration-and-Configuration#configuration-properties >>>>>> You definitely need to set usePathBasedConfig to "true" otherwise >>>>>> you will see the same Swagger specs for all servers. We have a >>>>>> sample here which uses 2 jaxrs:server >>>>>> instances: >>>>>> https://github.com/apache/cxf/tree/3.6.x-fixes/distribution/src/m >>>>>> a >>>>>> i >>>>>> n/release/samples/jax_rs/description_swagger2_web >>>>>> Regarding SwaggerUI, I think the value for each of those should >>>>>> be >>>>>> set to, >>>>>> respectively: >>>>>> - /op/services/accounts/swagger.yaml >>>>>> - /op/services/resources/swagger.yaml >>>>>> - /op/services/dienstverlener/swagger.yaml >>>>>> I believe this is matching your settings already, except the >>>>>> usePathBasedConfig part. The example referred above could be >>>>>> helpful, my apologies if I missed something, there are quite a >>>>>> lot >>>>>> of questions :-) The fact that the generated Swagger >>>>>> specification >>>>>> is empty is unexpected - it should not happen when JAX-RS >>>>>> resources >>>>> are properly configured. >>>>>> Thank you. >>>>>> Best Regards, >>>>>> Andriy Redko >>>>>>> RE: How to setup multiple JAXRS server endpoints >>>>>>> Hi Andriy, >>>>>>> I am not quite understanding how to correctly configure the >>>>>> Swagger2Feature. >>>>>>> Referring to the attached cxf-endpoints configuration I (as a >>>>>>> test) >>>>>>> created >>>>>>> 3 JAXRS server instances: >>>>>>> 1. A* KmopApiServer* server for the* >>>>>>> be.dvtm.aeo.op.sodexo.api.KmopApiService* interface, serving >>>>>>> requests for URI path: >>>>>>> * <protocol>**//<host:<port>/op/services/accounts* >>>>>>> ‘op’ = root path of the web application >>>>>>> ‘services’ = servlet path of the CXF-servlet >>>>>>> The address of the server is set to ‘/accounts’ and the >>>>>>> @Path(…) >>>>>>> annotation on the interface class was cleared. >>>>>>> 2. A* Kmop**Resources**ApiServer* server for the* >>>>> be.dvtm.aeo.op.* >>>>>>> *openapi.**api.Kmop**Recources**ApiService* interface, serving >>>>>>> requests for URI path: >>>>>>> * <protocol>**//<host:<port>/op/services/**resources* >>>>>>> The address of the server is set to ‘/resources’ and the >>>>>>> @Path(…) >>>>>>> annotation on the interface class was cleared. >>>>>>> 3. A* Kmop**Dienstverlener**Server* server for the* >>>>>> be.dvtm.aeo.op.* >>>>>>> *openapi**.api.Kmop**Dienstverlener**Service* interface, serving >>>>>>> requests for URI path: >>>>>>> * >>>>>>> <protocol>**//<host:<port>/op/services/**dienstverlener* >>>>>>> The address of the server is set to ‘/dienstverlener’ and the >>>>>>> @Path(…) annotation on the interface class was cleared. >>>>>>> For each of these server instances I’ve set the Swagger2Feature >>>>>>> with configuration as indicated in the attached cxf-endpoints.xml. >>>>>>> With regard to the configurations for the Swagger2Feature I’ve >>>>>>> the >>>>>>> following questions: >>>>>>> a) Referring to * >>>>> https://cxf.apache.org/docs/swagger2feature.html* >>>>>>> <https://cxf.apache.org/docs/swagger2feature.html> could you >>>>>>> clarify on the following configuration parameters: >>>>>>> *i. ** basePath* – Is this the path to the CXFServlet context (‘ >>>>>>> /op/services’) or to the JAX-RS server instance (e.g. >>>>>>> ‘/op/services/accounts’) or still something else? Is it used to >>>>>>> resolve service classes or is it just for documentation in the >>>>>>> swagger >>>>>> file? >>>>>>> *ii. ** resourcePackage* – the description mentions ‘package JPU> names’ >>>>>>> while the default mentions ‘service classes’? Service 2 and 3 >>>>>>> above >>>>>>> are within the same package (generated from the same yaml >>>>>>> specification that included both interfaces). >>>>>>> *iii. ** ig**noreRoutes* – is this taken into account when >>>>>>> scanAllResources=false? >>>>>>> *iv. ** swaggerUiConfig* – What is the correct ‘url’ parameter >>>>> value >>>>>>> (cf. question ‘a’)? >>>>>>> b) What would be the correct URL to generate a swagger.yaml >>>>>>> file >>>>>> for >>>>>>> each of the above interfaces? Initially I called: >>>>>>> *i. ** >>>>>> <protocol>**//<host:<port>/op/services/accounts**/swagger.yaml* >>>>>>> *ii. ** >>>>>> <protocol>**//<host:<port>/op/services/**resources/swagger.yaml* >>>>>>> *iii. ** <protocol>**//<host:<port>/op/services/**dienstver* >>>>>>> *lener/swagger.yaml* >>>>>>> All three requests delivered the same yaml specification, >>>>>>> namely >>>>>> the one >>>>>>> for interface* KmopApiServer*? >>>>>>> c) I tried to debug the processing of the requests under ‘b)’ >>>>>>> and >>>>>> this >>>>>>> is done by the class JAXRSInterceptor#processRequest where the >>>>>>> MessageImpl object for request “ii.” looks like the one attached. >>>>>>> It finds 3 resource >>>>>>> classes: >>>>>>> be.dvtm.aeo.op.openapi.api.impl.KmopResourcesApiServiceImpl >>>>>>> org.apache.cxf.jaxrs.swagger.Swagger2ApiListingResource >>>>>>> org.apache
