+/*
+ * Copyright (C) 2010 Mathieu Baudier <mbaudier@argeo.org>
+ *
+ * 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.argeo.server.json;
import java.io.IOException;
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
-import org.argeo.server.ArgeoServerException;
+import org.argeo.ArgeoException;
import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonGenerator;
import org.codehaus.jackson.JsonNode;
private JsonFactory jsonFactory = new JsonFactory();
private ObjectCodec objectCodec = new ObjectMapper();
+ private JsonObjectFactory defaultObjectFactory = new JsonObjectFactoryImpl();
private String typeField = "type";
private List<JsonObjectFactory> objectFactories = new ArrayList<JsonObjectFactory>();
+ @SuppressWarnings("unchecked")
@Override
public T deserialize(JsonParser parser, DeserializationContext ctxt)
throws IOException, JsonProcessingException {
generator.writeTree(root);
String str = writer.toString();
- if (log.isDebugEnabled())
+ if (log.isTraceEnabled())
log.debug("Deserialize object of type=" + type + ", str=" + str);
JsonObjectFactory objectFactory = null;
}
if (objectFactory == null)
- throw new ArgeoServerException(
+ objectFactory = defaultObjectFactory;
+
+ if (objectFactory == null || !objectFactory.supports(type))
+ throw new ArgeoException(
"Cannot find JSON object factory for type " + type);
return (T) objectFactory.readValue(type, str);