Java 如何在Websphere中部署Swagger生成的JAXRS服务器代码

Java 如何在Websphere中部署Swagger生成的JAXRS服务器代码,java,jakarta-ee,websphere,swagger,websphere-liberty,Java,Jakarta Ee,Websphere,Swagger,Websphere Liberty,我在swagger中为Uber API示例生成了JAX-RS服务器代码。它是默认的Json,可以通过打开 现在我尝试在websphere中部署它,但我看到以下消息: Error 404: javax.servlet.ServletException: java.io.FileNotFoundException: SRVE0190E: File not found: /v1/swagger.json 当我访问此url时: 我没有对自动生成的代码做任何更改 我正在使用wlp-javaee7-8.5

我在swagger中为Uber API示例生成了JAX-RS服务器代码。它是默认的Json,可以通过打开

现在我尝试在websphere中部署它,但我看到以下消息:

Error 404: javax.servlet.ServletException: java.io.FileNotFoundException: SRVE0190E: File not found: /v1/swagger.json
当我访问此url时:

我没有对自动生成的代码做任何更改

我正在使用wlp-javaee7-8.5.5.9

以下是我的server.xml文件的外观:

<server description="new server">

<!-- Enable features -->
<featureManager>
    <feature>javaee-7.0</feature>
    <feature>localConnector-1.0</feature>
    <feature>apiDiscovery-1.0</feature>
</featureManager>    

<basicRegistry id="basic" realm="BasicRealm"> 
    <!-- <user name="yourUserName" password="" />  --> 
</basicRegistry>

<!-- To access this server from a remote client add a host attribute to the following element, e.g. host="*" -->
<httpEndpoint httpPort="9080" httpsPort="9443" id="defaultHttpEndpoint"/>

<!-- Automatically expand WAR files and EAR files -->
<applicationManager autoExpand="true"/>

<applicationMonitor updateTrigger="mbean"/>

<webApplication id="swagger-jaxrs-server" location="swagger-jaxrs-server.war" name="swagger-jaxrs-server"/>

我没有看到web.xml包含自动生成的代码。

此路径几乎可以工作:
http://localhost:9080/swagger-jaxrs server/swagger.json
用于服务json文件(其中swagger jaxrs server是隐含的上下文根),尽管它与生成的war中的
@ApplicationPath(“/”
重叠。但是

问题在于上下文根

swagger.json具有“
”基本路径“:/v1”
,但在生成的类中不包含任何内容来更改基本路径以包含v1,servlet容器在如何分配上下文根方面有一定的限制


我建议调整生成的重新启动应用程序,使其具有
@ApplicationPath(“/v1”)
,在这种情况下,
http://localhost:9080/swagger-jaxrs服务器/swagger.json
将用于检索json,和
http://localhost:9080/swagger-jaxrs服务器/v1/products
将匹配预期的REST端点。

此路径几乎可以工作:
http://localhost:9080/swagger-jaxrs server/swagger.json
用于服务json文件(其中swagger jaxrs server是隐含的上下文根),尽管它与生成的war中的
@ApplicationPath(“/”
重叠。但是

问题在于上下文根

swagger.json具有“
”基本路径“:/v1”
,但在生成的类中不包含任何内容来更改基本路径以包含v1,servlet容器在如何分配上下文根方面有一定的限制


我建议调整生成的重新启动应用程序,使其具有
@ApplicationPath(“/v1”)
,在这种情况下,
http://localhost:9080/swagger-jaxrs服务器/swagger.json
将用于检索json,和
http://localhost:9080/swagger-jaxrs服务器/v1/products
将匹配预期的REST端点。

我应该在哪里添加这个@ApplicationPath(“/v1”)。我没有看到任何扩展应用程序类的类。我应该创建新类吗?请看一下我问题中的更新部分。如果您使用“Jaxrs spec”风格生成代码,那么在生成的代码中,src/main/java/io/swagger/api/RestApplication.java,它最依赖于底层容器来完成工作,而对容器是什么的假设最少(JAX-RS生成器使用Jersey,它在应用程序服务器之间的移植并不总是很好)早些时候我使用了JAX-RS生成器。在你的建议之后,我使用了JAX-RS规范,一切都很好。想知道这两个生成器之间有什么区别。我想问一下你首先使用的是哪一个生成器。;)正如我所说,JAX-RS生成器依赖于Jersey,IIRC。有一个使用cxf,另一个使用RESTEasy。应该很容易比较生成的内容…我应该在哪里添加这个@ApplicationPath(“/v1”)。我没有看到任何扩展应用程序类的类。我应该创建新类吗?请看一下我问题中的更新部分。如果您使用“Jaxrs spec”风格生成代码,那么在生成的代码中,src/main/java/io/swagger/api/RestApplication.java,它最依赖于底层容器来完成工作,而对容器是什么的假设最少(JAX-RS生成器使用Jersey,它在应用程序服务器之间的移植并不总是很好)早些时候我使用了JAX-RS生成器。在你的建议之后,我使用了JAX-RS规范,一切都很好。想知道这两个生成器之间有什么区别。我想问一下你首先使用的是哪一个生成器。;)正如我所说,JAX-RS生成器依赖于Jersey,IIRC。有一个使用cxf,另一个使用RESTEasy。应该很容易比较生成的内容。。。
http://localhost:8080/swagger-jaxrs-server/estimates/price
http://localhost:8080/swagger-jaxrs-server/v1/estimates/price