2016-02-23 5 views
0

Я подвергаю SOAP-услугу с помощью Tomcat, Apache CXF и Spring Boot. В веб-службе включен MTOM, и он работает, как ожидается, при тестировании его из пользовательского интерфейса SOAP.Сделать MTOM Дополнительно

Проблема заключается в том, что когда я пытаюсь получить сообщение с отключенным MTOM из интерфейса SOAP, я до сих пор получаю сообщение с приложением XOP. Параметры из пользовательского интерфейса SOAP, которые я использую: Включить MTOM: false; Force MTOM: false.

Я попытался установить заголовок Accept на запрос к приложению/xml вместо application/xop + xml, но я все равно получаю то же самое.

Единственный раз, когда я получаю поток Byte64, когда я проверяю с файлом, который меньше, чем порог, который я настроил:

@MTOM(enabled = true, threshold = 2048) 

Что я должен был бы это MTOM быть необязательным, если его установлен для включения и зависит от запроса не только от порога, может быть, это проблема с интерфейсом SOAP или моя текущая конфигурация игнорирует параметры запроса?

Мне это нужно, потому что некоторые клиенты веб-службы не поддерживают MTOM.

Вот объект, который я вернулся из выставленного метода:

public class Document { 

    private DataHandler fileData; 

    public DataHandler getFileData() { 
     return fileData; 
    } 

    public void setFileData(DataHandler fileData) { 
     this.fileData = fileData; 
    } 
} 

ответ

0

Вы не может управления от клиента требуется ли ответ сервера с приложением Xop или без него.

JAX-WS, и я думаю, что ни одна из его реализаций, таких как CXF, не заботится о заголовке Accept, поскольку он не указан в спецификациях SOAP, которые сервер должен читать, если от запроса, ни какое значение оно должно напишите в ответ. Поэтому не имеет значения, положите ли вы application/xml или text/xml или любые другие.

Если сервер имеет MTOM, то он должен должен всегда (до тех пор, пока он попадает в пороговый диапазон) отправьте ответ мыла с помощью MTOM.

Параметры из пользовательского интерфейса SOAP, который я использую: Включить MTOM: false; Сила MTOM: ложные

Эти параметры для сообщения запроса, так что в случае, если вы отправляете файл в запросе он будет закодирован как вложение base64, то есть вы просто отключить MTOM для запроса.

Это облом, но в основном вы просто остаются два варианта:

  • изменить сервер и отключить MTOM или попытаться сделать что-то с перехватчиками, как чтение значения из запроса и включение/отключение MTOM программно для этого единственного сообщения на основе этого значения. Это похоже на реализацию механизма, позволяющего решить, поддерживает ли клиент MTOM или нет.

  • Измените клиентов, которые не поддерживают MTOM, которые, вероятно, вы не можете сделать, если задаете этот вопрос.

+0

Благодарим за отзыв. Я пришел к такому же выводу после нескольких часов поиска и тестирования. – Andrei