2017-01-11 6 views
0

springxdを使用してavroでESB JMSキューからHDFSにデータを保存する際に、この問題に直面しています。 カスタムプロセッサを作成して、JMSキューからインバウンドXMLを解析し、springxdストリームを使用してavroに変換し、HDFSで保存しました。springxd - deserializeできません[クラス名]クラスが見つかりません

ここでは私のストリーム定義がある -

stream create --name NewStream --definition "jms --destination=my.jms.queue --provider=tibco | mycustomprocessor | hdfs-dataset --basePath=/data_lake/avrodata --idleTimeout=60000" --deploy 

ここにも私はOKに見えるメッセージを印刷しています、私は取得していますエラー..です

ERROR inbound.NewStream.1、Redisのは、 :queue-inbound-channel-adapter1 redis.RedisMessageBus $ 1 - メッセージの配信に失敗しました。疲れた再試行。メッセージ 'ERRORS:NewStream.1'をキューに送りました。org.springframework.messaging.MessageHandlingException:メッセージハンドラ[NewStream.1.bridge.handler]でエラーが発生しました。入れ子にされた例外はorg.springframework.xd.dirt.integration.bus.serializer.SerializationExceptionです:[クラス名]を逆シリアル化できません。クラスが見つかりません。

これは、クラスが見つからないと言うが、クラスがあり、使用されていると私は同じクラスからオブジェクトを印刷しています -

message object{"NameType": null, "Names": null, "EndDeviceEventDetails": null, "EndDeviceEvent": null, "EndDeviceEventType": null, "Header": {"Noun": "EndDeviceEvents", "Context": "PROD", "Verb": "created", "Value": null, "Source": "ADCS", "Timestamp": "2014-08-06T17:00:03.319-07:00", "CorrelationID": "eb1ccda2-6bcc-446d-b90e-3a72a46f861a", "Name": null, "MessageID": "fe567bfb-09d5-46fd-a9f4-7dcad8c51e74", "Property": {"PropertyName": ["TransactionDomain", "GridDirectorAction", "MessageIdentifier", "Stereotype"], "PropertyValue": ["MeterEvent", "urn:com.bchydro.meter.event", "Read Data Id=2.16.840.1.114416.1.63.4215386", "MeterEvent"]}}, "Payload": {"EndDeviceEvents": [{"mRID": "18541", "createdDateTime": null, "issuerID": "2014-08-06T23:05:54Z", "issuerTrackingID": null, "reason": null, "severity": null, "userID": "3", "Asset": {"AssetmRID": null, "AssetNames": [{"Name": "2.16.840.1.114416.1.63.4215386", "NameType": {"NameTypeDescription": null, "NameTypeName": "ESN", "NameTypeAuthority": null}}]}, "EndDeviceEventDetails": [{"EndDeviceEventDetailsName": "EventSequenceNumber", "EndDeviceEventDetailsValue": "46"}, {"EndDeviceEventDetailsName": "EventSequenceNumber", "EndDeviceEventDetailsValue": "46"}, {"EndDeviceEventDetailsName": "EventSequenceNumber", "EndDeviceEventDetailsValue": "46"}, {"EndDeviceEventDetailsName": "EventSequenceNumber", "EndDeviceEventDetailsValue": "46"}], "EndDeviceEventType": "HAN Meter Network Change", "EndDeviceEventNames": [{"Name": "HAN Reset non-routine", "NameType": {"NameTypeDescription": null, "NameTypeName": "Network Change Reason", "NameTypeAuthority": null}}], "Status": {"StatusDateTime": null, "StatusReason": null, "StatusRemark": null, "StatusValue": null}, "UsagePoint": null}], "EndDeviceEventType": [{"EndDeviceEventTypemRID": null, "EndDeviceEventTypedomain": null, "EndDeviceEventTypeeventOrAction": null, "EndDeviceEventTypesubDomain": null, "type": null, "EndDeviceEventTypeNames": null}]}} 

は、あなたの助けに感謝...

ありがとう、 AJ

答えて

0

これは単発配置の場合、おそらくクラスローダーの問題です。クラスを含むjarを移動してみてくださいxd/libに変更し(個々のモジュールから削除する)

+0

分散モード展開です。 modules.zipファイルを作成し、common/job/sinkとprocessorを含む同じファイルを配備します。私はこのカスタムプロセッサをファイルからソースからシングルレノードで試してみましたが、うまく動作します。私はちょうどxd/modules/processorにカスタムプロセッサをコピーして、それは正常に動作します。しかし分散版では、新しいカスタムプロセッサーをモジュール/プロセッサーにコピーし、zipファイルをデプロイしました。 CustomProcessorはxmlを解析し、オブジェクトも印刷しますが、赤字で失敗します。 – AJ007

+0

この例外はインバウンドです(おそらくシンク内)。例外はかなり明白です: 'deserializeできません[bch.meterevent.Message]。クラスが見つかりません。 "、根本原因からのスタックトレースがある場合、新しいSerializationExceptionをスローする(" [className + "]を直列化解除できません。 '-verbose'でコンテナを実行して、クラスの読み込みアクティビティを表示することもできます。 –

+0

ありがとう@Gary ...私はこの問題を解決できました。 JARファイルをシングレノード用のxd/libにコピーするように提案したので、JARファイルをyarn/libフォルダにコピーしました。ここで糸は他のすべてのjarファイルにアクセスします。これにより、クラスが見つかりませんでした問題が解決され、XMLをAVROに正常に保存できました。あなたの助けに感謝。 – AJ007

関連する問題