【发布时间】:2018-03-08 01:41:14
【问题描述】:
我正在尝试创建 2 个 Swagger 实例 unser 2 个不同的上下文:
http://localhost:8080/app/rest1/swagger.json
http://localhost:8080/app/rest2/swagger.json
所以我有第一个运行良好的实例 (http://localhost:8080/app/rest1/swagger.json):
context1.xml
<context:component-scan base-package="org.app.rest.cxf.service"/>
<bean id="swagger2customizer" class="org.apache.cxf.jaxrs.swagger.Swagger2Customizer">
<property name="dynamicBasePath" value="true"/>
<property name="replaceTags" value="true"/>
</bean>
<bean id="swagger2Feature" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
<property name="title" value="Test"/>
<property name="version" value="1.0"/>
<property name="description" value="Test 1.0"/>
<property name="contact" value="dev@syncope.apache.org"/>
<property name="resourcePackage" value="org.app.rest.api.service"/>
<property name="scanAllResources" value="true"/>
<property name="activateOnlyIfJaxrsSupported" value="true"/>
<property name="customizer" ref="swagger2customizer"/>
</bean>
<jaxrs:server id="container" address="/"
basePackages="org.app.rest.api.service, org.app.rest.cxf.service"
staticSubresourceResolution="true">
<jaxrs:properties>
<entry key="search.lax.property.match" value="true"/>
<entry key="convert.wadl.resources.to.dom" value="false"/>
</jaxrs:properties>
<jaxrs:inInterceptors>
<ref bean="gzipInInterceptor"/>
<ref bean="validationInInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="gzipOutInterceptor"/>
<ref bean="validationOutInterceptor"/>
</jaxrs:outInterceptors>
<jaxrs:providers>
<ref bean="dateParamConverterProvider"/>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
<ref bean="exceptionMapper"/>
<ref bean="searchContextProvider"/>
<ref bean="addDomainFilter"/>
<ref bean="addETagFilter"/>
<ref bean="wadlGenerator"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature"/>
</jaxrs:features>
</jaxrs:server>
所以访问http://localhost:8080/app/rest1/swagger.json 会生成包含我所有端点的完整 json。 我尝试配置第二个 Swagger,它引用了不同包下的其他服务:
context2.xml
<context:component-scan base-package="com.app2.rest.cxf.service"/>
<bean id="swagger2customizer2" class="org.apache.cxf.jaxrs.swagger.Swagger2Customizer">
<property name="dynamicBasePath" value="true"/>
<property name="replaceTags" value="true"/>
</bean>
<bean id="swagger2Feature2" class="org.apache.cxf.jaxrs.swagger.Swagger2Feature">
<property name="title" value="Test"/>
<property name="version" value="1.0"/>
<property name="description" value="Test 1.0"/>
<property name="contact" value="dev@syncope.apache.org"/>
<property name="resourcePackage" value="com.app2.rest.api.service"/>
<property name="scanAllResources" value="true"/>
<property name="activateOnlyIfJaxrsSupported" value="true"/>
<property name="customizer" ref="swagger2customizer2"/>
</bean>
<jaxrs:server id="container" address="/"
basePackages="com.app2.rest.api.service, com.app2.rest.cxf.service"
staticSubresourceResolution="true">
<jaxrs:properties>
<entry key="search.lax.property.match" value="true"/>
<entry key="convert.wadl.resources.to.dom" value="false"/>
</jaxrs:properties>
<jaxrs:inInterceptors>
<ref bean="gzipInInterceptor"/>
<ref bean="validationInInterceptor"/>
</jaxrs:inInterceptors>
<jaxrs:outInterceptors>
<ref bean="gzipOutInterceptor"/>
<ref bean="validationOutInterceptor"/>
</jaxrs:outInterceptors>
<jaxrs:providers>
<ref bean="dateParamConverterProvider"/>
<ref bean="jaxbProvider"/>
<ref bean="jsonProvider"/>
<ref bean="exceptionMapper"/>
<ref bean="searchContextProvider"/>
<ref bean="addDomainFilter"/>
<ref bean="addETagFilter"/>
<ref bean="wadlGenerator"/>
</jaxrs:providers>
<jaxrs:features>
<ref bean="swagger2Feature2"/>
</jaxrs:features>
</jaxrs:server>
web.xml
<servlet>
<servlet-name>AppSwaggerCXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<init-param>
<param-name>config-location</param-name>
<param-value>classpath*:/context2.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>AppSwaggerCXFServlet</servlet-name>
<url-pattern>/sih/*</url-pattern>
</servlet-mapping>
问题在于第二个 URL http://localhost:8080/app/rest2/swagger.json 生成一个 JSON,其中所有端点都在第一个 Swagger 配置的包下(所以在org.app.rest.api.service 下而不是com.app2.rest.api.service 下)。
您能帮我获得正确的配置吗?
谢谢
【问题讨论】:
-
我们的项目面临着完全相同的问题。你最终以某种方式解决了这个问题吗?谢谢