У нас есть веб-сервис с поддержкой MTOM, который публикуется вместе с 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")));
}
}
Когда я запускаю клиент, я получаю следующее сообщение об ошибке:
Не удалось создать сообщение SOAP из-за исключения: org.jvnet.mimepull.MIMEParsingException: отсутствует начальная граница
Однако, когда я не добавляю MTOMFeature, а просто делаю TestService service = new TestServiceService().getTestServicePort();
, файлы загружаются нормально.Но, насколько я понимаю, если MTOM не включен как на стороне сервера, так и на стороне клиента, весь файл будет храниться в памяти (а не в потоковом режиме).Итак, мои вопросы
- Почему мы получаем эту ошибку?
- Если я не добавлю MTOMFeature, будет ли файл по-прежнему передаваться по MTOM?
Буду очень признателен за любую помощь / советы!