Я использую Jaxb2Marshaller
с интеграцией с весной. У меня есть веб-служба входящего шлюза, когда кто-то ее вызывает, он автоматически анализирует классы, сгенерированные JAXB.Spring Integration Web Service - Jaxb2Marshaller - Как я могу использовать SAX Parser?
Но когда я отлаживаю исходный код, я вижу Jaxb2Marshaller
с использованием DOM. Я думал, что использовать SAX для привязки данных XML к объекту Java, SAX быстрее. Почему Jaxb2Marshaller
использовать DOM по умолчанию? Как настроить его для использования SAX?
Как я проверил документ
unmarshaller требуется экземпляр Источника. Если полезная нагрузка сообщения не является экземпляром источника, будет предпринята попытка преобразования . В настоящее время поддерживаются файлы String, File и org.w3c.dom.Document: . Пользовательское преобразование в источник также поддерживается введением реализации SourceFactory. Примечание Если SourceFactory не установлено явно, то свойство на UnmarshallingTransformer будет по умолчанию устанавливается в DomSourceFactory
О SourceFactory
Мы можем видеть, что в настоящее время, это только имеет DomSourceFactory
и StringSourceFactory
. Нет SaxSourceFactory
.
Таким образом, мы не можем использовать SAX с Jaxb2Marshaller
, верно?
Будет ли оно иметь SaxSourceFactory
в будущем? или никогда?
Странная вещь, когда я проверяю Jaxb2Marshaller
, я вижу код уже обрабатывать SAX
XMLReader xmlReader = null;
InputSource inputSource = null;
if (source instanceof SAXSource) {
SAXSource saxSource = (SAXSource) source;
xmlReader = saxSource.getXMLReader();
inputSource = saxSource.getInputSource();
}
else if (source instanceof StreamSource) {
StreamSource streamSource = (StreamSource) source;
if (streamSource.getInputStream() != null) {
inputSource = new InputSource(streamSource.getInputStream());
}
else if (streamSource.getReader() != null) {
inputSource = new InputSource(streamSource.getReader());
}
else {
inputSource = new InputSource(streamSource.getSystemId());
}
}
Итак, последний вопрос CAN настроить с помощью Spring Integration веб-службы с JAXB с SAX? Я что-то пропустил?
Вот мои конфигурации:
<ws:inbound-gateway id="inbound-gateway" request-channel="RequestChannel" reply-channel="ResponseChannel"
marshaller="marshaller" unmarshaller="marshaller" />
<int:channel id="RequestChannel" />
<int:channel id="ResponseChannel" />
<bean id="marshaller" class="org.springframework.oxm.jaxb.Jaxb2Marshaller">
<property name="contextPath" value="com.example.webservice.api"/>
</bean>
Спасибо и наилучшими пожеланиями,
Nha Нгуен
@lexicore Не могли бы вы мне помочь в этом :-) –
саксофон не быстрее .. . sax часто медленнее из-за всей дополнительной логики приложения, необходимой для пользовательского внедрения ... –
Похоже, у вас есть недоразумение. Вы показываете '', но говорите о 'UnmarshallingTransformer'. Первый полностью делегирует Spring WS 'MarshallingUtils.unmarshal()' –