使用Java客户端应用程序中的JSON Web服务

时间:2010-12-27 01:43:42

标签: java web-services json axis2 java-client

我正在开发一个客户端Java应用程序,它具有一些功能,需要从一些以JSON传输的Web服务中获取数据(一些是RESTful,一些不是)。没有JavaScript,没有Web浏览器,只是一个普通的JAR文件,它将使用Swing为GUI本地运行。

这不是一个新的或独特的问题;肯定有一些开源库可以通过HTTP处理JSON数据传输。我已经发现了一些将解析JSON的东西,但是我找不到任何可以处理HTTP通信来使用JSON Web服务的东西。

到目前为止,我发现Apache Axis2显然可能至少有部分解决方案,但我没有看到足够的文档知道它是否能满足我的需求,或者如何使用它。也许问题的一部分是我没有Web服务的经验,所以当我看到它时,我无法知道解决方案。我希望你们中的一些人能指出我正确的方向。例子很有用。

4 个答案:

答案 0 :(得分:5)

如果您想要比处理URLConnection更舒适一点,请查看Resty for Java。 简单,轻巧,但仍然很新。

http://beders.github.com/Resty

以下是JSON的示例:

Resty r = new Resty();
String name = r.json("http://ws.geonames.org/postalCodeLookupJSON?"+
    "postalcode=66780&country=DE").get("postalcodes[0].placeName").toString();

没有依赖关系。一个小JAR,你很高兴。

答案 1 :(得分:4)

Apache HttpClient 4.0 是业内最好的,并且中等易学。

如果您想要更轻松,可以使用HtmlUnit来模仿浏览器的行为,这样您就可以轻松获取内容(并将其解析为Html,javascript和css,您还可以在内容上执行javascript代码,这样您就可以可能会将JSON文件解析为使用网页上任何页面的JSON.parse或任何其他等效函数。

所以对于HtmlUnit,这里有一个示例代码:

WebClient wc = new WebClient(BrowserVersion.FIREFOX_3_6);
HtmlPage page = wc.getPage("http://urlhere");
page.executeJavaScript("JS code here");

但是对于您的要求可能相当重,因此强烈建议使用 HttpClient 库。 我相信你可以找到很多适用于Java的JSON库,但这里有一个适合你的json-lib

答案 2 :(得分:1)

我是使用简单的Java JSON库完成的。使用Google库..

URL url = new URL("http://www.siteconsortium.com/services/hello.php");
BufferedReader in = new BufferedReader(new InputStreamReader(url.openStream()));

JSONParser parser=new JSONParser();
Object object = parser.parse(in);

JSONArray array = (JSONArray) object;        
JSONObject object2 = (JSONObject)array.get(0);
System.out.println(object2.get("hello")); 

如果使用OAuth的Web服务和访问令牌,您无法使用上述示例。

答案 3 :(得分:0)

很高兴看到您的Web服务是RESTful的。 RESTful Web服务很容易开发和使用。很好......你不需要特别小心通过网络传输JSON数据......数据是否以XML格式的JSON格式嵌入到HTTP头中..以下代码片段将帮助您理解这个想法:

httpConnection = new HTTPConnectionManager(request);
HttpURLConnection httpURLConnection = httpConnection.connect();
int responseCode = httpURLConnection.getResponseCode();
if (responseCode == HttpURLConnection.HTTP_OK) {
    in = httpURLConnection.getInputStream();
    int x;
    StringBuilder stringBuilder = new StringBuilder();
    while ((x = in.read()) != -1) {
        stringBuilder.append((char) x);
    }
    XMLParser xmParser = new XMLParser();
    ....
    ....
}

在这段代码中,我从Web服务接收XML格式的数据。在将数据接收到StringBuilder对象后,我正在解析XML。以同样的方式,您可以使用此代码调用Web服务,并可以接收您的JSON数据。您可以使用 Here 提供的javaJSON API从JSON表示法中提取数据。

希望代码会帮助你...

PS:HTTPConnectionManagerXMLParserRequestrequest个对象)类不是任何标准API。它们由我自己的帐户编写,用于处理多个Web服务调用。这段代码只是为了给你我的想法。