当前位置: 首页 > 知识库问答 >
问题:

如何标记SOAP服务“MTOM已启用”

艾学海
2023-03-14
  1. 服务如何明确它在请求/响应中接受/服务作为MTOM附件的二进制数据?
  2. 客户端如何正确识别二进制数据可以通过使用给定服务的MTOM附件发送/获取?

共有1个答案

桂坚
2023-03-14

您似乎有点混淆了附件、SOAP附件和MTOM。

SOAP-Attachment最初是在2000年12月作为W3C注释(不是规范)引入的,它定义了SOAP1.1中定义的传输绑定机制的扩展。本说明特别界定:

用于封装复合文档的MIME多部分机制可用于捆绑与SOAP 1.1消息相关的实体,如附件。

简单地说,它定义了一种机制,使多个文档(附件)以其本机格式与SOAP消息关联,使用多部分mime结构进行传输。这是使用“content-location”和“content-id”头以及一组解释由“content-location”头引用的URI的规则来实现的。

这种格式的SOAP消息可视化如下(封装为multipart/mime):

这也是您在使用SAAJ时可能使用过的格式,但不再推荐使用,除非您正在使用遗留代码。W3C注释后来在2004年被修订为“特性”级别(与SOAP1.2一起),并最终被SOAP MTOM机制所取代。

SOAP消息传输优化机制(MTOM)被官方定义为不是一个功能,而是三个单独的功能,它们一起工作以交付功能:

>

  • “抽象SOAP传输优化特性”描述了一种抽象特性,用于通过选择性地编码消息的部分来优化SOAP消息的传输和/或有线格式,同时仍然向SOAP应用程序呈现XML信息集。

    “SOAP消息的优化MIME多部分/相关序列化”描述了SOAP消息的优化MIME多部分/相关序列化,该序列化以独立于绑定的方式实现抽象SOAP传输优化特性。

    “HTTP SOAP传输优化特性”描述了SOAP 1.2 HTTP绑定的抽象传输优化特性的实现。

    如果您阅读了第二个文档,就会意识到“附件”已经被替换为XML二进制优化的“包”或XOP。

    XOP包是通过将XML信息集的序列化放置在可扩展的打包格式(如MIME多部分/相关,参见[RFC 2387])中来创建的。然后,提取其内容的作为base64编码的二进制数据的选定部分并重新编码(即,从base64解码数据)并将其放入包中。这些选定部分的位置在XML中用一个特殊元素标记,该元素使用URI链接到打包的数据。

    简单地说,这意味着不再将数据封装为Multipart/MIME消息中的“附件”,而是通过“指针”或链接来引用数据。以下图表可能有助于理解:

    现在我们有了背景,让我们回到你的问题上来。

    >

  • 服务如何明确它在请求/响应中接受/服务作为MTOM附件的二进制数据?它不是。MTOM没有附件的概念,因此服务器不能声明它接受附件。

    xmime:contentType属性信息项允许Web服务应用程序优化由二进制元素信息项定义的二进制数据的处理,并且应该将其视为元数据。xmime:contentType属性的存在不会更改元素内容的值。

    当您使用xmime:contenttypexmime:expectedcontenttypes=“application/octet-stream(不应使用*)启用MTOM时,生成的WSDL将具有如下条目:

    这是服务器声明它可以接收XML二进制优化包(可以分解为多部分MIME消息)的方式。

    当客户机看到上述情况时,客户机知道服务器可以接受XML二进制优化的包,并根据定义生成适当的HTTP请求,以标识XOP文档:

    XOP文档在类MIME系统中使用时,用“Application/XOP+XML”媒体类型标识,并用所需的“type”参数传递原始XML序列化的相关内容类型。

    希望有帮助!

  •  类似资料:
    • 问题内容: 我只想知道,是否有任何简单的方法可以解析MTOM / XOP SOAP响应。问题是我使用纯HTTP发送肥皂消息和javax.xml来解析响应。但是某些服务以mulipart / related回应了我,它需要更复杂的逻辑来解析它(性能很重要)。因此,我想知道我是否可以以某种方式利用apache cxf,apache公理或任何其他库来解析MTOM / XOP SOAP响应? 问题答案:

    • 我正在尝试确定log4j2中是否存在一个标记的记录器。该筛选器在实际日志记录时起作用。问题出在检查isEnabled(级别、标记)时。如果MakerFilters处于配置级别,那么它将按照预期工作。如果处于记录器或追加器级别,则它将绕过标记并只考虑阈值级别。 查看文档,如果接受/拒绝是配置级别的,那么它将不检查任何其他筛选器,并且该状态将被遵守,因此它在这里工作是有意义的。 现在使用配置级别的筛选

    • > 显然停止了服务。给出以下结果: 确保关闭Microsoft管理控制台(), 确保关闭事件查看器,

    • 问题内容: 我想知道使用node.js消费SOAP XML Web服务的最佳方法是什么 谢谢! 问题答案: 您没有太多选择。 您可能需要使用以下之一: node-soap) strong-soap(重写) easysoap

    • 我试图symfony配置,以确定如何连接一些标记的服务,但我遇到了问题。我试图把这个问题浓缩成尽可能少的代码来帮助解释,但是仍然——抱歉太长了! 这里是配置部分的东西。。。 我也有一个任意的服务,它需要$emailSender和$emailTitle。在services.yaml中,它被标记为任意服务标签: Symfony文档告诉我在CompilerPass中查找标记的服务-足够公平: 在我的完整

    • 问题内容: 当涉及肥皂处理程序和大型MTOM附件时,IBM WebSphere 7和8中的JAXWS实现似乎存在一些问题。似乎在SOAPMessageContext对象上调用getMessage()时,会将整个消息(包括所有附件二进制内容)读入内存。这很容易导致JVM耗尽可用内存。 在上面的代码片段中,如果传入的请求附件大于JVM中可用的可用内存量,context.getMessage()可能会导