Hello! Have you tried to do cache.withKeepBinary().query(yourScanQuery)? This will avoid demarshalling of binary objects in predicate.
Regards, -- Ilya Kasnacheev вт, 18 сент. 2018 г. в 13:29, Saby <[email protected]>: > Hi Ilya, > I tested it with nightly build of 17/09/2018(ver. > 2.7.0.20180917#19700101-sha1:DEV), but getting the same exception. Getting > the following exception while trying to fetch the data from cache using > ScanQuery from Java Thin client, but SqlQuery giving the correct result. > ScanQuery excepting cached class's description in the server class path. > > The definition of the cached class is- > > public class IgniteValueClass implements Binarylizable, Serializable { > private static final long serialVersionUID = 502832443677779719L; > @QuerySqlField(index = true) > String id; > @QuerySqlField(index = true) > String val1; > > @QuerySqlField > String val2; > > public String getId() { > return id; > } > > public void setId(String id) { > this.id = id; > } > > public String getVal1() { > return val1; > } > > public void setVal1(String val1) { > this.val1 = val1; > } > > public String getVal2() { > return val2; > } > > public void setVal2(String val2) { > this.val2 = val2; > } > > @Override > public boolean equals(Object obj) { > if (obj == null) > return false; > IgniteValueClass newObj = (IgniteValueClass) obj; > if (newObj == this) > return true; > return check(id, newObj.id) && check(val1, newObj.val1) && > check(val2, > newObj.val2); > } > > private boolean check(String v1, String v2) { > if (v1 == v2 || (v1 != null && v1.equals(v2))) > return true; > return false; > } > > @Override > public void writeBinary(BinaryWriter writer) throws > BinaryObjectException { > writer.writeString("id", id); > writer.writeString("val1", val1); > writer.writeString("val2", val2); > > } > > @Override > public void readBinary(BinaryReader reader) throws > BinaryObjectException { > id = reader.readString("id"); > val1 = reader.readString("val1"); > val2 = reader.readString("val2"); > > } > > @Override > public String toString() { > return "ID:" + id + " Val1:" + val1 + " Val2:" + val2; > } > } > > The server is throwing this exception: > > [13:05:12,104][SEVERE][client-connector-#75][ClientListenerNioListener] > Failed to process client request > > [req=o.a.i.i.processors.platform.client.cache.ClientCacheScanQueryRequest@490c852e > ] > class org.apache.ignite.binary.BinaryInvalidTypeException: > xxx.imdg.ignite.test.IgniteValueClass > at > > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:707) > at > > org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize0(BinaryReaderExImpl.java:1757) > at > > org.apache.ignite.internal.binary.BinaryReaderExImpl.deserialize(BinaryReaderExImpl.java:1716) > at > > org.apache.ignite.internal.binary.BinaryObjectImpl.deserializeValue(BinaryObjectImpl.java:798) > at > > org.apache.ignite.internal.binary.BinaryObjectImpl.value(BinaryObjectImpl.java:143) > at > > org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinary(CacheObjectUtils.java:177) > at > > org.apache.ignite.internal.processors.cache.CacheObjectUtils.unwrapBinaryIfNeeded(CacheObjectUtils.java:39) > at > > org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.advance(GridCacheQueryManager.java:3082) > at > > org.apache.ignite.internal.processors.cache.query.GridCacheQueryManager$ScanQueryIterator.onHasNext(GridCacheQueryManager.java:2984) > at > > org.apache.ignite.internal.util.GridCloseableIteratorAdapter.hasNextX(GridCloseableIteratorAdapter.java:53) > at > > org.apache.ignite.internal.util.lang.GridIteratorAdapter.hasNext(GridIteratorAdapter.java:45) > at > > org.apache.ignite.internal.processors.platform.client.cache.ClientCacheQueryCursor.writePage(ClientCacheQueryCursor.java:77) > at > > org.apache.ignite.internal.processors.platform.client.cache.ClientCacheQueryResponse.encode(ClientCacheQueryResponse.java:50) > at > > org.apache.ignite.internal.processors.platform.client.ClientMessageParser.encode(ClientMessageParser.java:387) > at > > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:172) > at > > org.apache.ignite.internal.processors.odbc.ClientListenerNioListener.onMessage(ClientListenerNioListener.java:45) > at > > org.apache.ignite.internal.util.nio.GridNioFilterChain$TailFilter.onMessageReceived(GridNioFilterChain.java:279) > at > > org.apache.ignite.internal.util.nio.GridNioFilterAdapter.proceedMessageReceived(GridNioFilterAdapter.java:109) > at > > org.apache.ignite.internal.util.nio.GridNioAsyncNotifyFilter$3.body(GridNioAsyncNotifyFilter.java:97) > at > org.apache.ignite.internal.util.worker.GridWorker.run(GridWorker.java:110) > at > > org.apache.ignite.internal.util.worker.GridWorkerPool$1.run(GridWorkerPool.java:70) > at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown > Source) > at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown > Source) > at java.lang.Thread.run(Unknown Source) > Caused by: java.lang.ClassNotFoundException: > xxx.imdg.ignite.test.IgniteValueClass > at java.net.URLClassLoader.findClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) > at java.lang.ClassLoader.loadClass(Unknown Source) > at java.lang.Class.forName0(Native Method) > at java.lang.Class.forName(Unknown Source) > at > org.apache.ignite.internal.util.IgniteUtils.forName(IgniteUtils.java:8681) > at > > org.apache.ignite.internal.MarshallerContextImpl.getClass(MarshallerContextImpl.java:349) > at > > org.apache.ignite.internal.binary.BinaryContext.descriptorForTypeId(BinaryContext.java:698) > ... 23 more > > > > -- > Sent from: http://apache-ignite-users.70518.x6.nabble.com/ >
