Как включить MTOM на стороне сервера для веб-службы, опубликованной с использованием Grails с CXF?
Используя Grails и CXF, я опубликовал небольшой веб-сервис, который выглядит следующим образом
class TestService {
static expose=['cxf']
int pushData(int id, DataHandler data) {
//receives data for a specific ID,
return 1
}
}
Дело в том, что мне сейчас хотелось бы включить MTOM для передачи данных DataHandler. Обычно с Groovy и CXF (или JAX-WS) я бы опубликовал TestService
как Endpoint
Endpoint ep = Endpoint.publish("http://localhost:9000/test", new TestService())
SOAPBinding binding = (SOAPBinding)ep.getBinding();
binding.setMTOMEnabled(true);
И все сделано.
Теперь, когда я использую Grails для своей публикации, я не могу понять, как получить Endpoint
, Кто-нибудь знает, как это можно сделать?
1 ответ
Решение
Давайте предположим, что интерфейс сервиса выглядит так
@MTOM
@WebService(targetNamespace="http://soap.services.website.com/",
endpointInterface="com.armorize.web.services.ServiceInterface")
public interface ServiceInterface
int uploadData(@XmlMimeType("application/octet-stream") DataHandler code) ;
Атрибуты конечной точки могут быть указаны в cxf-servlet.xml. С внедряющим сервисом под названием ServiceImpl вам необходимо добавить следующие спецификации
<jaxws:endpoint id="endpointID"
implementor="com.website.web.services.ServiceImpl" address="/test">
<jaxws:properties>
<entry key="mtom-enabled" value="true" />
<entry key="mtom-threshold" value="0" />
</jaxws:properties>