使 MTOM 可选
Make MTOM Optional
我正在使用 Tomcat、Apache CXF 和 Spring Boot 公开 SOAP 服务。 Web 服务启用了 MTOM,并且在从 SOAP UI.
对其进行测试时按预期工作
问题是,当我尝试从 SOAP UI 中获取禁用 MTOM 的邮件时,我仍然收到带有 XOP 附件的邮件。我使用的来自 SOAP UI 的选项是: Enable MTOM: false;强制 MTOM: false.
我尝试将请求的接受 header 设置为 application/xml 而不是 application/xop+xml,但我仍然得到同样的结果。
我唯一一次获得 Byte64 流是在我使用小于我设置的阈值的文件进行测试时:
@MTOM(enabled = true, threshold = 2048)
我需要的是 MTOM 在设置为启用时是可选的,并且取决于请求,而不仅仅是阈值,这可能是 SOAP UI 的问题还是我当前的配置忽略请求参数?
我需要这个,因为 Web 服务的某些客户端不支持 MTOM。
这里是object我return来自暴露的方法:
public class Document {
private DataHandler fileData;
public DataHandler getFileData() {
return fileData;
}
public void setFileData(DataHandler fileData) {
this.fileData = fileData;
}
}
您无法从客户端控制您是否希望服务器使用 xop 附件进行响应。
JAX-WS,我认为 none 它的实现,例如 CXF,关心 Accept
header,因为它没有在 SOAP 规范中指定服务器必须从请求中读取 if ,也不能在响应中写入哪个值。因此,如果您输入 application/xml
或 text/xml
或任何其他内容都没有区别。
如果服务器启用了 MTOM,它必须始终(只要它落在阈值范围内)使用 MTOM 发回 soap 响应。
The options from SOAP UI that I use are: Enable MTOM: false; Force MTOM: false
这些是请求消息的选项,因此如果您在请求中发送文件,它将被编码为 base64 附件,这意味着您只是为请求禁用了 MTOM。
这很可惜,但基本上你只有两个选择:
修改服务器并禁用 MTOM 或尝试使用拦截器执行某些操作,例如从请求中读取值,并根据该值以编程方式为该单个消息 enabling/disabling mtom。这就像给自己实现一个机制来决定客户端是否支持 MTOM。
修改不支持 MTOM 的客户端,如果你问这个问题,你可能做不到。
我正在使用 Tomcat、Apache CXF 和 Spring Boot 公开 SOAP 服务。 Web 服务启用了 MTOM,并且在从 SOAP UI.
对其进行测试时按预期工作问题是,当我尝试从 SOAP UI 中获取禁用 MTOM 的邮件时,我仍然收到带有 XOP 附件的邮件。我使用的来自 SOAP UI 的选项是: Enable MTOM: false;强制 MTOM: false.
我尝试将请求的接受 header 设置为 application/xml 而不是 application/xop+xml,但我仍然得到同样的结果。
我唯一一次获得 Byte64 流是在我使用小于我设置的阈值的文件进行测试时:
@MTOM(enabled = true, threshold = 2048)
我需要的是 MTOM 在设置为启用时是可选的,并且取决于请求,而不仅仅是阈值,这可能是 SOAP UI 的问题还是我当前的配置忽略请求参数?
我需要这个,因为 Web 服务的某些客户端不支持 MTOM。
这里是object我return来自暴露的方法:
public class Document {
private DataHandler fileData;
public DataHandler getFileData() {
return fileData;
}
public void setFileData(DataHandler fileData) {
this.fileData = fileData;
}
}
您无法从客户端控制您是否希望服务器使用 xop 附件进行响应。
JAX-WS,我认为 none 它的实现,例如 CXF,关心 Accept
header,因为它没有在 SOAP 规范中指定服务器必须从请求中读取 if ,也不能在响应中写入哪个值。因此,如果您输入 application/xml
或 text/xml
或任何其他内容都没有区别。
如果服务器启用了 MTOM,它必须始终(只要它落在阈值范围内)使用 MTOM 发回 soap 响应。
The options from SOAP UI that I use are: Enable MTOM: false; Force MTOM: false
这些是请求消息的选项,因此如果您在请求中发送文件,它将被编码为 base64 附件,这意味着您只是为请求禁用了 MTOM。
这很可惜,但基本上你只有两个选择:
修改服务器并禁用 MTOM 或尝试使用拦截器执行某些操作,例如从请求中读取值,并根据该值以编程方式为该单个消息 enabling/disabling mtom。这就像给自己实现一个机制来决定客户端是否支持 MTOM。
修改不支持 MTOM 的客户端,如果你问这个问题,你可能做不到。