Java 使用Metro,向客户端添加MTOMFeature会导致MIMEParsingException,为什么?

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的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.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,该文件将被视为请求中的任何其他数据。这意味着存储在内存中,从而导致大文件出现问题