Skip to content

Commit 653b2c1

Browse files
committed
defined setClassLoader method in MessagePack.java
1 parent d3b8226 commit 653b2c1

3 files changed

Lines changed: 19 additions & 4 deletions

File tree

src/main/java/org/msgpack/MessagePack.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,10 @@ public MessagePack(MessagePack msgpack) {
4747
registry = new TemplateRegistry(msgpack.registry);
4848
}
4949

50+
public void setClassLoader(final ClassLoader cl) {
51+
registry.setClassLoader(cl);
52+
}
53+
5054
public Packer createPacker(OutputStream stream) {
5155
return new MessagePackPacker(this, stream);
5256
}

src/main/java/org/msgpack/template/TemplateRegistry.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,10 @@ public TemplateRegistry(TemplateRegistry registry) {
9090
genericCache = parent.genericCache;
9191
}
9292

93+
public void setClassLoader(final ClassLoader cl) {
94+
chain = new TemplateBuilderChain(this, cl);
95+
}
96+
9397
private void registerTemplates() {
9498
register(boolean.class, BooleanTemplate.getInstance());
9599
register(Boolean.class, BooleanTemplate.getInstance());

src/main/java/org/msgpack/template/builder/TemplateBuilderChain.java

Lines changed: 11 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -36,12 +36,16 @@ private static boolean enableDynamicCodeGeneration(){
3636

3737
protected List<TemplateBuilder> templateBuilders;
3838

39-
public TemplateBuilderChain(TemplateRegistry registry) {
39+
public TemplateBuilderChain(final TemplateRegistry registry) {
40+
this(registry, null);
41+
}
42+
43+
public TemplateBuilderChain(final TemplateRegistry registry, final ClassLoader cl) {
4044
templateBuilders = new ArrayList<TemplateBuilder>();
41-
init(registry);
45+
reset(registry, cl);
4246
}
4347

44-
private void init(TemplateRegistry registry) {
48+
private void reset(final TemplateRegistry registry, final ClassLoader cl) {
4549
if (registry == null) {
4650
throw new NullPointerException("registry is null");
4751
}
@@ -51,6 +55,9 @@ private void init(TemplateRegistry registry) {
5155
templateBuilders.add(new OrdinalEnumTemplateBuilder(registry));
5256
if (enableDynamicCodeGeneration()) { // use dynamic code generation
5357
builder = new JavassistTemplateBuilder(registry);
58+
if (cl != null) {
59+
((JavassistTemplateBuilder) builder).addClassLoader(cl);
60+
}
5461
templateBuilders.add(builder);
5562
templateBuilders.add(new JavassistBeansTemplateBuilder(registry));
5663
} else { // use reflection
@@ -61,7 +68,7 @@ private void init(TemplateRegistry registry) {
6168
}
6269
}
6370

64-
public TemplateBuilder select(Type targetType, boolean hasAnnotation) {
71+
public TemplateBuilder select(final Type targetType, final boolean hasAnnotation) {
6572
for (TemplateBuilder tb : templateBuilders) {
6673
if (tb.matchType(targetType, hasAnnotation)) {
6774
return tb;

0 commit comments

Comments
 (0)