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