From b73ca1ba3a480d0bfe259b438bc4ec0db438edaa Mon Sep 17 00:00:00 2001 From: Muga Nishizawa Date: Fri, 19 Nov 2010 01:46:31 +0900 Subject: [PATCH] java: edit MessagePack.java for TemplateProvider --- .../main/java/org/msgpack/MessagePack.java | 12 +++++++++- .../msgpack/MessagePackTemplateProvider.java | 23 +++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 java/src/main/java/org/msgpack/MessagePackTemplateProvider.java diff --git a/java/src/main/java/org/msgpack/MessagePack.java b/java/src/main/java/org/msgpack/MessagePack.java index b8e66d3d..71f63fde 100644 --- a/java/src/main/java/org/msgpack/MessagePack.java +++ b/java/src/main/java/org/msgpack/MessagePack.java @@ -156,7 +156,17 @@ public class MessagePack { //} else if(Collection.isAssignableFrom(target)) { //} else if(BigInteger.isAssignableFrom(target)) { } else { - tmpl = DynamicTemplate.create(target); + if (MessagePackTemplateProvider.class.isAssignableFrom(target)) { + try { + tmpl = ((MessagePackTemplateProvider) target.newInstance()).getTemplate(); + } catch (InstantiationException e) { + throw new RuntimeException(e); + } catch (IllegalAccessException e) { + throw new RuntimeException(e); + } + } else { + tmpl = DynamicTemplate.create(target); + } } CustomPacker.register(target, tmpl); diff --git a/java/src/main/java/org/msgpack/MessagePackTemplateProvider.java b/java/src/main/java/org/msgpack/MessagePackTemplateProvider.java new file mode 100644 index 00000000..511625b7 --- /dev/null +++ b/java/src/main/java/org/msgpack/MessagePackTemplateProvider.java @@ -0,0 +1,23 @@ +// +// MessagePack for Java +// +// Copyright (C) 2009-2010 FURUHASHI Sadayuki +// +// Licensed 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 org.msgpack; + +public interface MessagePackTemplateProvider { + + Template getTemplate(); +}