java - 如何从现有的基于 XML 的 RESTful 服务创建 Java Jersey 客户端

标签 java xml web-services rest soap

我习惯于与 SOAP Web 服务集成,其中 wsdl 是可访问的,并且可用于使用 wsimport 生成 Java 客户端。我最近得到了一个 RESTful 端点,它使用 XML 作为负载类型。据我所知,没有可以访问的 WADL\Swagger YML 文件来获取服务的定义。

到目前为止我所知道的是:
1. 端点
2.它在HTTP基本身份验证后面运行
3.它接受POST
4. 我拥有的 3 个测试 XML 有效负载似乎都“有效”,返回与我正在尝试执行的操作相关的 XML 响应
5. URI 不会根据我执行的操作而改变,服务会根据不同的 XML 输入做出不同的 react (请求包含一个有效负载 ID 属性,它似乎指示正在执行的操作类型)

从上面来看,该服务看起来不太“像 REST”,它可能只是一个在端口上监听特定请求并执行粗略字符串操作来解析值,然后使用字符串连接粗略构建响应的进程。我知道在大多数情况下,REST 只是处于较低水平,但我希望以某种方式更好地管理服务的明显粗糙性。

鉴于我有针对似乎公开的 3 个不同操作的 XML 示例请求,我如何才能为此服务生成一个“干净”的 Java 客户端(类似于使用 wsimport 完成的操作)?

对于上述情况,我认为我需要自己创建 WADL\Swagger YML,或者也许有一个工具可以使用我必须动态构建这些定义的请求?

最佳答案

我们最终选择使用 Feign这是一个 Java 到 HTTP 客户端绑定(bind)器。它是 Netflix OSS,但似乎是一个较旧的库 (osslifecycle=archived)。

包装 HTTP 服务非常简单,因为它只有一个 URI,我们可以将 XML 负载发布到该 URI。我们从服务所有者处收到了 XSD,我们已将其转换为 JAXB 对象,然后在 Feign 调用中对其进行编码和取消编码。 Feign 有一个编码器和解码器的概念,您可以使用它们来编写自己的映射器或使用提供的映射器(JAXBEncoder\JAXBDecoder)。

关于java - 如何从现有的基于 XML 的 RESTful 服务创建 Java Jersey 客户端,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39184224/

相关文章:

java - 如何为 Java 8u141 签署 Java Webstart 应用程序?

java - 尝试运行 Java 应用程序时出现 Eclipse 错误 - "Selection does not contain a main type"- 但确实如此?

android - TextInputLayout 更改焦点上的开始图标色调颜色

web-services - 在经典 ASP 中使用 SOAP Web 服务

ios - 查看 ios 应用发出的 http 请求

Android Wear + 网络服务调用

java - 如何将此 XML 文件解析为 MySQL 表?

java - 在 Java 中使用多个命名空间验证 XML

xml - XSD - 元素嵌套在同名元素中 - 是否合适?

java - SonarQube:创建自定义规则以获取类中的自定义注释