odnoklassniki / one-nio

Unconventional I/O library for Java
Apache License 2.0
655 stars 97 forks source link

java.lang.IllegalAccessError: java/util/concurrent/locks/ReentrantLock$Sync #53

Closed renatn closed 4 years ago

renatn commented 4 years ago

Привет!

Получаю ошибку при попытке десериализовать класс у которого есть поле типа ReentrantLock. Следующий код

DeserializeStream stream = new DeserializeStream( bytes );
return ( T )stream.readObject();

выбрасывает exception java.lang.IllegalAccessError: java/util/concurrent/locks/ReentrantLock$Sync

apangin commented 4 years ago

Пример можно? Попробовал сериализовать-десериализовать простой класс с полем ReentrantLock - всё получилось.

renatn commented 4 years ago

Вот такой тест (извиняюсь что на Котлине):

class TestBlockingQueue(
        private val capacity: Long,
        private val ttl: Long
): Serializable {

    private val tasksQueue = HashMap<String, Serializable>()
    private val tasksLock = ReentrantLock()
    private val tasksFullCondition = tasksLock.newCondition()

   //.... методы
}

class TestBlockingQueueTest {

    @Test
    fun testShouldSerialize() {
        val queue = TestBlockingQueue(100, 100)
        val buf = ByteArray(57)
        val out = SerializeStream(buf)
        out.writeObject(queue)
        assertEquals(out.count(), 57)

        val stream = DeserializeStream(buf)
        val queueTest =  stream.readObject() as TestBlockingQueue
        assertNotNull(queueTest)
    }

}

выкидывает Exception:

> AccessError: tried to access class java.util.concurrent.locks.ReentrantLock$Sync from class sun.reflect.Delegate1_ReentrantLock
> 
>   at sun.reflect.Delegate1_ReentrantLock.read(Unknown Source)
apangin commented 4 years ago

Не воспроизводится. Какая JDK?

renatn commented 4 years ago

/Library/Java/JavaVirtualMachines/jdk1.8.0_231.jdk/Contents/Home/bin/java

Наверно можно закрыть. Побробую поглубже изучить. Если что вернусь