@Override public void writeObject(ObjectOutput output, QueryRequest queryRequest) throws IOException { output.writeUTF(queryRequest.getQueryString()); output.writeLong(queryRequest.getStartOffset() != null ? queryRequest.getStartOffset() : -1); output.writeInt(queryRequest.getMaxResults() != null ? queryRequest.getMaxResults() : -1); output.writeObject(queryRequest.getNamedParameters()); }
@Override @SuppressWarnings("unchecked") public QueryRequest readObject(ObjectInput input) throws IOException, ClassNotFoundException { QueryRequest queryRequest = new QueryRequest(); queryRequest.setQueryString(input.readUTF()); long startOffset = input.readLong(); queryRequest.setStartOffset(startOffset != -1 ? startOffset : null); int maxResults = input.readInt(); queryRequest.setMaxResults(maxResults != -1 ? maxResults : null); queryRequest.setNamedParameters((List<QueryRequest.NamedParameter>) input.readObject()); return queryRequest; } }
@Override public void writeTo(ProtoStreamWriter writer, FilterResult filterResult) throws IOException { if (filterResult.getProjection() == null) { // skip marshalling the instance if there is a projection writer.writeBytes("instance", (byte[]) filterResult.getInstance()); } else { WrappedMessage[] p = new WrappedMessage[filterResult.getProjection().length]; for (int i = 0; i < p.length; i++) { p[i] = new WrappedMessage(filterResult.getProjection()[i]); } writer.writeArray("projection", p, WrappedMessage.class); } if (filterResult.getSortProjection() != null) { WrappedMessage[] p = new WrappedMessage[filterResult.getSortProjection().length]; for (int i = 0; i < p.length; i++) { p[i] = new WrappedMessage(filterResult.getSortProjection()[i]); } writer.writeArray("sortProjection", p, WrappedMessage.class); } }
/** * Registers proto files and marshallers. * * @param ctx the serialization context * @throws org.infinispan.protostream.DescriptorParserException if a proto definition file fails to parse correctly * @throws IOException if proto file registration fails */ public static void registerMarshallers(SerializationContext ctx) throws IOException { FileDescriptorSource fileDescriptorSource = new FileDescriptorSource(); fileDescriptorSource.addProtoFile(QUERY_PROTO_RES, MarshallerRegistration.class.getResourceAsStream(QUERY_PROTO_RES)); fileDescriptorSource.addProtoFile(MESSAGE_PROTO_RES, MarshallerRegistration.class.getResourceAsStream(MESSAGE_PROTO_RES)); ctx.registerProtoFiles(fileDescriptorSource); ctx.registerMarshaller(new QueryRequest.NamedParameter.Marshaller()); ctx.registerMarshaller(new QueryRequest.Marshaller()); ctx.registerMarshaller(new QueryResponse.Marshaller()); ctx.registerMarshaller(new FilterResult.Marshaller()); ctx.registerMarshaller(new ContinuousQueryResult.ResultType.Marshaller()); ctx.registerMarshaller(new ContinuousQueryResult.Marshaller()); } }
@Override public QueryResponse readFrom(ProtoStreamReader reader) throws IOException { QueryResponse queryResponse = new QueryResponse(); queryResponse.setNumResults(reader.readInt("numResults")); queryResponse.setProjectionSize(reader.readInt("projectionSize")); queryResponse.setResults(reader.readCollection("results", new ArrayList<>(), WrappedMessage.class)); queryResponse.setTotalResults(reader.readLong("totalResults")); return queryResponse; }
@Override public void writeObject(ObjectOutput output, QueryResponse queryResponse) throws IOException { output.writeInt(queryResponse.getNumResults()); output.writeInt(queryResponse.getProjectionSize()); List<WrappedMessage> wrappedResults = queryResponse.getResults(); List<Object> results = new ArrayList<>(wrappedResults.size()); for (WrappedMessage o : wrappedResults) { results.add(o.getValue()); } output.writeObject(results); output.writeLong(queryResponse.getTotalResults()); }
private void roundtrip(Object in) throws Exception { BaseProtoStreamMarshaller marshaller = makeInstance(); assertTrue(marshaller.isMarshallable(in)); byte[] buffer = marshaller.objectToByteBuffer(in); assertNotNull(buffer); Object out = marshaller.objectFromByteBuffer(buffer); assertNotNull(out); assertEquals(in.getClass(), out.getClass()); if (in instanceof byte[]) { assertArrayEquals((byte[]) in, (byte[]) out); } else { assertEquals(in, out); } }
@Override public Object objectFromByteBuffer(byte[] buf, int offset, int length) throws IOException, ClassNotFoundException { return ProtobufUtil.fromWrappedByteArray(getSerializationContext(), buf, offset, length); }
@Override public QueryRequest.NamedParameter readObject(ObjectInput input) throws IOException, ClassNotFoundException { String name = input.readUTF(); Object value = input.readObject(); return new QueryRequest.NamedParameter(name, value); } }
@Override public QueryRequest readFrom(ProtoStreamReader reader) throws IOException { QueryRequest queryRequest = new QueryRequest(); queryRequest.setQueryString(reader.readString("queryString")); queryRequest.setStartOffset(reader.readLong("startOffset")); queryRequest.setMaxResults(reader.readInt("maxResults")); queryRequest.setNamedParameters(reader.readCollection("namedParameters", new ArrayList<>(), NamedParameter.class)); queryRequest.setIndexedQueryMode(reader.readString("indexedQueryMode")); return queryRequest; }
@ClientCacheEntryCreated @SuppressWarnings("unused") public void handleClientCacheEntryCreatedEvent(ClientCacheEntryCustomEvent event) throws IOException { FilterResult r = ProtobufUtil.fromWrappedByteArray(serializationContext, (byte[]) event.getEventData()); createEvents.add(r); log.debugf("handleClientCacheEntryCreatedEvent instance=%s projection=%s sortProjection=%s\n", r.getInstance(), r.getProjection() == null ? null : Arrays.asList(r.getProjection()), r.getSortProjection() == null ? null : Arrays.asList(r.getSortProjection())); }
@Override public void writeTo(ProtoStreamWriter writer, QueryRequest queryRequest) throws IOException { writer.writeString("queryString", queryRequest.getQueryString()); writer.writeLong("startOffset", queryRequest.getStartOffset()); writer.writeInt("maxResults", queryRequest.getMaxResults()); writer.writeCollection("namedParameters", queryRequest.getNamedParameters(), NamedParameter.class); writer.writeString("indexedQueryMode", queryRequest.getIndexedQueryMode()); }
@Override @SuppressWarnings("unchecked") public QueryResponse readObject(ObjectInput input) throws IOException, ClassNotFoundException { QueryResponse queryResponse = new QueryResponse(); queryResponse.setNumResults(input.readInt()); queryResponse.setProjectionSize(input.readInt()); List<Object> results = (List<Object>) input.readObject(); List<WrappedMessage> wrappedResults = new ArrayList<>(results.size()); for (Object o : results) { wrappedResults.add(new WrappedMessage(o)); } queryResponse.setResults(wrappedResults); queryResponse.setTotalResults(input.readLong()); return queryResponse; } }
@Override public boolean isMarshallable(Object o) { // our marshaller can handle all of these primitive/scalar types as well even if we do not // have a per-type marshaller defined in our SerializationContext return o instanceof String || o instanceof Long || o instanceof Integer || o instanceof Double || o instanceof Float || o instanceof Boolean || o instanceof byte[] || o instanceof Byte || o instanceof Short || o instanceof Character || o instanceof java.util.Date || o instanceof java.time.Instant || getSerializationContext().canMarshall(o.getClass()); }
@Override public NamedParameter readFrom(ProtoStreamReader reader) throws IOException { String name = reader.readString("name"); WrappedMessage value = reader.readObject("value", WrappedMessage.class); return new NamedParameter(name, value.getValue()); }
@Override protected ByteBuffer objectToBuffer(Object o, int estimatedSize) throws IOException, InterruptedException { byte[] bytes = ProtobufUtil.toWrappedByteArray(getSerializationContext(), o); return new ByteBufferImpl(bytes, 0, bytes.length); }