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 few
JPU> controls over scans [1], either beans or classes (I am off this week so
JPU> 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 class. So
JPU> no @Service annotations further exist. Still when checking the return of
JPU> *JAXRSUtils.**getRootResources*(Message message) via breakpoint I

JPU> Still notice that my service classes are listed twice in the return result
JPU> *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 registration of
JPU> 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 can
JPU> think of a possible double registration in this file is the declaration of
JPU> the OpenApiFeature (e.g. <bean id=”*KmopOpenApiFeature*” …> ) for each
JPU> resource endpoint in addition to the <jaxrs:server /> declaration using
JPU> this OpenApiFeature.

JPU> But I would assume that configuring the OpenApiFeature, through a bean
JPU> declaration, wouldn’t register a service.



JPU> The ‘imported’ resources context-v2.xml and onderneming-context.xml define
JPU> some <jaxws:client/> instances that have nothing to do with these JAX-WS/RS
JPU> endpoints declared in this file.



JPU> Is there something I can trace into to see when a service gets registered
JPU> 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 hence the
JPU> warning. It may come from the use of automatic resource scans and manual
JPU> 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) - Both
JPU> be.dvtm.aeo.op.openapi.api.impl.KmopDienstverlenerApiServiceImpl#getDvlById
JPU> and
JPU> be.dvtm.aeo.op.openapi.api.impl.KmopDienstverlenerApiServiceImpl#getDvlById
JPU> are equal candidates for handling the current request which can lead to
JPU> unpredictable results*

JPU> Obvious that they are equal candidates because they are the same class. But
JPU> what is the cause of this double detection?

JPU> Is it because when *JAXRSUtils.**getRootResources*(Message message)  gets
JPU> 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]>; 
[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 ("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 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/services

>>>>> /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/swagge

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



>>>>>>       &lt;accessToken&gt;'")})




>>>>>>       )




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

>>>>>> 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/ma

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


Reply via email to