Класс десериализации RabbitMQ Java не найден

#serialization #bytearray #rabbitmq #noclassdeffounderror

#сериализация #массивы #rabbitmq #ошибка noclassdeffounderror

Вопрос:

Я пытаюсь отправить объект от производителя потребителю, используя SerializationUtils из Apache. Проблема в том, что при десериализации я получаю следующую ошибку :

 06-16 11:23:51.443: E/AndroidRuntime(4396): FATAL EXCEPTION: Thread-493
06-16 11:23:51.443: E/AndroidRuntime(4396): org.apache.commons.lang3.SerializationException: java.lang.ClassNotFoundException: Device
06-16 11:23:51.443: E/AndroidRuntime(4396):     at org.apache.commons.lang3.SerializationUtils.deserialize(SerializationUtils.java:230)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at org.apache.commons.lang3.SerializationUtils.deserialize(SerializationUtils.java:268)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at com.homedcs.pushservice.PushLights$1.run(PushLights.java:102)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.lang.Thread.run(Thread.java:856)
06-16 11:23:51.443: E/AndroidRuntime(4396): Caused by: java.lang.ClassNotFoundException: Device
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.lang.Class.classForName(Native Method)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.lang.Class.forName(Class.java:217)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.resolveClass(ObjectInputStream.java:2304)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readNewClassDesc(ObjectInputStream.java:1663)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readClassDesc(ObjectInputStream.java:683)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readNewObject(ObjectInputStream.java:1806)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readNonPrimitiveContent(ObjectInputStream.java:787)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:2006)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.io.ObjectInputStream.readObject(ObjectInputStream.java:1963)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at org.apache.commons.lang3.SerializationUtils.deserialize(SerializationUtils.java:224)
06-16 11:23:51.443: E/AndroidRuntime(4396):     ... 3 more
06-16 11:23:51.443: E/AndroidRuntime(4396): Caused by: java.lang.NoClassDefFoundError: Device
06-16 11:23:51.443: E/AndroidRuntime(4396):     ... 13 more
06-16 11:23:51.443: E/AndroidRuntime(4396): Caused by: java.lang.ClassNotFoundException: Device
06-16 11:23:51.443: E/AndroidRuntime(4396):     at dalvik.system.BaseDexClassLoader.findClass(BaseDexClassLoader.java:61)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.lang.ClassLoader.loadClass(ClassLoader.java:501)
06-16 11:23:51.443: E/AndroidRuntime(4396):     at java.lang.ClassLoader.loadClass(ClassLoader.java:461)
06-16 11:23:51.443: E/AndroidRuntime(4396):     ... 13 more
06-16 11:26:14.140: E/Trace(4444): error opening trace file: No such file or directory (2)
  

Это класс устройства

 package com.homedcs.models;

import java.io.Serializable;

public class Device implements Serializable {

private static final long serialVersionUID = 1L;

private int id, type, slaveAddress, channel, value, power, config, location;

public Device() {

}

public Device(int id, int type, int slaveAddres, int channel, int value, int power, int config, int location) {

    this.id = id;
    this.type = type;

}

public int getId() {
    return id;
}

public void setId(int id) {
    this.id = id;
}

public int getType() {
    return type;
}

public void setType(int type) {
    this.type = type;
}

}
  

Я искал в Интернете и узнал кое-что о classpath. Я до сих пор не знаю, как я могу это решить.

Ответ №1:

Я использовал apache thrift для создания кроссплатформенных объектов. Вы просто создаете файл thrfit и генерируете класс на том языке, который вы хотите, очень полезно и очень просто!