java - Soap 网络服务请求与 HTTP POST 请求?

标签 java web-services soap httprequest

我来自 servlet/web 应用程序世界并开始学习 web 服务(基于 SOAP)。我经历了一些网络服务 教程。我试图在普通 http 请求和 webservice 请求之间画出相似之处。这是我的观察;-

1)都是HTTP请求。 Webservice 也是一个 post 请求,它包含 soap 信封作为请求正文。香皂信封 只是一个包含数据的普通 xml

2)java Stub 在内部编码 XML,创建 HTTP 请求并将其发送给消费者

3)消费者端的Servlet拦截该请求并将其解压为java对象并将其发送给相应的服务。

我的观察是否正确?我知道可能还有其他复杂性,但我试图以简单的方式进行比较。

最佳答案

您的假设大体上是正确的。然而,细微差别会导致巨大差异。

Claim 1 : both are HTTP.

SOAP 通常与 HTTP“绑定(bind)”一起使用。然而,它不必是那样的。 SOAP 被设计为与传输完全无关。在 JMS 上使用 SOAP 并不少见(尽管有人可能认为这是对 JMS 的过度使用,是一种过度架构的协议(protocol)),它肯定在许多地方都在生产中使用。很少见到没有 HTTP 的 SOAP/SMTP 或 SOAP/TCP,但这些也存在。

Webservice is a also post request which contains soap envelope as request body

通过 HTTP 的 SOAP 调用是一个 POST 请求。但是,它可能不是内容类型的 xml,因为某些变体,例如 SwA(带有附件的 SOAP)或 XOP+MTOM 变体可能会产生 MIME/Multipart 的 HTTP 有效负载(其中的第一部分是纯 SOAP 信封XML 格式)。
当要通过 SOAP 调用发送大量二进制内容时,这种用法最常见,二进制编码可能会为请求增加很大的权重(base64 是权重的 1.3 倍)。

java Stub internally marshal the XML, creates HTTP request and send it to consumer

这是通常的完成方式,Axis 框架和 JAXWS 框架主要以这种方式工作。

较旧的 SAAJ API 是一种标准的 EE API,需要您使用 DOM API(参见 SOAPMessageFactory)手动构建 SOAP 消息,然后发送它。

如果你看一下 Spring WS,你会得到一些接近你的要求的东西,但是每个部分都相当公开并且在你的控制中(你可以选择使用 DOM Api 构建某些调用,其他调用使用 JAXB 编码, ...)。

3)Servlet at consumer side intercpets that request and unrmashal it to java object and send it to corresponding service

同样,这就是事情通常的运作方式。但是您也可以有一个在 servlet 容器之外工作的实现。 (请参阅 JAX WS 中的端点服务 API)。

关于java - Soap 网络服务请求与 HTTP POST 请求?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29251319/

相关文章:

java - 何时在 JPA 中使用一对多或多对一

java - 在 Java 中比较图像大小(以 KB 为单位)

java - 如何为 Mac OSX 的 Java System.exec() 指定命令行来打开文档?

json - 如何在 Moodle 中为嵌套 Web 服务创建正确的返回函数

java - 编译 Ubuntu Touch 无规则使目标为 "APPS/../src/R.stamp"

java - SoapUI API : WsdlProject unable to load a 'composite' project

WebMethod 中的 C# Fire and Forget 调用

java - 为 Web 服务编写 Java 客户端的最佳方法是什么?

php - 禁用统计/分析 Javascript

python - 通过 SOAP v2 创建 Magento 产品