diff --git a/examples/pom.xml b/examples/pom.xml index 259e7d8..c06863f 100644 --- a/examples/pom.xml +++ b/examples/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.10.10.RELEASE + 1.10.11.RELEASE capa-examples diff --git a/pom.xml b/pom.xml index 6d5a710..e13b145 100644 --- a/pom.xml +++ b/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent pom - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk-parent SDK for Capa. https://github.com/reactivegroup diff --git a/sdk-component/pom.xml b/sdk-component/pom.xml index adf9c8c..8fc9220 100644 --- a/sdk-component/pom.xml +++ b/sdk-component/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk-component @@ -33,7 +33,7 @@ 4.9.1 1.4.10 - 2.14.1 + 2.15.0 1.2.3 diff --git a/sdk-component/src/main/java/group/rxcloud/capa/component/log/CapaLogbackAppenderAgent.java b/sdk-component/src/main/java/group/rxcloud/capa/component/log/CapaLogbackAppenderAgent.java index b84ffdc..bad5fd4 100644 --- a/sdk-component/src/main/java/group/rxcloud/capa/component/log/CapaLogbackAppenderAgent.java +++ b/sdk-component/src/main/java/group/rxcloud/capa/component/log/CapaLogbackAppenderAgent.java @@ -24,6 +24,7 @@ * The agent of the logback impl. */ public class CapaLogbackAppenderAgent extends UnsynchronizedAppenderBase { + /** * The log component type. */ diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/configstore/TestObjectSerializer.java b/sdk-component/src/test/java/group/rxcloud/capa/component/configstore/TestObjectSerializer.java index e8cf351..2425990 100644 --- a/sdk-component/src/test/java/group/rxcloud/capa/component/configstore/TestObjectSerializer.java +++ b/sdk-component/src/test/java/group/rxcloud/capa/component/configstore/TestObjectSerializer.java @@ -17,12 +17,12 @@ package group.rxcloud.capa.component.configstore; import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer; -import group.rxcloud.capa.infrastructure.serializer.ObjectSerializer; +import group.rxcloud.capa.infrastructure.serializer.ExtensionObjectSerializer; /** * serializer/deserializer for request/response objects used in tests only */ -public class TestObjectSerializer extends ObjectSerializer implements CapaObjectSerializer { +public class TestObjectSerializer extends ExtensionObjectSerializer implements CapaObjectSerializer { /** * {@inheritDoc} diff --git a/sdk-component/src/test/java/group/rxcloud/capa/component/http/CapaHttpBuilderTest.java b/sdk-component/src/test/java/group/rxcloud/capa/component/http/CapaHttpBuilderTest.java index b1beb44..5f21200 100644 --- a/sdk-component/src/test/java/group/rxcloud/capa/component/http/CapaHttpBuilderTest.java +++ b/sdk-component/src/test/java/group/rxcloud/capa/component/http/CapaHttpBuilderTest.java @@ -18,7 +18,7 @@ import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer; import group.rxcloud.capa.infrastructure.serializer.DefaultObjectSerializer; -import group.rxcloud.capa.infrastructure.serializer.ObjectSerializer; +import group.rxcloud.capa.infrastructure.serializer.ExtensionObjectSerializer; import org.junit.jupiter.api.Assertions; import org.junit.jupiter.api.Test; @@ -53,7 +53,7 @@ public void testBuild_Success() { /** * serializer/deserializer for request/response objects used in tests only */ - private class TestObjectSerializer extends ObjectSerializer implements CapaObjectSerializer { + private class TestObjectSerializer extends ExtensionObjectSerializer implements CapaObjectSerializer { /** * {@inheritDoc} diff --git a/sdk-infrastructure/pom.xml b/sdk-infrastructure/pom.xml index a9b0269..c1fedd5 100644 --- a/sdk-infrastructure/pom.xml +++ b/sdk-infrastructure/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk-infrastructure diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/AbstractObjectSerializer.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/AbstractObjectSerializer.java new file mode 100644 index 0000000..c8076cf --- /dev/null +++ b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/AbstractObjectSerializer.java @@ -0,0 +1,65 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one or more + * contributor license agreements. See the NOTICE file distributed with + * this work for additional information regarding copyright ownership. + * The ASF licenses this file to You under the Apache License, Version 2.0 + * (the "License"); you may not use this file except in compliance with + * the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package group.rxcloud.capa.infrastructure.serializer; + +import group.rxcloud.cloudruntimes.utils.TypeRef; + +import java.io.IOException; + +public abstract class AbstractObjectSerializer implements CapaObjectSerializer { + + /** + * {@inheritDoc} + */ + @Override + public byte[] serialize(Object o) throws IOException { + if (o == null) { + return null; + } + if (o instanceof byte[]) { + return (byte[]) o; + } + if (o instanceof String) { + return ((String) o).getBytes(); + } + + return doSerialize(o); + } + + protected abstract byte[] doSerialize(Object o) throws IOException; + + /** + * {@inheritDoc} + */ + @Override + public T deserialize(byte[] data, TypeRef type) throws IOException { + Class clazz = (Class) type.getType(); + if (data == null) { + return null; + } + if (clazz == byte[].class) { + return (T) data; + } + if (clazz == String.class) { + return (T) new String(data); + } + + return doDeserialize(data, type); + } + + protected abstract T doDeserialize(byte[] data, TypeRef type) throws IOException; +} diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/DefaultObjectSerializer.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/DefaultObjectSerializer.java index 2cc4068..3618bb2 100644 --- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/DefaultObjectSerializer.java +++ b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/DefaultObjectSerializer.java @@ -24,7 +24,7 @@ /** * Default serializer/deserializer for request/response objects. */ -public class DefaultObjectSerializer extends ObjectSerializer implements CapaObjectSerializer { +public class DefaultObjectSerializer extends ExtensionObjectSerializer implements CapaObjectSerializer { /** * {@inheritDoc} diff --git a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ObjectSerializer.java b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ExtensionObjectSerializer.java similarity index 85% rename from sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ObjectSerializer.java rename to sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ExtensionObjectSerializer.java index 3f84b49..211f4a6 100644 --- a/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ObjectSerializer.java +++ b/sdk-infrastructure/src/main/java/group/rxcloud/capa/infrastructure/serializer/ExtensionObjectSerializer.java @@ -31,7 +31,7 @@ /** * Serializes and deserializes an internal object. */ -public class ObjectSerializer { +public abstract class ExtensionObjectSerializer extends AbstractObjectSerializer { /** * Shared Json serializer/deserializer as per Jackson's documentation. @@ -44,7 +44,7 @@ public class ObjectSerializer { /** * Default constructor to avoid class from being instantiated outside package but still inherited. */ - protected ObjectSerializer() { + protected ExtensionObjectSerializer() { } /** @@ -55,33 +55,31 @@ protected ObjectMapper getObjectMapper() { } /** - * Serializes a given state object into byte array. + * Serializes a given object into byte array. * - * @param state State object to be serialized. + * @param o object to be serialized. * @return Array of bytes[] with the serialized content. - * @throws IOException In case state cannot be serialized. + * @throws IOException In case o cannot be serialized. */ - public byte[] serialize(Object state) throws IOException { - if (state == null) { + @Override + public byte[] doSerialize(Object o) throws IOException { + if (o == null) { return null; } - - if (state.getClass() == Void.class) { + if (o.getClass() == Void.class) { return null; } - // Have this check here to be consistent with deserialization (see deserialize() method below). - if (state instanceof byte[]) { - return (byte[]) state; + if (o instanceof byte[]) { + return (byte[]) o; } - // Proto buffer class is serialized directly. - if (state instanceof MessageLite) { - return ((MessageLite) state).toByteArray(); + if (o instanceof MessageLite) { + return ((MessageLite) o).toByteArray(); } // Not string, not primitive, so it is a complex type: we use JSON for that. - return getObjectMapper().writeValueAsBytes(state); + return getObjectMapper().writeValueAsBytes(o); } /** @@ -93,8 +91,9 @@ public byte[] serialize(Object state) throws IOException { * @return Object of type T. * @throws IOException In case content cannot be deserialized. */ - public T deserialize(byte[] content, TypeRef type) throws IOException { - return deserialize(content, getObjectMapper().constructType(type.getType())); + @Override + public T doDeserialize(byte[] content, TypeRef type) throws IOException { + return doDeserialize(content, getObjectMapper().constructType(type.getType())); } /** @@ -106,11 +105,11 @@ public T deserialize(byte[] content, TypeRef type) throws IOException { * @return Object of type T. * @throws IOException In case content cannot be deserialized. */ - public T deserialize(byte[] content, Class clazz) throws IOException { - return deserialize(content, getObjectMapper().constructType(clazz)); + public T doDeserialize(byte[] content, Class clazz) throws IOException { + return doDeserialize(content, getObjectMapper().constructType(clazz)); } - private T deserialize(byte[] content, JavaType javaType) throws IOException { + private T doDeserialize(byte[] content, JavaType javaType) throws IOException { if ((javaType == null) || javaType.isTypeOrSubTypeOf(Void.class)) { return null; } diff --git a/sdk-spi-demo/pom.xml b/sdk-spi-demo/pom.xml index 8a0d81c..b833db6 100644 --- a/sdk-spi-demo/pom.xml +++ b/sdk-spi-demo/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk-spi-demo diff --git a/sdk-spi/pom.xml b/sdk-spi/pom.xml index dae108e..53e2669 100644 --- a/sdk-spi/pom.xml +++ b/sdk-spi/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk-spi @@ -31,7 +31,7 @@ capa-sdk-spi - 2.14.1 + 2.15.0 1.2.3 diff --git a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java index 5041c86..549b505 100644 --- a/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java +++ b/sdk-spi/src/test/java/group/rxcloud/capa/spi/http/CapaSerializeHttpSpiTest.java @@ -21,7 +21,7 @@ import group.rxcloud.capa.infrastructure.exceptions.CapaException; import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer; import group.rxcloud.capa.infrastructure.serializer.DefaultObjectSerializer; -import group.rxcloud.capa.infrastructure.serializer.ObjectSerializer; +import group.rxcloud.capa.infrastructure.serializer.ExtensionObjectSerializer; import group.rxcloud.capa.spi.http.config.RpcServiceOptions; import group.rxcloud.cloudruntimes.utils.TypeRef; import okhttp3.Headers; @@ -223,7 +223,7 @@ public void testDoInvokeApi_Success() throws ExecutionException, InterruptedExce /** * serializer/deserializer for request/response objects used in tests only */ - private class TestRuntimeExceptionObjectSerializer extends ObjectSerializer implements CapaObjectSerializer { + private class TestRuntimeExceptionObjectSerializer extends ExtensionObjectSerializer implements CapaObjectSerializer { /** * {@inheritDoc} @@ -254,7 +254,7 @@ public String getContentType() { /** * serializer/deserializer for request/response objects used in tests only */ - private class TestIOExceptionObjectSerializer extends ObjectSerializer implements CapaObjectSerializer { + private class TestIOExceptionObjectSerializer extends ExtensionObjectSerializer implements CapaObjectSerializer { /** * {@inheritDoc} diff --git a/sdk-springboot/pom.xml b/sdk-springboot/pom.xml index 512f725..314002a 100644 --- a/sdk-springboot/pom.xml +++ b/sdk-springboot/pom.xml @@ -23,7 +23,7 @@ capa-parent group.rxcloud - 1.10.10.RELEASE + 1.10.11.RELEASE sdk-springboot diff --git a/sdk-springboot/src/main/java/group/rxcloud/capa/springboot/pubsub/PubSubBeanPostProcessor.java b/sdk-springboot/src/main/java/group/rxcloud/capa/springboot/pubsub/PubSubBeanPostProcessor.java index e80c6bf..75f862a 100644 --- a/sdk-springboot/src/main/java/group/rxcloud/capa/springboot/pubsub/PubSubBeanPostProcessor.java +++ b/sdk-springboot/src/main/java/group/rxcloud/capa/springboot/pubsub/PubSubBeanPostProcessor.java @@ -19,11 +19,12 @@ import com.kevinten.vrml.core.beans.SpringContextConfigurator; import com.kevinten.vrml.core.serialization.Serialization; import group.rxcloud.capa.infrastructure.exceptions.CapaException; +import group.rxcloud.capa.infrastructure.serializer.CapaObjectSerializer; import group.rxcloud.capa.infrastructure.serializer.DefaultObjectSerializer; -import group.rxcloud.capa.infrastructure.serializer.ObjectSerializer; import group.rxcloud.capa.pubsub.Topic; import group.rxcloud.capa.pubsub.domain.TopicEventRequest; import group.rxcloud.capa.pubsub.domain.TopicSubscription; +import group.rxcloud.cloudruntimes.utils.TypeRef; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.BeansException; @@ -49,7 +50,7 @@ public class PubSubBeanPostProcessor implements BeanPostProcessor { private static final Logger logger = LoggerFactory.getLogger(PubSubBeanPostProcessor.class); private final EmbeddedValueResolver embeddedValueResolver; - private final ObjectSerializer serializer; + private final CapaObjectSerializer serializer; PubSubBeanPostProcessor(ConfigurableBeanFactory beanFactory) { embeddedValueResolver = new EmbeddedValueResolver(beanFactory); @@ -84,7 +85,7 @@ public Object postProcessAfterInitialization(Object bean, String beanName) throw * @param clazz Controller class where {@link Topic} is expected. * @param serializer json serializer */ - private static void subscribeToTopics(Class clazz, EmbeddedValueResolver embeddedValueResolver, ObjectSerializer serializer) { + private static void subscribeToTopics(Class clazz, EmbeddedValueResolver embeddedValueResolver, CapaObjectSerializer serializer) { if (clazz == null) { return; } @@ -152,12 +153,12 @@ private static void subscribeToTopics(Class clazz, EmbeddedValueResolver embedde } } - private static Map resolveMetadataMap(ObjectSerializer serializer, String metadata) { + private static Map resolveMetadataMap(CapaObjectSerializer serializer, String metadata) { Map metadataMap = Collections.emptyMap(); if (!StringUtils.isEmpty(metadata)) { byte[] metadataBytes = metadata.getBytes(StandardCharsets.UTF_8); try { - metadataMap = serializer.deserialize(metadataBytes, Map.class); + metadataMap = serializer.deserialize(metadataBytes, TypeRef.get(Map.class)); } catch (Exception e) { if (logger.isErrorEnabled()) { logger.error("[PubSub.@Topic.subscribe] illegal metadata[{}]", diff --git a/sdk/pom.xml b/sdk/pom.xml index 7deb0f7..a080919 100644 --- a/sdk/pom.xml +++ b/sdk/pom.xml @@ -23,7 +23,7 @@ group.rxcloud capa-parent - 1.10.10.RELEASE + 1.10.11.RELEASE capa-sdk