При использовании Metro добавление MTOMFeature на клиентскую сторону вызывает MIMEParsingException, почему? - PullRequest
1 голос
/ 27 июля 2010

У нас есть веб-сервис с поддержкой 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?

Буду очень признателен за любую помощь / советы!

1 Ответ

1 голос
/ 05 августа 2010

После некоторых исследований и тестов ответы таковы:

  • Ошибка в том, что Grails добавляет свою собственную фильтрацию, включая сервисы.Таким образом, исключая фильтрацию сервисов, таких как static excludes = ["/services/*"] в UrlMappings.groovy, это работает.
  • Нет.Без MTOMFeature файл будет просто обрабатываться как любые другие данные в запросе.Это означает, что они хранятся в памяти, что создает проблемы для больших файлов.
...