没有架构的Java REST客户端

Cha*_*ert 10 java xml jax-rs jaxb

目标

Yahoo的HotJobsResuméResearchREST API的 Java客户端.

背景

我习惯为SOAP API编写Web服务客户端,其中wsimport生成代理存根,并且您已经关闭并运行.但这是一个REST API,对我来说是新的.

细节

进展

我看了一下问题Rest客户端的Java?,但是那里的自动化解决方案假设您同时提供服务器和客户端,在POJO上调用JAXB来生成模式和REST API.

使用Jersey(JAX-RS实现),我已经能够发出手动HTTP请求:

import com.sun.jersey.api.client.*;

...

ClientConfig clientConfig = new DefaultClientConfig();
Client client = Client.create(clientConfig);

WebResource webResource = client.resource("https://hj.yahooapis.com/v1/HJAuthTokens");
webResource.accept("application/xml");

// body is a hard-coded string, with replacements for the variable bits
String response = webResource.post(String.class, body);

// parse response into a org.w3c.dom.Document
// interface with Document via XPATH, or write my own POJO mappings
Run Code Online (Sandbox Code Playgroud)

响应可能如下所示:

<?xml version="1.0" encoding="utf-8"?>   
<Response>   
    <ResponseCode>0</ResponseCode>   
    <ResponseMessage>Login successful</ResponseMessage>
    <Token>NTlEMTdFNjk3Qjg4NUJBNDA3MkJFOTI3NzJEMTdDNDU7bG9jYWxob3N0LmVnbGJwLmNvcnAueWFob28uY29tO0pVNWpzRGRhN3VhSS4yQVRqRi4wWE5jTWl0RHVVYzQyX3luYWd1TjIxaGx6U0lhTXN3LS07NjY2MzM1OzIzNDY3NTsxMjA5MDE2OTE5OzZCM1RBMVNudHdLbl9VdFFKMFEydWctLQ==</Token>   
</Response>  
Run Code Online (Sandbox Code Playgroud)

或者,它看起来像:

<?xml version="1.0" encoding="utf-8"?>   
<yahoo:error xmlns:yahoo="http://www.yahooapis.com/v1/base.rng" xml:lang="en-US">   
    <yahoo:description>description</yahoo:description>   
    <yahoo:detail>   
        <ErrorCode>errorCode</ErrorCode>   
    </yahoo:detail>   
</yahoo:error>  
Run Code Online (Sandbox Code Playgroud)

问题

  • 有没有办法自动生成可以在没有正式架构的情况下编组/解组的POJO
  • 我应该尝试使用JAXB注释手动生成这些POJO 吗?
  • 是否有一些我应该利用的工具,所以我不必手动完成所有这些工作?

kdg*_*ory 3

有趣的是,他们提供了一个 HTTP URL 作为模式的命名空间 URI,但实际上并不在那里保存他们的模式。这可能是他们的疏忽,可以通过电子邮件或讨论列表发布来纠正。

一种方法是创建自己的模式,但这似乎是大量工作却收效甚微。鉴于消息如此简单,我想知道您是否需要 POJO 来包装它们?为什么不直接使用一个处理程序来使用 XPath 提取所需的数据呢?


编辑:来自过去的爆炸,但我看到了评论,重读了问题,并意识到第一句话很难理解。所以,澄清一下:

如果您要编写一个可公开访问的 Web 服务,一个非常好的习惯是让您的架构文档在您用于架构的命名空间 URI 的同一 URL 上可用——或者更好的是,让该 URL 成为一个完成的链接文档(W3C XSD 命名空间本身就是一个很好的示例:http ://www.w3.org/2001/XMLSchema )。