2017-01-11 2 views
0

Я столкнулся с этой проблемой, сохраняя данные из ESB JMS Queue в HDFS в avro, используя springxd. Я создал пользовательский процессор для синтаксического анализа входящего XML из очереди JMS и преобразования в avro и сохранения в HDFS с использованием потока springxd.springxd - невозможно десериализовать [имя_класса] Класс не найден

Вот мое определение потока -

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

Здесь ошибка я получаю, и я печатая сообщение, которое выглядит хорошо ..

ОШИБОК inbound.NewStream.1-Redis : queue-inbound-channel-adapter1 redis.RedisMessageBus $ 1 - Не удалось доставить сообщение; повторные попытки; сообщение отправлено в очередь «ОШИБКИ: 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

Если это однопользовательское развертывание, это, вероятно, проблема с загрузчиком классов - попробуйте переместить банку, содержащую класс до xd/lib (и удалите его из отдельных модулей).

+0

это развертывание распределенного режима. Мы создаем файл modules.zip и развертываем то же самое, что содержит общий/рабочий/приемник и процессор. Я пробовал этот customprocessor в singlelenode из исходного файла, и он отлично работает. Для singlenode я просто копирую customprocessor в xd/modules/processor, и он отлично работает. Но для распространения я скопировал новый customprocessor к модулям/процессору, а затем развернул zip-файл. CustomProcessor анализирует XML-файл и также печатает объект, но не выполняет redis. – AJ007

+0

Это исключение является входящим - предположительно, в раковине. Исключение кажется довольно ясным: 'невозможно десериализовать [bch.meterevent.Message]. Класс не найден. 'Если существует стек из основной причины' throw new SerializationException ("невозможно десериализовать [" + className + "]. Класс не найден.", E) 'вы можете отредактировать свой вопрос и добавить это? Вы также можете попробовать запустить контейнер с '-verbose', который будет показывать активность загрузки класса. –

+0

Спасибо @Gary ... Я смог решить эту проблему. как вы предложили скопировать JAR в xd/lib, который был для singlenode, я скопировал JAR-файл в папку пряжи/lib, где пряжа обращается ко всем другим файлам jar. Это разрешило проблему, не найденную классом, и я могу успешно сохранить XML в AVRO. Ценю вашу помощь. – AJ007

Смежные вопросы