Web services 使MTOM成为可选的
我使用Tomcat、apachecxf和springboot公开了一个SOAP服务。web服务启用了MTOM,并且在从SOAP UI测试它时,它可以按预期工作 问题是,当我试图从soapui获取禁用MTOM的消息时,仍然会获取带有XOP附件的消息。我使用的soapui中的选项是:enablemtom:false;强制MTOM:错误 我尝试将请求上的Accept头设置为application/xml,而不是application/xop+xml,但仍然得到了相同的结果 获取字节64流的唯一时间是使用小于我设置的阈值的文件进行测试时:Web services 使MTOM成为可选的,web-services,tomcat,soap,jax-ws,mtom,Web Services,Tomcat,Soap,Jax Ws,Mtom,我使用Tomcat、apachecxf和springboot公开了一个SOAP服务。web服务启用了MTOM,并且在从SOAP UI测试它时,它可以按预期工作 问题是,当我试图从soapui获取禁用MTOM的消息时,仍然会获取带有XOP附件的消息。我使用的soapui中的选项是:enablemtom:false;强制MTOM:错误 我尝试将请求上的Accept头设置为application/xml,而不是application/xop+xml,但仍然得到了相同的结果 获取字节64流的唯一时间是使
@MTOM(enabled = true, threshold = 2048)
我需要的是,当MTOM设置为enabled时,MTOM是可选的,并且取决于请求,而不仅仅是阈值,这是SOAP UI的问题还是我当前的配置忽略了请求参数
我需要这个,因为web服务的一些客户端不支持MTOM
下面是我从公开方法返回的对象:
public class Document {
private DataHandler fileData;
public DataHandler getFileData() {
return fileData;
}
public void setFileData(DataHandler fileData) {
this.fileData = fileData;
}
}
您无法从客户端控制是否希望服务器使用xop附件或不使用xop附件进行响应
JAX-WS,我认为它的实现(例如CXF)都不关心Accept
头,因为SOAP规范中没有指定服务器必须从请求中读取的值,也没有指定服务器应该在响应中写入的值。因此,如果将application/xml
或text/xml
或任何其他内容放在
如果服务器启用了MTOM,它必须始终(只要它在阈值范围内)使用MTOM发回soap响应
我使用的soapui中的选项是:enablemtom:false;强制MTOM:错误
这些是请求消息的选项,因此,如果您在请求中发送文件,它将被编码为base64附件,这意味着您只是在为请求禁用MTOM
这很糟糕,但基本上你只有两个选择:
- 修改服务器并禁用MTOM,或者尝试使用拦截器执行一些操作,例如从请求中读取值,并基于该值以编程方式为单个消息启用/禁用MTOM。这就像实现一种机制来决定客户机是否支持MTOM
- 修改不支持MTOM的客户端,如果你问这个问题,你可能无法做到这一点