在CXF中使用javax.ws.rs.client.ClientBuilder创建客户端,任何路由都能够使用本地传输?

2024-04-24

我正在开发一个使用标准的代码库“javax.ws.rs.client.ClientBuilder“类,来自 CXF 发行版,用于配置和创建”javax.ws.rs.client.Client".

这已经足够好了。

我现在正在尝试编写使用的测试JAXRSServerFactoryBean使用内联类定义的控制器来管理假服务器。我可以在测试和客户端配置中将我的 host:port 设置为 localhost:something,这足以让我测试我们的 MessageBodyReaders 和 Http 异常处理。

但是,我认为这不会是“可扩展的”,因为每个假服务器都必须在“专用”端口上运行(至少在运行测试时)。我可以尝试使用不常见的端口,并让不同的测试使用不同的端口,或者使用随机数,但这都有一定的风险。我真的不希望 CI 构建失败,因为并行运行的测试最终使用相同的端口。

我读到了 CXF(不是 JAX-RS)使用“本地传输”的能力(https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing https://cwiki.apache.org/confluence/display/CXF20DOC/JAXRS+Testing)。看来这可能会解决我的问题。我需要验证这一点,但使用本地传输并行运行的两个测试可能不会发生冲突。

然而,我什至还无法让它工作,因为我们的客户端代码使用的是“标准”JAX-RS 客户端类,而不是 CXF 客户端类。它们看起来不同且不相容。

在创建客户端时,我尝试这样做(只是为了看看它是否可以工作):

WebClient.getConfig(client).getRequestContext().put(LocalConduit.DIRECT_DISPATCH, Boolean.TRUE);

不幸的是,这失败了,并显示“不是有效的客户端”org.apache.cxf.jaxrs.client.WebClient.getConfig(Object)“因为它需要是一个实例”org.apache.cxf.jaxrs.client.Client", not javax.ws.rs.client.Client.

这里有任何简单(甚至可能)的前进道路吗?


您可以使用客户端请求过滤器 https://jax-rs.github.io/apidocs/2.1/javax/ws/rs/client/ClientRequestFilter.html对 JAX-RS 客户端进行单元测试。基本上将自定义 ClientRequestFilter 注册到您的 Client 对象(或 ClientBuilder),该对象使用以下方式模拟您的响应abortWith(Response)方法上的ClientRequestContext传递给过滤器方法的对象。

像这样的东西应该有效:

public MyMockRequestFilter implements ClientRequestFilter {
  @Override
  public void filter(ClientRequestContext requestContext) {
    MyEntity entity = // get the entity you want to mock as returned from the server
    requestContext.abortWith(Request.ok(entity).build());
  }
}
...
ClientBuilder builder = ClientBuilder.newBuilder().register(MyMockRequestFilter .class)

希望这可以帮助, 安迪

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在CXF中使用javax.ws.rs.client.ClientBuilder创建客户端,任何路由都能够使用本地传输? 的相关文章

随机推荐

  • 当我使用设置数据时,Flutter firestore 会覆盖数据

    我一直在尝试将数据添加到我的 firestorm 数据库中的部分 我有一个集合 gt 文档 gt 数据字段 每当我使用 setData key value 时 它总是会覆盖文档中已有的数据 有没有办法解决 那是因为什么setData obj
  • Windows Phone 8 HttpClient Get 方法返回奇怪的结果

    我正在开发一个 Windows Phone 8 应用程序 它将一些数据发送到服务器 服务器执行该数据并返回结果 可以随时查询服务器以获取当前执行的状态 可以是正在初始化 正在运行或已完成 仅当执行处于完成状态时输出才可用 用户可以选择通过按
  • Extjs 5,数据模型关联和加载嵌套数据

    试图让这项工作 我想在两个对象模型上加载嵌套数据 Ext application name MyApp launch function Ext define MyApp model Address extend Ext data Model
  • 在javascript中读取excel是将长数字转换为指数

    我正在使用 SheetJs 读取 Excel 文件 但问题是它正在转换长数字 例如3577888990098指数般3 52E 12 这个问题并不重复 因为 文件列可以是随机的 系统不会知道哪些是数字 哪些是字符串 按字母顺序 或两者 那么如
  • 什么是 AABB - 碰撞检测?

    嗨 我正在制作一个体素游戏Java在研究我需要学习的所有不同东西时 我注意到很多游戏都使用AABB用于碰撞检测 然后我记得看到AABB在 我的世界 中也有 但是当我用谷歌搜索什么时AABB也就是说 它只是提出了其他人的代码 或者历史书上的某
  • Exchange Web 服务托管 API:访问其他用户项目

    是否可以访问除登录用户之外的其他 Exchange 帐户的文件夹和项目 我可以通过 Exchange Web 服务托管 API 执行此操作吗 是的 这是可能的 但您应该知道其他用户的密码或以某种方式获取此凭据 NetworkCredenti
  • 如何使用 @ngrx/data 自定义我的减速器?

    我正在学习使用 ngrx data 确实 使用该库我推进了很多代码 但在个性化它时我遇到了问题 我已经了解了如何将字段添加到集合中 export const entityMetadata EntityMetadataMap User add
  • iframe 不适用于 iOS(离子框架)

    我为 iOS 和 Android 开发了一个带有 ionic 框架的应用程序 安卓上没有问题 但是 尽管 iframe 在 Android 和浏览器中运行良好 但它在 iOS 设备和模拟器中没有显示任何内容 请帮我 尝试将其添加到您的 co
  • C 中浮点数的比较

    我有一个double打印为0 000000我试图将其与0 0f 不成功 为什么这里有区别呢 确定双精度数是否为零的最可靠方法是什么 确定它是否足够接近零以将其打印为0 000000精确到小数点后六位 例如 fabs d lt 0 00000
  • Google Maps API 多边形文物在缩放上显示

    我有一个使用 JS API 构建的 Google 地图 其中包含英国不同地区的多边形 在 Chrome 已测试 v58 和 v60 上 当用户使用滚轮放大或缩小时 多边形的随机伪像会卡在地图上 进一步缩放可以消除它们或显示不同的伪影 在 F
  • 在虚拟机共享目录上运行“grunt”

    将 Vagrant 与 Windows 主机和 Linux 客户机一起使用 grunt尝试运行作业时返回以下错误 据我了解 在主机 来宾共享目录中 此文件路径超出了 Windows 的 255 个字符限制 npm ERR Error EPE
  • 如何将 UIPopoverView 显示为地图视图的注释? (iPad)

    在 iPad 的地图应用程序上 当您点击图钉时 您会看到带有 i 的普通注释 而不是公开指示符 进一步点击 i 会显示一个像这样的弹出视图控制器 有没有办法可以轻松实现这一目标 首先在地图上添加注释viewForAnnotation方法 设
  • 如何在 PyCharm 中自动运行 Main.py

    我更喜欢在我的项目中使用类似 Java 的组织 例如 每个班级都有不同的 py文件和类Main 其中仅包含 main 函数 每次我对一个类进行更改时 我都需要单击 Main 并运行代码 Ctrl Shift F10 从那里 我该如何定义我的
  • Rails 计数器缓存与计算

    我有一个想要显示总计的集合 其想法是为我需要的每个总计使用缓存 然而 我还需要深入研究数据集 所以很可能无论如何我都必须加载该集合 那么我应该仍然使用缓存还是只使用计算 正如斯蒂芬 奥唐纳 Stephen ODonnell 所说 取决于藏品
  • 如何使用 Kotlin 在 Android 中压缩照片

    现在这是我从智能手机拍照的代码 问题是图像非常大 我想压缩它 有一些帮助或想法吗 谢谢 你的 信息 执行 abrirCamara 方法 private fun abrirCamara val values ContentValues val
  • Facebook 帖子,图片托管在公共 CDN 上

    Facebook 似乎屏蔽了我引用的任何由 CDN 支持的图像 这是真的 有办法解决这个问题吗 是否有文档说明您可以在帖子的 图片 参数中引用哪些内容以及不能引用哪些内容 是的 Facebook 禁止您在帖子 分享等中使用其 CDN 中的图
  • 如何将Stripe支付集成到Yii2中?

    我有以下代码 它运行时没有错误 但它不会将资金插入到 Stripe 服务器上 Stripe 库已正确安装 配置文件
  • BERT - 池化输出与序列输出的第一个向量不同

    我在 Tensorflow 中使用 BERT 有一个细节我不太明白 根据文档 https tfhub dev google bert uncased L 12 H 768 A 12 1 https tfhub dev google bert
  • 如何从 Objective-C 中的方法返回 C 数组?

    我有一个返回变量的函数 我想知道如何返回一个数组 问题是它不是 NSArray 它只是一个像这样的平均 C 数组 b2Fixture addFixturesToBody b2Body body forShapeName NSString s
  • 在CXF中使用javax.ws.rs.client.ClientBuilder创建客户端,任何路由都能够使用本地传输?

    我正在开发一个使用标准的代码库 javax ws rs client ClientBuilder 类 来自 CXF 发行版 用于配置和创建 javax ws rs client Client 这已经足够好了 我现在正在尝试编写使用的测试JA