2

Jaxb2marshallerSpringsを使用してオブジェクトから生成されたXMLjmsTemplate.convertAndSend(object)をOracleキュー(AQ)に送信したいと思います。何らかの理由でメッセージを送信すると、Oracleキューにnullが挿入されます。そのオブジェクトクラスからいくつかのフィールドを削除するか、それらのフィールドがnullの場合、メッセージは正常に配信されます。それらのフィールドを元に戻すと、再びnullになります。デバッグすると、正しいxmlメッセージが形成されていることがわかりますが、データベースにnullがある理由がわかりません。例外はスローされません(または少なくとも私はそれらを見つけることができません)。何か案は?

ありがとうございました!

4

1 に答える 1

2

問題はJAXBやSpringとは何の関係もありませんでした。それは、Oracleキューのタイプでした。そのタイプはSYS.AQ$_JMS_MESSAGE、タイプのメッセージのみを受信できるタイプVARCHAR2であり、Javaで同等の最大値は500シンボルStringです。サイズが500シンボルを超えるとString、nullがキューに入れられました。

解決策は、AQのタイプをに変更することでしたSYS.XMLTYPE(このタイプのキューは最大4GBのXMLを受信できます)。もちろん、メッセージの送信方法を変更する必要がありました。送信する前に、StringXMLをに変換する必要がありましたXMLType

于 2013-01-14T18:40:56.860 に答える