Java 使用Metro,向客户端添加MTOMFeature会导致MIMEParsingException,为什么?
我们有一个支持MTOM的web服务,该服务与Grails和Metro 1.0.2插件一起发布:Java 使用Metro,向客户端添加MTOMFeature会导致MIMEParsingException,为什么?,java,web-services,grails,java-metro-framework,mtom,Java,Web Services,Grails,Java Metro Framework,Mtom,我们有一个支持MTOM的web服务,该服务与Grails和Metro 1.0.2插件一起发布: @MTOM @WebService(targetNamespace="http://com.domain") class TestService { @WebMethod int uploadFile(@XmlMimeType("application/octet-stream")DataHandler data) { data.dataSource.inputSt
@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")));
}
}
公共类客户端{
公共静态void main(字符串[]argv){
MTOMFeature feat=新的MTOMFeature();
TestService=新的TestServiceService().getTestServicePort(feat);
Map ctxt=((BindingProvider)服务).getRequestContext();
put(JAXWSProperties.HTTP_CLIENT_STREAMING_CHUNK_SIZE,8192);
uploadFile(新的DataHandler(新的FileDataSource(“c:/file.xml”));
}
}
运行客户端时,我收到以下错误消息:
由于以下原因,无法创建SOAP消息:
例外情况:
org.jvnet.mimepull.MIMEParsingException:
缺少起始边界
但是,当我不添加MTOMFeature时,只需添加
TestService service=newTestServiceService().getTestServicePort()代码>文件上传正常。但据我所知,如果服务器端和客户端都未启用MTOM,则整个文件将保留在内存中(而不是流式传输)。所以,我的问题是
- 为什么我们会犯这样的错误
- 如果我不添加MTOM功能,文件是否仍会被MTOM传输
如有任何帮助/提示,我将不胜感激 经过一些研究和测试,答案如下:
- 错误是因为grails添加了自己的过滤,包括服务。因此,通过像UrlMappings.groovy中的
static excludes=[“/services/*”]
这样排除被过滤的服务,它是有效的
- 不可以。如果没有MTOMFeature,该文件将被视为请求中的任何其他数据。这意味着存储在内存中,从而导致大文件出现问题
经过一些研究和测试,答案如下:
- 错误是因为grails添加了自己的过滤,包括服务。因此,通过像UrlMappings.groovy中的
static excludes=[“/services/*”]
这样排除被过滤的服务,它是有效的
- 不可以。如果没有MTOMFeature,该文件将被视为请求中的任何其他数据。这意味着存储在内存中,从而导致大文件出现问题