【问题标题】:How to deploy Swagger generated JAXRS server code in Websphere如何在 Websphere 中部署 Swagger 生成的 JAXRS 服务器代码
【发布时间】:2016-09-12 22:48:22
【问题描述】:

我在 swagger 中为 Uber API 示例生成了 JAX-RS 服务器代码。是默认的Json,打开http://editor.swagger.io/#/可以找到

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

Error 404: javax.servlet.ServletException: java.io.FileNotFoundException: SRVE0190E: File not found: /v1/swagger.json

当我访问这个网址时:http://localhost:9080/swagger-jaxrs-server/v1/swagger.json

我没有对自动生成的代码进行任何更改。

我正在使用 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"/>

有人能指出这里缺少什么吗?

更新:1

此 URL 工作正常:http://localhost:8080/swagger-jaxrs-server/swagger.json。这是 Json 的一部分:

所以,我尝试了以下两个网址.. 但都没有工作。

http://localhost:8080/swagger-jaxrs-server/estimates/price
http://localhost:8080/swagger-jaxrs-server/v1/estimates/price

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

【问题讨论】:

    标签: java jakarta-ee websphere swagger websphere-liberty


    【解决方案1】:

    这条路径几乎可以工作:http://localhost:9080/swagger-jaxrs-server/swagger.json 用于提供 json 文件(其中 swagger-jaxrs-server 是隐含的上下文根),尽管它与生成的战争中的 @ApplicationPath("/") 重叠。但是……

    问题在于上下文根。

    swagger.json 有 "basePath" : "/v1",但在生成的类中不包含任何内容来更改基本路径以包含 v1,并且 servlet 容器在分配上下文根的方式上有些限制。

    我建议调整生成的 RestApplication,使其具有 @ApplicationPath("/v1"),在这种情况下,http://localhost:9080/swagger-jaxrs-server/swagger.json 可以检索 json,http://localhost:9080/swagger-jaxrs-server/v1/products 将匹配预期的 REST 端点。

    【讨论】:

    • 我应该在哪里添加这个@ApplicationPath("/v1")。我没有看到任何扩展应用程序类的类。我应该创建新课程吗?请查看我的问题中的更新部分。
    • 在生成的代码中,src/main/java/io/swagger/api/RestApplication.java 如果您使用“Jaxrs spec”风格生成,它最依赖底层容器来执行对容器是什么做最少的假设(JAX-RS 生成器使用 Jersey,它并不总是在应用服务器之间很好地移植)
    • 之前我使用了 JAX-RS 生成器。根据您的建议,我使用了 Jaxrs 规范,一切正常。想知道这两个生成器之间有什么区别。
    • 我想问你先用哪个生成器。 ;) 正如我所说,JAX-RS 生成器依赖于 Jersey, IIRC。有一个使用 cxf,另一个用于 RESTEasy。应该很容易比较生成的内容...
    猜你喜欢
    • 1970-01-01
    • 2017-02-24
    • 1970-01-01
    • 2020-06-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多