我使用Tomcat,Apache CXF和Spring Boot公开SOAP服务。 Web服务已启用MTOM,并且在从SOAP UI进行测试时可以正常工作。
问题在于,当我尝试从SOAP UI中禁用MTOM时,我仍然收到带有XOP附件的消息。我使用的SOAP UI中的选项是:启用MTOM:false;强制MTOM:false。
我试图将请求的Accept标头设置为application / xml而不是application / xop + xml,但我仍然得到同样的东西。
我获得Byte64流的唯一时间是我用一个小于我设置的阈值的文件进行测试时:
@MTOM(enabled = true, threshold = 2048)
我需要MTOM在设置为启用时是可选的,并且依赖于请求,而不仅仅是阈值,这可能是SOAP UI的问题还是我的当前配置忽略请求参数?< / p>
我需要这个,因为Web服务的某些客户端不支持MTOM。
这是我从公开方法返回的对象:
public class Document {
private DataHandler fileData;
public DataHandler getFileData() {
return fileData;
}
public void setFileData(DataHandler fileData) {
this.fileData = fileData;
}
}
答案 0 :(得分:0)
您无法从客户端控制您是否希望服务器使用xop附件进行响应。
JAX-WS,我认为它的所有实现(例如CXF)都不关心Accept
标头,因为它没有在SOAP规范中指定服务器必须从请求,也不应该在响应中写入哪个值。因此,如果您放置application/xml
或text/xml
或其他任何内容,则无效。
如果服务器启用了MTOM,必须始终(只要它落入阈值范围内)使用MTOM发回肥皂响应。
我使用的SOAP UI中的选项是:启用MTOM:false;强制MTOM:false
这些是请求消息的选项,因此如果您在请求中发送文件,它将被编码为base64附件,这意味着您只是为请求禁用MTOM。
这真是令人失望,但基本上你只剩下两个选择:
修改服务器并禁用MTOM或尝试使用拦截器执行某些操作,例如从请求中读取值,并根据该值以编程方式启用/禁用mtom。这就像实现自己的机制来决定客户端是否支持MTOM。
修改不支持MTOM的客户端,如果您提出此问题,可能无法做到。