我正在使用 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/