Ошибка в сопоставлении Java Byte [] с ActionScript ByteArray - PullRequest
0 голосов
/ 06 октября 2011

Контекст - GraniteDS + JPA DataNucleus + MySQL

Сценарий заключается в сохранении / получении изображения в дБ.

Проблема с поиском ОТ db. Обложка книги взята из базы данных, но на гибком фронте он показывает как ноль.

Перевод из Java "Byte []" для flex "ByteArray" возвращает ноль.

Ниже приведены 2 файла классов.

Класс AcrionScript

[RemoteClass(alias="com.app.model.Book")]
public class Book
{
    public var id:uint;
            public var cover:ByteArray;
    }

Java класс

@ Entity Открытый класс Book реализует Serializable {

@Id
private Long id;

@Lob
@Basic(fetch=FetchType.EAGER)
private Byte[] cover = null;

} * * тысяча двадцать-один

Спасибо

1 Ответ

1 голос
/ 06 октября 2011

Кажется, это проблема сериализации.

Байт с заглавной буквой B - это класс-оболочка, более сложный, чем примитивный объект byte.

Это важный факт, поскольку сериализатор / десериализатор AMF работает с самоанализом.
Все не примитивные объекты должны иметь определенный класс, содержащий все общедоступные свойства на обоих концах вашего канала связи.

Класс Byte не является примитивным типом, и поэтому он не будет распознаваться по умолчанию сериализатором / десериализатором AMF, и, таким образом, каждый объект Byte[], отправляемый из Java в Flex, будет автоматически преобразован в ноль.

Попробуйте изменить Byte[] на byte[] и посмотрите, подходит ли вам это.

Если вам действительно нужно использовать Byte [], ознакомьтесь с гранитной документацией по написанию пользовательских классов сериализации , чтобы иметь возможность транспортировать Byte объектов.
Имейте в виду, однако, что для этого потребуется написать десериализатор / сериализатор на стороне Flex и, вероятно, не будет хорошим выбором, когда речь заходит о производительности.

Приветствия

...