cxf-rs 和 swagger 的点

时间:2022-12-16 14:37:07

1. 从web.xml 说起

    <servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>

如果这样配置,所有的请求都走CXF(意思是作为一种资源进行请求) ,就无法访问 swagger UI ,所以不能配置成/*

应该如下配置:

<?xml version="1.0" encoding="utf-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd"
version="2.4">
<display-name>JAX-RS Simple Service</display-name>
<description>JAX-RS Simple Service</description>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/beans.xml</param-value>
</context-param>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<servlet>
<servlet-name>CXFServlet</servlet-name>
<servlet-class>org.apache.cxf.transport.servlet.CXFServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>CXFServlet</servlet-name>
<url-pattern>/api/*</url-pattern>
</servlet-mapping>
</web-app>

这样做{协议}{host}{port}{项目}{资源}

补充welcome files:http://docs.oracle.com/javaee/5/tutorial/doc/bnaeo.html#bnaer

The welcome files mechanism allows you to specify a list of files that the web container will use for appending to a request for a URL (called a valid partial request) that is not mapped to a web component.

例如:访问 http://localhost:8080/cxf-rs/

则会自动访问webapp 下的 index.XXX

2. swagger UI

You can use the swagger-ui code AS-IS! (原样)

把`dist` folder 下的文件copy 到 webapp下

或者(如果觉得乱)copy到webapp下的指定文件夹下 例如:webapp/swagger

maven 的 webapp 最终生成war包后,不存在webapp ,项目目录即是webapp

一般来看如下:

cxf-rs 和 swagger 的点

出于安全考虑,非静态资源应该放在WEB-INF 里面。

如果想要实现以上效果,需要:

①配置welcome file 并将`dist` 中 index.html 的资源相对路径(src or href)修改为 swagger/..........

cxf-rs 和 swagger 的点

②配置welcome list

    <welcome-file-list>
<welcome-file>swagger/index.html</welcome-file>
</welcome-file-list>

然后访问 http://localhost:8080/cxf-rs/

又出现了 swagger ui  页面

如果想要修改为 index.jsp 需要执行以下操作:

①新建一个jsp文件

<%@ page language="java" contentType="text/html; charset=utf-8"
pageEncoding="utf-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>Swagger UI JSP</title>

②将welcome list 修改为 swagger/index.jsp

3. web service 与 web project

cxf-rs 和 swagger 的点

被CXF 拦截的 url 是作为RESTful 资源访问,一般返回JSON

cxf-rs 和 swagger 的点

非CXF拦截的url是访问webapp 资源,页面跳转

这两种访问必须分清楚。

4.swagger 配置

https://github.com/swagger-api/swagger-core/wiki/Swagger-Core-RESTEasy-2.X-Project-Setup-1.5

spring 方式

    <bean id="swaggerConfig" class="io.swagger.jaxrs.config.BeanConfig">
<property name="resourcePackage" value="cn.zno.resource" />
<property name="version" value="1.0.0" />
<property name="host" value="localhost:8080/cxf-rs" />
<property name="basePath" value="/api" />
<property name="title" value="Swagger Petstore" />
<property name="description" value="This is a app." />
<property name="contact" value="apiteam@swagger.io" />
<property name="license" value="Apache 2.0" />
<property name="licenseUrl" value="http://www.apache.org/licenses/LICENSE-2.0.html" />
<property name="scan" value="true" />
</bean>

重要属性:

resourcePackage :JAX-RS 的资源包

host:访问文档地址

basePath :所有的资源url pattern 再追加,例如:某个java类中的资源@Path("/user") ,则这个资源最终是 api/user

其他属性:

title:这组api标题

contact:联系方式

前置:

    <!-- /* -->
<!-- * resource -->
<!-- * / -->
<bean id="swaggerResource" class="io.swagger.jaxrs.listing.ApiListingResource" /> <!-- /* -->
<!-- * provider -->
<!-- * / -->
<bean id="swaggerWriter" class="io.swagger.jaxrs.listing.SwaggerSerializers" />

第一个是接收url请求( swagger.json / swagger.yaml )

第二个是将 swagger object 打印输出 ,交由swagger ui 展示

cxf-rs 和 swagger 的点的更多相关文章

  1. WebService 之CXF&lpar;rs&rpar;之HelloWorld

    1.建立mavenjava项目 <project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http ...

  2. ajax跨域访问 java controller 和 cxf&lpar;webservice&rpar; 配置方式(CORS)

    1. controller跨域访问,配置方式 重点在这里: <mvc:cors> <mvc:mapping path="/*" allowed-origins=& ...

  3. WebService--使用 CXF 开发 REST 服务

    现在您已经学会了如何使用 CXF 开发基于 SOAP 的 Web 服务,也领略了 Spring + CXF 这个强大的组合,如果您错过了这精彩的一幕,请回头看看这篇吧: Web Service 那点事 ...

  4. CXF 开发 REST 服务

    今天我们将视角集中在 REST 上,它是继 SOAP 以后,另一种广泛使用的 Web 服务.与 SOAP 不同,REST 并没有 WSDL 的概念,也没有叫做"信封"的东西,因为 ...

  5. webService之helloword&lpar;java&rpar;rs

    webservice之rs(helloworld) 1.pom.xml文件 <dependencies> <!-- 使用CXF RS开发 --> <dependency& ...

  6. SSH集成cxf 发布restful webservice

    首先讲一下什么是restful webservice ,这个问题网上一搜有很多博文去长篇大论的介绍它,但是最后你看完了也会觉得云里雾里的,所以我在这里简单的讲一下我理解的rest webservice ...

  7. webservice之jax-rs实现方式

    1.什么叫restful风格 restful是一组架构约束条件和原则,满足这些约束条件和原则的应用程序即是restful风格. 2.jax-rs实现步骤 1.创建一个简单应用(略) 2.添加依赖jar ...

  8. distributed OSGI demo

    今天继续<OSGi原理与最佳实践>.看到第四章.做 HelloWorld-cxf 的样例 照着样例敲来着,整个样例敲完了,执行.一直报错, ----------------这里是解决方法- ...

  9. WebService基础入门 CXF&lpar;WS &plus; RS&rpar;

    一.基本介绍 Web Services是一个软件接口,它描述了一组可以在网络上通过标准化的 XML 消息传递访问的操作.它使用基于 XML 语言的协议来描述要执行的操作或者要与另一个 Web 服务交换 ...

  10. Spring 、 CXF 整合 swagger 【试炼】

    官网:http://swagger.io/ http://swagger.io/specification/ 上面就是描述了什么是 SWAGGER OBJECT 2. 如何用jax-rs 注解方式产生 ...

随机推荐

  1. Txt格式配置表无法解析的问题——BOM

    今天再次遇到同一个问题:策划给来一个Txt格式配置表,我用解析类去读取,返回的结果为空.解析类参数是:主键key,文件名fileName,错误提示errorTip. 写读取语句的时候,主键key我是直 ...

  2. 由浅入深了解Thrift之服务模型和序列化机制

    一.Thrift介绍 Thrift是一个软件框架,用来进行可扩展且跨语言的服务的开发.它结合了功能强大的软件堆栈和代码生成引擎.其允许你定义一个简单的定义文件中的数据类型和服务接口.以作为输入文件,编 ...

  3. nodejs开发微信1——微信路由设置a(access&lowbar;token和tickets)

    /* jshint -W079 */ /* jshint -W020 */ "use strict"; var _ = require("lodash"); v ...

  4. IDFA的值什么时候会发生改变

    在何种情况下 , 应用的IDFA值会发生改变? 近期工作中须要获得一个能够唯一地标示每个不同应用的ID,之前的苹果UDID已经不让使用了. 那么我们须要使用新的IDFA来引用.可是在某些情况下这个ID ...

  5. 利用final定义方法:这样的方法为一个不可覆盖的方法。

      常量(这里的常量指的是实例常量:即成员变量)赋值: ①在初始化的时候通过显式声明赋值.Final int x=3: ②在构造的时候赋值. 局部变量可以随时赋值.   利用final定义方法:这样的 ...

  6. OpenStack 安装:nova服务

    上一篇介绍了glance,并且成功创建了一个镜像,这一篇介绍Nova. 首先创建Nova用户,需要记得先source环境变量,然后创建Nova用户,并设置密码为nova [root@linux-nod ...

  7. 转:jdk动态代理实现

    原文链接: jdk动态代理 注:文章中用常用的流程实现 动态代理,流程逻辑比较清晰.文章后面对 “为什么要使用接口” 原理分析还未细看. jdk的动态代理为什么用接口,内部是什么原理呢?看了几篇文章貌 ...

  8. 【Python全栈-HTML】HTML入门

    HTML入门介绍 参考: https://www.bilibili.com/video/av21663728/?p=339 http://www.cnblogs.com/yuanchenqi/arti ...

  9. linux常见问题解决

    1.登录环境故障的原理及解决办法? -bash-4.1$ -bash-4.1$ cp /etc/skel/.bash* .

  10. Codeforces Round &num;505 &lpar;Div 1 &plus; Div 2&rpar; &lpar;A~D&rpar;

    目录 Codeforces 1025 A.Doggo Recoloring B.Weakened Common Divisor C.Plasticine zebra D.Recovering BST( ...