Отправка объекта в EJB становится нулевой при создании с помощью CGLIB - PullRequest
0 голосов
/ 21 августа 2011

Я создаю прокси для объекта (объект SERIALIZABLE) на клиентском уровне и отправляю этот объект в EJB (используя EJB 3.0 на сервере Weblogic 10.3.4).В EJB параметр имеет значение null!Я удостоверился, что объект, который я отправляю, не является нулем в клиенте, а также что он сериализуем (System.out.println (c instanceof Serializable) печатается как true).В чем может быть проблема?

// Creating the proxy
public Object createProxy(Class targetClass)
{
    Enhancer enchancer = new Enhancer();
    enchancer.setSuperclass(targetClass);
    enchancer.setInterfaces(new Class[] { Serializable.class })
    enhancer.setCallback(new LazyInterceptor()); // LazyInterceptor implements Serializable
    return enhancer.create(); 
}

Создание объекта в клиенте:

SomeClass c = new SomeClass(); // SomeClass implements Serializable
getTestService.test(c); // In this call, the parameter in the EJB is **not** null
c = (SomeClass)createProxy(c.getClass());
System.out.println(c instanceof Serializable); // This prints out true
getTestService.test(c); // In this call, the parameter in the EJB is null!

1 Ответ

0 голосов
/ 29 декабря 2013

Cglib динамически создает новый класс при расширении другого класса.Этот класс может быть сериализуемым по интерфейсу, но он все еще не будет доступен на сервере, когда он был создан на клиенте.На самом деле, ни один класс cglib фактически никогда не сериализуем, поскольку они уникальны для работающего экземпляра JVM.Даже если вы выполнили идентичное улучшение на сервере, класс все равно будет другим.Поэтому сервер должен выдать ClassNotFoundException вместо установки null.Возможно, вы обнаружили ошибку в вашем контейнере.

...