Skip to content

Commit 19b8ab9

Browse files
ujjboyleizhiyuan
authored andcommitted
Upgrade sofa-hessian to v3.3.3. (#321)
update sofa-hessian to v3.3.3, upgrade blacklist, refactor custom hessian serializer.
1 parent 5b3f148 commit 19b8ab9

File tree

13 files changed

+204
-265
lines changed

13 files changed

+204
-265
lines changed

all/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,7 @@
5959
<sofa.common.tools.version>1.0.12</sofa.common.tools.version>
6060
<javassist.version>3.20.0-GA</javassist.version>
6161
<netty.version>4.1.25.Final</netty.version>
62-
<hessian.version>3.3.2</hessian.version>
62+
<hessian.version>3.3.3</hessian.version>
6363
<resteasy.version>3.0.12.Final</resteasy.version>
6464
<bolt.version>1.4.2</bolt.version>
6565
<tracer.version>2.1.1</tracer.version>

bom/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@
2222
<opentracing.version>0.22.0</opentracing.version>
2323
<dubbo_version>2.4.10</dubbo_version>
2424
<!-- serialization -->
25-
<hessian.version>3.3.2</hessian.version>
25+
<hessian.version>3.3.3</hessian.version>
2626
<thrift.version>0.9.2</thrift.version>
2727
<protobuf.version>3.1.0</protobuf.version>
2828
<jackson.version>2.7.9</jackson.version>
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,39 @@
1+
/*
2+
* Licensed to the Apache Software Foundation (ASF) under one or more
3+
* contributor license agreements. See the NOTICE file distributed with
4+
* this work for additional information regarding copyright ownership.
5+
* The ASF licenses this file to You under the Apache License, Version 2.0
6+
* (the "License"); you may not use this file except in compliance with
7+
* the License. You may obtain a copy of the License at
8+
*
9+
* http://www.apache.org/licenses/LICENSE-2.0
10+
*
11+
* Unless required by applicable law or agreed to in writing, software
12+
* distributed under the License is distributed on an "AS IS" BASIS,
13+
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14+
* See the License for the specific language governing permissions and
15+
* limitations under the License.
16+
*/
17+
package com.alipay.sofa.rpc.codec.sofahessian;
18+
19+
import com.alipay.sofa.rpc.codec.sofahessian.serialize.CustomHessianSerializer;
20+
21+
import java.util.Map;
22+
import java.util.concurrent.ConcurrentHashMap;
23+
24+
/**
25+
* @author <a href=mailto:leizhiyuan@gmail.com>leizhiyuan</a>
26+
*/
27+
public class CustomHessianSerializerManager {
28+
29+
private final static Map<Class, CustomHessianSerializer> CUSTOM_SERIALIZERS = new ConcurrentHashMap<Class, CustomHessianSerializer>(
30+
2);
31+
32+
public static CustomHessianSerializer getSerializer(Class clazz) {
33+
return CUSTOM_SERIALIZERS.get(clazz);
34+
}
35+
36+
public static void addSerializer(Class clazz, CustomHessianSerializer serializerManager) {
37+
CUSTOM_SERIALIZERS.put(clazz, serializerManager);
38+
}
39+
}

extension-impl/codec-sofa-hessian/src/main/java/com/alipay/sofa/rpc/codec/sofahessian/RpcSerializeObjectorManager.java

Lines changed: 0 additions & 47 deletions
This file was deleted.

extension-impl/codec-sofa-hessian/src/main/java/com/alipay/sofa/rpc/codec/sofahessian/SofaHessianSerializer.java

Lines changed: 17 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -19,15 +19,18 @@
1919
import com.alipay.hessian.ClassNameResolver;
2020
import com.alipay.hessian.NameBlackListFilter;
2121
import com.alipay.sofa.rpc.codec.AbstractSerializer;
22-
import com.alipay.sofa.rpc.codec.sofahessian.serialize.RpcSerializeObjector;
23-
import com.alipay.sofa.rpc.common.RemotingConstants;
22+
import com.alipay.sofa.rpc.codec.sofahessian.serialize.CustomHessianSerializer;
23+
import com.alipay.sofa.rpc.codec.sofahessian.serialize.SofaRequestHessianSerializer;
24+
import com.alipay.sofa.rpc.codec.sofahessian.serialize.SofaResponseHessianSerializer;
2425
import com.alipay.sofa.rpc.common.RpcConfigs;
2526
import com.alipay.sofa.rpc.common.RpcOptions;
2627
import com.alipay.sofa.rpc.common.SofaConfigs;
2728
import com.alipay.sofa.rpc.common.SofaOptions;
2829
import com.alipay.sofa.rpc.common.struct.UnsafeByteArrayInputStream;
2930
import com.alipay.sofa.rpc.common.struct.UnsafeByteArrayOutputStream;
3031
import com.alipay.sofa.rpc.core.exception.SofaRpcException;
32+
import com.alipay.sofa.rpc.core.request.SofaRequest;
33+
import com.alipay.sofa.rpc.core.response.SofaResponse;
3134
import com.alipay.sofa.rpc.ext.Extension;
3235
import com.alipay.sofa.rpc.transport.AbstractByteBuf;
3336
import com.alipay.sofa.rpc.transport.ByteStreamWrapperByteBuf;
@@ -41,9 +44,9 @@
4144
/**
4245
* Serializer of SOFAHessian
4346
* <<p>
44-
* Encode: : Support MessageLite, String, SofaRequest and SofaResponse.
47+
* Encode: Object, SofaRequest and SofaResponse.
4548
* <p>
46-
* Decode by class mode : Support MessageLite and String.
49+
* Decode by class mode : Support SofaRequest and SofaResponse.
4750
* <p>
4851
* Decode by object template : Support SofaRequest and SofaResponse.
4952
* <ul>
@@ -80,7 +83,14 @@ public SofaHessianSerializer() {
8083
resolver.addFilter(new NameBlackListFilter(BlackListFileLoader.SOFA_SERIALIZE_BLACK_LIST, 8192));
8184
serializerFactory.setClassNameResolver(resolver);
8285
genericSerializerFactory.setClassNameResolver(resolver);
86+
} else {
87+
serializerFactory.setClassNameResolver(null);
88+
genericSerializerFactory.setClassNameResolver(null);
8389
}
90+
CustomHessianSerializerManager.addSerializer(SofaRequest.class,
91+
new SofaRequestHessianSerializer(serializerFactory, genericSerializerFactory));
92+
CustomHessianSerializerManager.addSerializer(SofaResponse.class,
93+
new SofaResponseHessianSerializer(serializerFactory, genericSerializerFactory));
8494
}
8595

8696
/**
@@ -103,7 +113,7 @@ protected SerializerFactory getSerializerFactory(boolean multipleClassLoader, bo
103113
@Override
104114
public AbstractByteBuf encode(Object object, Map<String, String> context) {
105115

106-
final RpcSerializeObjector serializer = RpcSerializeObjectorManager.getSerializer(object.getClass());
116+
CustomHessianSerializer serializer = CustomHessianSerializerManager.getSerializer(object.getClass());
107117
if (serializer != null) {
108118
return serializer.encodeObject(object, context);
109119
} else {
@@ -126,7 +136,7 @@ public Object decode(AbstractByteBuf data, Class clazz, Map<String, String> cont
126136
if (clazz == null) {
127137
throw buildDeserializeError("class is null!");
128138
} else {
129-
final RpcSerializeObjector serializer = RpcSerializeObjectorManager.getSerializer(clazz);
139+
CustomHessianSerializer serializer = CustomHessianSerializerManager.getSerializer(clazz);
130140
if (serializer != null) {
131141
return serializer.decodeObject(data, context);
132142
} else {
@@ -149,32 +159,12 @@ public void decode(AbstractByteBuf data, Object template, Map<String, String> co
149159
if (template == null) {
150160
throw buildDeserializeError("template is null!");
151161
} else {
152-
final RpcSerializeObjector serializer = RpcSerializeObjectorManager.getSerializer(template.getClass());
162+
CustomHessianSerializer serializer = CustomHessianSerializerManager.getSerializer(template.getClass());
153163
if (serializer != null) {
154164
serializer.decodeObjectByTemplate(data, context, template);
155165
} else {
156166
throw buildDeserializeError(template.getClass() + " template is not supported");
157167
}
158168
}
159169
}
160-
161-
/**
162-
* Is generic request boolean.
163-
*
164-
* @param serializeType the serialize type
165-
* @return the boolean
166-
*/
167-
protected boolean isGenericRequest(String serializeType) {
168-
return serializeType != null && !serializeType.equals(RemotingConstants.SERIALIZE_FACTORY_NORMAL);
169-
}
170-
171-
/**
172-
* Is generic response boolean.
173-
*
174-
* @param serializeType the serialize type
175-
* @return the boolean
176-
*/
177-
protected boolean isGenericResponse(String serializeType) {
178-
return serializeType != null && serializeType.equals(RemotingConstants.SERIALIZE_FACTORY_GENERIC);
179-
}
180170
}
Lines changed: 7 additions & 43 deletions
Original file line numberDiff line numberDiff line change
@@ -16,28 +16,17 @@
1616
*/
1717
package com.alipay.sofa.rpc.codec.sofahessian.serialize;
1818

19-
import com.alipay.hessian.ClassNameResolver;
20-
import com.alipay.hessian.NameBlackListFilter;
21-
import com.alipay.sofa.rpc.codec.sofahessian.BlackListFileLoader;
22-
import com.alipay.sofa.rpc.codec.sofahessian.GenericMultipleClassLoaderSofaSerializerFactory;
23-
import com.alipay.sofa.rpc.codec.sofahessian.GenericSingleClassLoaderSofaSerializerFactory;
24-
import com.alipay.sofa.rpc.codec.sofahessian.MultipleClassLoaderSofaSerializerFactory;
25-
import com.alipay.sofa.rpc.codec.sofahessian.SingleClassLoaderSofaSerializerFactory;
2619
import com.alipay.sofa.rpc.common.RemotingConstants;
27-
import com.alipay.sofa.rpc.common.RpcConfigs;
28-
import com.alipay.sofa.rpc.common.RpcOptions;
29-
import com.alipay.sofa.rpc.common.SofaConfigs;
30-
import com.alipay.sofa.rpc.common.SofaOptions;
3120
import com.alipay.sofa.rpc.context.RpcInternalContext;
3221
import com.alipay.sofa.rpc.core.exception.RpcErrorType;
3322
import com.alipay.sofa.rpc.core.exception.SofaRpcException;
3423
import com.caucho.hessian.io.SerializerFactory;
3524

3625
/**
37-
* @author bystander
38-
* @version $Id: AbstractRpcSerializeObjector.java, v 0.1 2018年09月08日 7:15 PM bystander Exp $
26+
* @author <a href=mailto:leizhiyuan@gmail.com>leizhiyuan</a>
27+
* @author <a href=mailto:zhanggeng.zg@antfin.com>GengZhang</a>
3928
*/
40-
public class AbstractRpcSerializeObjector {
29+
public abstract class AbstractCustomHessianSerializer<T> implements CustomHessianSerializer<T> {
4130

4231
/**
4332
* Normal Serializer Factory
@@ -48,35 +37,10 @@ public class AbstractRpcSerializeObjector {
4837
*/
4938
protected SerializerFactory genericSerializerFactory;
5039

51-
public AbstractRpcSerializeObjector() {
52-
53-
boolean enableMultipleClassLoader = RpcConfigs.getBooleanValue(RpcOptions.MULTIPLE_CLASSLOADER_ENABLE);
54-
serializerFactory = getSerializerFactory(enableMultipleClassLoader, false);
55-
genericSerializerFactory = getSerializerFactory(enableMultipleClassLoader, true);
56-
if (RpcConfigs.getBooleanValue(RpcOptions.SERIALIZE_BLACKLIST_ENABLE) &&
57-
SofaConfigs.getBooleanValue(SofaOptions.CONFIG_SERIALIZE_BLACKLIST, true)) {
58-
ClassNameResolver resolver = new ClassNameResolver();
59-
resolver.addFilter(new NameBlackListFilter(BlackListFileLoader.SOFA_SERIALIZE_BLACK_LIST, 8192));
60-
serializerFactory.setClassNameResolver(resolver);
61-
genericSerializerFactory.setClassNameResolver(resolver);
62-
}
63-
}
64-
65-
/**
66-
* Gets serializer factory.
67-
*
68-
* @param multipleClassLoader the multiple class loader
69-
* @param generic the generic
70-
* @return the serializer factory
71-
*/
72-
protected SerializerFactory getSerializerFactory(boolean multipleClassLoader, boolean generic) {
73-
if (generic) {
74-
return multipleClassLoader ? new GenericMultipleClassLoaderSofaSerializerFactory() :
75-
new GenericSingleClassLoaderSofaSerializerFactory();
76-
} else {
77-
return multipleClassLoader ? new MultipleClassLoaderSofaSerializerFactory() :
78-
new SingleClassLoaderSofaSerializerFactory();
79-
}
40+
public AbstractCustomHessianSerializer(SerializerFactory serializerFactory,
41+
SerializerFactory genericSerializerFactory) {
42+
this.serializerFactory = serializerFactory;
43+
this.genericSerializerFactory = genericSerializerFactory;
8044
}
8145

8246
protected SofaRpcException buildDeserializeError(String message) {
Lines changed: 28 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -22,16 +22,38 @@
2222
import java.util.Map;
2323

2424
/**
25-
* @author bystander
26-
* @version $Id: RpcDecoderObjector.java, v 0.1 2018年09月07日 4:27 PM bystander Exp $
25+
* @author <a href=mailto:leizhiyuan@gmail.com>leizhiyuan</a>
2726
*/
28-
public interface RpcSerializeObjector<T> {
27+
public interface CustomHessianSerializer<T> {
2928

29+
/**
30+
* 反序列化,已有数据,填充字段
31+
*
32+
* @param data 原始字节数组
33+
* @param template 模板对象
34+
* @param context 上下文
35+
* @throws SofaRpcException 序列化异常
36+
*/
3037
public void decodeObjectByTemplate(AbstractByteBuf data, Map<String, String> context,
3138
T template) throws SofaRpcException;
3239

33-
public Object decodeObject(AbstractByteBuf data, Map<String, String> context) throws SofaRpcException;
34-
35-
public AbstractByteBuf encodeObject(T sofaRequest, Map<String, String> context);
40+
/**
41+
* 反序列化,只有类型,返回对象
42+
*
43+
* @param data 原始字节数组
44+
* @param context 上下文
45+
* @return 反序列化后的对象
46+
* @throws SofaRpcException 序列化异常
47+
*/
48+
public T decodeObject(AbstractByteBuf data, Map<String, String> context) throws SofaRpcException;
3649

50+
/**
51+
* 序列化
52+
*
53+
* @param object 对象
54+
* @param context 上下文
55+
* @return 序列化后的对象
56+
* @throws SofaRpcException 序列化异常
57+
*/
58+
public AbstractByteBuf encodeObject(T object, Map<String, String> context);
3759
}
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -27,22 +27,19 @@
2727
import com.alipay.sofa.rpc.transport.ByteStreamWrapperByteBuf;
2828
import com.caucho.hessian.io.Hessian2Input;
2929
import com.caucho.hessian.io.Hessian2Output;
30+
import com.caucho.hessian.io.SerializerFactory;
3031

3132
import java.io.IOException;
3233
import java.util.Map;
3334

3435
/**
35-
* @author bystander
36-
* @version $Id: SofaRequestRpcSerializeObjector.java, v 0.1 2018年09月07日 4:34 PM bystander Exp $
36+
* @author <a href=mailto:leizhiyuan@gmail.com>leizhiyuan</a>
3737
*/
38-
public class SofaRequestRpcSerializeObjector extends AbstractRpcSerializeObjector implements
39-
RpcSerializeObjector<SofaRequest> {
38+
public class SofaRequestHessianSerializer extends AbstractCustomHessianSerializer<SofaRequest> {
4039

41-
/**
42-
* Instantiates a new Sofa hessian serializer.
43-
*/
44-
public SofaRequestRpcSerializeObjector() {
45-
super();
40+
public SofaRequestHessianSerializer(SerializerFactory serializerFactory,
41+
SerializerFactory genericSerializerFactory) {
42+
super(serializerFactory, genericSerializerFactory);
4643
}
4744

4845
@Override
Lines changed: 6 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -26,22 +26,19 @@
2626
import com.alipay.sofa.rpc.transport.ByteStreamWrapperByteBuf;
2727
import com.caucho.hessian.io.Hessian2Input;
2828
import com.caucho.hessian.io.Hessian2Output;
29+
import com.caucho.hessian.io.SerializerFactory;
2930

3031
import java.io.IOException;
3132
import java.util.Map;
3233

3334
/**
34-
* @author bystander
35-
* @version $Id: SofaResponseRpcSerializeObjector.java, v 0.1 2018年09月07日 4:34 PM bystander Exp $
35+
* @author <a href=mailto:leizhiyuan@gmail.com>leizhiyuan</a>
3636
*/
37-
public class SofaResponseRpcSerializeObjector extends AbstractRpcSerializeObjector implements
38-
RpcSerializeObjector<SofaResponse> {
37+
public class SofaResponseHessianSerializer extends AbstractCustomHessianSerializer<SofaResponse> {
3938

40-
/**
41-
* Instantiates a new Sofa hessian serializer.
42-
*/
43-
public SofaResponseRpcSerializeObjector() {
44-
super();
39+
public SofaResponseHessianSerializer(SerializerFactory serializerFactory,
40+
SerializerFactory genericSerializerFactory) {
41+
super(serializerFactory, genericSerializerFactory);
4542
}
4643

4744
@Override

0 commit comments

Comments
 (0)