gpt4 book ai didi

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

转载 作者:太空宇宙 更新时间:2023-11-04 08:51:02 25 4
gpt4 key购买 nike

我们有一个支持 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
}
}

关注此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")));
}
}

当我运行客户端时,收到以下错误消息:

Couldn't create SOAP message due to exception: org.jvnet.mimepull.MIMEParsingException: Missing start boundary

但是,当我不添加 MTOMFeature 时,只需添加TestService service = new TestServiceService().getTestServicePort(); 文件上传正常。但据我了解,如果服务器端和客户端均未启用 MTOM,则整个文件将保留在内存中(而不是流式传输)。所以,我的问题是

  • 为什么会出现该错误?
  • 如果我不添加 MTOMFeature,文件仍会通过 MTOM 传输吗?

如果您有任何帮助/提示,​​我将非常感激!

最佳答案

经过一些研究和测试,答案是:

  • 该错误是因为 grails 添加了自己的过滤,包括服务。因此,通过像 UrlMappings.groovy 中的 static excepts = ["/services/*"] 那样排除服务的过滤,就可以了。
  • 没有。如果没有 MTOMFeature,该文件将被视为请求中的任何其他数据。这意味着存储在内存中,从而导致大文件出现问题。

关于java - 使用 Metro,向客户端添加 MTOMFeature 会导致 MIMEParsingException,为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3341872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com