Can you check you have no SpringBoot configuration scanning
'org.apache.cxf.jaxrs.swagger' - the CXF demo does it and picks up
Swagger2Feature automatically - that will explain these warnings.
Can you also remove
feature.setBasePath("/api-docs") ?
FYI, Swagger UI resource does listen on this path but this will be
configurable.
Cheers, Sergey
On 16/08/16 16:35, jcrump wrote:
Yes, I am using a SpringBoot starter. So I took out the @Bean code and
replaced it with this:
@Bean
public Swagger2Feature swagger2Feature() {
Swagger2Feature feature = new Swagger2Feature();
feature.setResourcePackage("x.y.z.v1.rs");
feature.setTitle("My API");
feature.setBasePath("/api-docs");
return feature;
}
The JSON is being generated correctly and I'm only seeing one endpoint on
the services list:
Available RESTful services:
Endpoint address: http://localhost:8080/context/
Swagger : http://localhost:8080/context/api-docs?url=/context/swagger.json
When I click on the link, I get the Swagger UI but with no content. I get a
whole bunch of messages like this:
WARNING: Both
org.apache.cxf.jaxrs.swagger.Swagger2Feature$SwaggerUIService#getResource
and
org.apache.cxf.jaxrs.swagger.Swagger2Feature$SwaggerUIService#getResource
are equal candidates for handling the current request which can lead to
unpredictable results
and a FileNotFoundException:
Caused by: java.io.FileNotFoundException: JAR entry
META-INF/resources/webjars/swagger-ui/2.1.8-M1/api-docs/lib/swagger-oauth.js
not found in
/Users/jcrump/.m2/repository/org/webjars/swagger-ui/2.1.8-M1/swagger-ui-2.1.8-M1.jar
at
sun.net.www.protocol.jar.JarURLConnection.connect(JarURLConnection.java:142)
The problem is the "api-docs" in the META-INF path. I traced this in the
debugger to Swagger2Feature.SwaggerUIService#getResource; the resourcePath
being passed in is prefixed with api-docs whereas the jar entry path is not.
I tried removing the 'setBasePath' call in my @Bean method but it didn't
change anything.
BTW, I'm also getting the warning message when called to generate the JSON,
but the warning is this:
WARNING: Both io.swagger.jaxrs.listing.ApiListingResource#getListing and
io.swagger.jaxrs.listing.ApiListingResource#getListing are equal candidates
for handling the current request which can lead to unpredictable results
Same warning but different class. Sounds like a configuration or classpath
thing, but I couldn't detect any libraries duplicated on my classpath.
Thanks.
Thanks for making it work so far.
The question is, where is the first endpoint coming from, or rather why
do you see two endpoints as opposed to the one you create ?
Do use a SpringBoot starter with the auto-scan enabled ? That may create
the endpoint at the "/" address (note for me - make sure this is also
configurable in the auto-scan case)
I'll need to sign off now as it is getting late but please try to get
the only endpoint shown first and then we'll see what happens.
FYI, if you use the auto-scan then you can usually remove all the code
below but only keep a @Bean code returning Swagger2Feature because it is
configured, would not be needed otherwise (another note to myself - how
to auto-configure Swagger2Feature in SpringBoot given that
Swagger2Feature can be used without Spring too)
--
View this message in context:
http://cxf.547215.n5.nabble.com/Swagger2Feature-not-finding-Api-annotations-in-interfaces-tp5771115p5771637.html
Sent from the cxf-user mailing list archive at Nabble.com.