Можно ли включить проверку схемы для входящего или исходящего XML только в Apache CXF 2.5.2? - PullRequest
2 голосов
/ 15 марта 2012

Я создал конечную точку веб-службы с использованием Apache CXF 2.5.2, но у меня возникли некоторые проблемы с проверкой схемы и взаимодействием MTOM. Если я включаю MTOM и проверку схемы, я должен напрямую использовать тип base64Binary, однако я пытаюсь соответствовать фиксированной спецификации, где поле MTOM также имеет атрибут «contentType».

<jaxws:properties>
    <entry key="mtom-enabled" value="true"/>
    <entry key="schema-validation-enabled" value="true"/>
</jaxws:properties>

Можно ли включить проверку схемы только для входящих или исходящих сообщений? Например что-то вроде:

<entry key="schema-validation-enabled" value="inbound"/>

В качестве альтернативы есть альтернативный способ достижения этого, например, переопределение проверки исходящих сообщений?

Спасибо.

1 Ответ

1 голос
/ 11 июня 2014

Начиная с Apache CXF 3.0 это возможно. Вы не можете отключить проверку на входящей / исходящей основе, но вы можете выборочно игнорировать ошибки проверки (так что вы все еще получаете снижение производительности).

В конфигурации CXF вы настраиваете обработчики событий проверки чтения (входящей) и записи (исходящей).

<jaxws:properties>
    <!-- Validation of the SOAP Message--> 
    <entry key="schema-validation-enabled" value="true" />

    <entry key="jaxb-reader-validation-event-handler">
        <bean class="com.example.cxf.InboundValidationEventHandler" />
    </entry>

    <entry key="jaxb-writer-validation-event-handler">
        <bean class="com.example.cxf.OutboundValidationEventHandler" />
    </entry>
</jaxws:properties>

Создайте ValidationEventHandlers вот так и верните true. Возвращение true информирует CXF об игнорировании одной ошибки проверки и продолжении проверки.

package com.example.cxf;

import javax.xml.bind.ValidationEvent;
import javax.xml.bind.ValidationEventHandler;

public class InboundValidationEventHandler implements ValidationEventHandler {

    public boolean handleEvent(ValidationEvent event) {
        String message = event.getMessage();
        Throwable t = event.getLinkedException();

        System.out.println("Ignoring Inbound Validation EVENT : " +  message);

        // ignore
        return true;
    }
}
...