我们有一个支持MTOM的Web服务,它与Grails和Metro1.0.2插件一起发布:
@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
}
}
紧随其后
tutorial
我们建立了一个看起来像这样的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传输?
如果有任何帮助/建议,我将不胜感激!