0

我正在使用 webservices 使用 ksoap2 库将 android 应用程序与服务器端连接起来。问题是,尽管阅读了各种相关的东西,我仍然对 marshaling、searlizing、desearlizing 等术语感到困惑。它们之间究竟有什么区别?以及为什么我们需要这样做。我只知道它只与网络服务有关,它基本上是为从网络服务传递或返回值而完成的。为什么我们实际上需要它们,以及我们如何实际对这些东西进行searlize 或desearlize 或网络服务器本身为我们提供了这个功能???我们需要在客户端或 Web 服务本身编写编组或序列化代码吗?无论如何,我们没有' 不必这样做并以不需要对这些东西进行searlize或desearlize的方式调用Web服务,或者我们可以在项目中包含的任何库来自动执行它?请指导

4

1 回答 1

0

编组/序列化、解组/反序列化在 Web 服务世界中经常互换使用,基本上它们的含义相同。

向 Web 服务发送请求时,您需要以某种方式构建它,如果它是REST Web 服务,则请求/响应的格式通常为XMLJSON

如果它是SOAP Web 服务,则格式为 XML。

因此,每次发送请求时,都需要以正确的格式构建它,这称为编组/序列化。

每次收到响应时,都需要对其进行解析,这称为解组/反序列化。

我建议您学习 REST Web 服务,因为它们更简单、更灵活。

编辑:

为了连接到 Java 中的 REST 服务,您应该使用HttpURLConnection

这是它的外观示例代码:

public static String httpPost(String urlStr) throws Exception {
URL url = new URL(urlStr);
HttpURLConnection conn =
(HttpURLConnection) url.openConnection();
conn.setRequestMethod("POST");
conn.setDoOutput(true);
conn.setDoInput(true);
conn.setUseCaches(false);
conn.setAllowUserInteraction(false);
conn.setRequestProperty("Content-Type",
"application/x-www-form-urlencoded");

if (conn.getResponseCode() != 200) {
throw new IOException(conn.getResponseMessage());
}

// Buffer the result into a string
BufferedReader rd = new BufferedReader(
new InputStreamReader(conn.getInputStream()));
StringBuilder sb = new StringBuilder();
String line;
while ((line = rd.readLine()) != null) {
sb.append(line);
}
rd.close();

conn.disconnect();
return sb.toString();
}
于 2012-07-16T09:03:13.223 回答