我们有一个使用 Grails 和 Metro 1.0.2 插件发布的支持 MTOM 的 Web 服务:
@MTOM
@WebService(targetNamespace="http://com.domain")
class TestService {
@WebMethod
int uploadFile(@XmlMimeType("application/octet-stream")DataHandler data) {
data.dataSource.inputStream.eachLine {
println "reading: -> ${it}"
}
return 0
}
}
按照本教程,我们设置了一个如下所示的 Java 测试客户端
public class Client {
public static void main(String[] argv) {
MTOMFeature feat = new MTOMFeature();
TestService service = new TestServiceService().getTestServicePort(feat);
Map<String, Object> ctxt = ((BindingProvider)service).getRequestContext();
ctxt.put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE, 8192);
service.uploadFile(new DataHandler(new FileDataSource("c:/file.xml")));
}
}
当我运行客户端时,我收到以下错误消息:
由于异常,无法创建 SOAP 消息:org.jvnet.mimepull.MIMEParsingException:缺少开始边界
但是,当我不添加 MTOMFeature 时,只需
TestService service = new TestServiceService().getTestServicePort();
上传文件即可。但据我了解,如果服务器和客户端都未启用 MTOM,则整个文件将保存在内存中(而不是流式传输)。所以,我的问题是
- 为什么我们会得到这个错误?
- 如果我不添加 MTOMFeature,文件是否仍会通过 MTOM 传输?
我将非常感谢任何帮助/提示!