私はSpring IntegrationでJaxb2Marshaller
を使用しています。私は着信ゲートウェイWebサービスを持っています。誰かがそれを呼び出すと、自動的にJAXB生成クラスに解析されます。Spring統合Webサービス - Jaxb2Marshaller - どのようにSAX Parserを使用できますか?
しかし、ソースにデバッグすると、DOMを使用してJaxb2Marshaller
が表示されます。 XMLデータをJavaオブジェクトにバインドするためにSAXを使用すると思っていましたが、SAXは高速です。なぜJaxb2Marshaller
のDOMをデフォルトで使用するのですか? SAXを使用するように設定するにはどうすればよいですか?
アンマーシャラーを確認したよう
は、ソースのインスタンスが必要です。メッセージのペイロードがSourceのインスタンスでない場合は、 変換が試行されます。現在、String、File、org.w3c.dom.Documentペイロードは に対応しています。 Sourceへのカスタム変換は、 SourceFactoryの実装をインジェクトすることによってもサポートされています。 SourceFactoryが明示的に設定されていない場合 注 、UnmarshallingTransformerのプロパティは、我々は唯一、現在それをそれを見ることができますSourceFactory
についてDomSourceFactory
にデフォルトで に設定されます。 DomSourceFactory
およびStringSourceFactory
を有する。 SaxSourceFactory
はありません。
Jaxb2Marshaller
でSAXを使用することはできません。
今後は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());
}
}
を扱う参照、最後の質問は、私はSAXとJAXBと春の統合Webサービスを使用して設定することができますされていますか?私は何かを逃したのですか?ここで
は私の設定です:
<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>
は名前MessageDispatcherServlet.DEFAULT_MESSAGE_FACTORY_BEAN_NAME
でAxiomSoapMessageFactory
Beanを構成するようにしてください
ニャチャングエン、
@lexicoreあなたはこの:-)に私を助けてもらえ –
サックスが速くない..です。サックスは、あなたがカスタム実装する必要があるすべての余分なアプリケーションロジックのために、しばしば遅いです... –
あなたはいくつかの誤解があるように見えます。あなたは ''を表示しますが、 'UnmarshallingTransformer'について話します。最初のものはSpring WS 'MarshallingUtils.unmarshal()'に完全に委譲されています –