Web services 使MTOM成为可选的

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流的唯一时间是使

我使用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的客户端,如果你问这个问题,你可能无法做到这一点


感谢您的回复,经过几个小时的搜索和测试,我得出了相同的结论。