web-services - 在 Apache CXF 中动态设置启用 MTOM 的属性

标签 web-services cxf

我正在使用 Apache CXF 框架开发 SOAP Web 服务。我的 Web 方法根据请求参数返回二进制数据或纯 XML。大多数请求都会返回二进制数据,因此我将 CXF 配置为在服务响应中使用 MTOM。

但这并不总是有用:当返回 XML 时,调用方希望获得纯文本/xml 文档而不是多部分文档。因此,我希望我的 Web 服务能够动态更改其绑定(bind)。

CXF 文档有以下示例:

Endpoint ep = ...; // example does not explain how to get it
SOAPBinding binding = (SOAPBinding)ep.getBinding();
binding.setMTOMEnabled(true); // or false

问题:如何获取 Endpoint 实例?

我使用 Spring 注释 @Endpoint 表示 Web 服务,使用 @PayloadRoot 表示 Web 方法。

最佳答案

如果您在服务器上使用,则可以使用以下代码,

您需要添加import javax.xml.ws.Endpoint;

HelloWorldImpl implementor = new HelloWorldImpl();
String address = "http://localhost:9000/helloWorld";
Endpoint.publish(address, implementor);

从客户端

TestMtomService tms = new TestMtomService(wsdlURL, SERVICE_NAME);
TestMtomPortType port = (TestMtomPortType)tms.getPort(PORT_NAME,TestMtomPortType.class);
Binding binding = ((BindingProvider)port).getBinding();
((SOAPBinding)binding).setMTOMEnabled(true);

引用

如果您下载了 cxf bundle ,MTOM 服务器/客户端的代码示例可在以下路径中找到

apache-cxf-2.7.2\samples\mtom

关于web-services - 在 Apache CXF 中动态设置启用 MTOM 的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15772138/

相关文章:

.net - 没有客户端证书的 WCF 消息/方法安全性

java - 将下载的 .js 文件添加到 Netbeans 中的现有项目中

java - Apache CXF : multiple endpoints or multiple CXFServlet servlets?

java - 如何在使用 servlet 传输的 cxf 端点配置中覆盖/忽略 WARFileName

java - 如何使用 cxf :proxy-service 公开 Web 服务

java - 服务器端处理丢失的客户端连接(由对等方重置)?

java - 全世界的新闻api for android

android - 高效地从 Android 中的 Web 服务中提取大数据

java - 非服务类的 Spring AOP

java - 在 restful web 服务中访问 HttpServletRequest 对象