与Apache CXF类似的模块,有OpenLiberty。选择Apache CXF的原因是,OFBiz中已经引入了cxf-rt-frontend-jaxrs。
这里使用的CXF版本是3.5.7,Tomcat版本是9.0.75。
-
下载cxf源码
-
进入distribution/src/main/release/samples/jax_rs/description_openapi_v3_web目录
-
运行mvn package命令,编译出jax_rs_description_openapi_v3_web.war
-
将jax_rs_description_openapi_v3_web.war重命名为petstore.war,部署到Tomcat中
-
修改petstore/WEB-INF/classes/openapi-configuration.json:
"url": "/app",改为:
"url": "/petstore/app", -
重启Tomcat,访问http://localhost:8080/petstore/app/openapi.json,可以看到openapi文档,如下图所示:
-
根据上一步得到的openapi文档,访问http://localhost:8080/petstore/app/sample,可以看到返回的json数据
-
经尝试,WEB-INF/lib/下,与openapi无关的jar可以删除,如glassfish-corba*.jar、pfl-.jar、geronimo-.jar等
在sand-openapi模块中,webapp目录下,新建petstore目录:
-
在sand-openapi/build.gradle中,添加依赖:
pluginLibsCompile 'jakarta.xml.ws:jakarta.xml.ws-api:2.3.3', 'org.apache.cxf:cxf-rt-rs-service-description-openapi-v3:3.5.7'
-
在sand-openapi/src/main/中,添加demo/jaxrs/openapi/server目录,在其中添加Item.java和Sample.java。
-
在sand-openapi/config/中,添加cxf-openapi-v3-sample.json文件,内容如下:
{ "resourcePackages": [ "demo.jaxrs.openapi.server" ], "prettyPrint": true, "cacheTTL": 0, "openAPI": { "info": { "version": "1.0.0", "title": "Sample API", "description": "A sample API", "contact": { "email": "cxf-dev@apache.org" }, "license": { "name": "Apache 2.0", "url": "http://www.apache.org/licenses/LICENSE-2.0.html" } }, "servers": [ { "url": "/petstore/app", "description": "The sample API server" } ] }, "userDefinedOptions": { "support.swagger.ui": true } }注意:"url": "/petstore/app"这一行,/app在下面的web.xml的CXFServlet定义。
-
在sand-openapi/webapp/petstore/WEB-INF/中,新建web.xml文件,内容如下:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"> <display-name>CXF OpenAPI v3.0 Sample</display-name> <servlet> <display-name>CXF Servlet</display-name> <servlet-name>CXFServlet</servlet-name> <servlet-class>org.apache.cxf.jaxrs.servlet.CXFNonSpringJaxrsServlet</servlet-class> <init-param> <param-name>jaxrs.serviceClasses</param-name> <param-value>demo.jaxrs.openapi.server.Sample</param-value> </init-param> <init-param> <param-name>jaxrs.features</param-name> <param-value>org.apache.cxf.jaxrs.openapi.OpenApiFeature(cxf-openapi-v3-sample.json)</param-value> </init-param> <init-param> <param-name>jaxrs.providers</param-name> <param-value> com.fasterxml.jackson.jaxrs.json.JacksonJsonProvider </param-value> </init-param> <load-on-startup>1</load-on-startup> </servlet> <servlet-mapping> <servlet-name>CXFServlet</servlet-name> <url-pattern>/app/*</url-pattern> </servlet-mapping> </web-app>
-
启动ofbiz
-
编辑vuejs/openapi/vite.config.js,添加proxy设置:
server: { proxy: { '/sanddav': { target: 'https://localhost:8443', changeOrigin: true, secure: false, }, '/openapi/control': { target: 'https://localhost:8443', changeOrigin: true, secure: false, followRedirects: true, }, '/petstore/app': { target: 'https://localhost:8443', changeOrigin: true, secure: false, }, '/sample': { target: 'https://localhost:8443/petstore/app', changeOrigin: true, secure: false, }, } } -
启动vite-vue3
-
在浏览器中,访问http://localhost:5173/viewfile?fileUri=/petstore/app/openapi.yaml,如下图所示:
可以在swagger-ui中,点击各个接口的“Try it out”按钮,尝试调用接口,验证返回结果。