/** * * Copyright (C) norad.fr * * 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 net.awired.ajsl.web.service.implementation; import java.io.IOException; import java.io.StringWriter; import java.io.Writer; import net.awired.ajsl.web.service.interfaces.JsonService; import org.codehaus.jackson.JsonGenerationException; import org.codehaus.jackson.JsonParseException; import org.codehaus.jackson.map.JsonMappingException; import org.codehaus.jackson.map.ObjectMapper; import org.codehaus.jackson.map.ObjectWriter; import org.codehaus.jackson.map.SerializationConfig.Feature; import org.codehaus.jackson.map.ser.CustomSerializerFactory; import org.codehaus.jackson.type.JavaType; import org.codehaus.jackson.type.TypeReference; import org.springframework.stereotype.Service; @Service public class JsonServiceImpl implements JsonService { protected ObjectMapper mapper; public JsonServiceImpl() { super(); mapper = new ObjectMapper(); // mapper.getSerializationConfig().set(Feature.DEFAULT_VIEW_INCLUSION, false); // mapper.getSerializationConfig().setSerializationView(Type.class); CustomSerializerFactory serializerFactory = new CustomSerializerFactory(); // serializerFactory.addGenericMapping(Type.class, new IdEntitySerializer<Type, Long>()); // serializerFactory.addGenericMapping(Engine.class, new IdEntitySerializer<Engine, Long>()); // serializerFactory.addGenericMapping(Aggregator.class, new IdEntitySerializer<Aggregator, Long>()); // serializerFactory.addGenericMapping(Displayer.class, new IdEntitySerializer<Displayer, Long>()); //mapper.getSerializerProvider(). //StdSerializerProvider sp = new StdSerializerProvider(); //sp.setNullValueSerializer(new NullSerializer()); //sp.setKeySerializer(new AsearchSerializer()); // And then configure mapper to use it //mapper.setSerializerProvider(sp); // mapper = new ObjectMapper(); // mapper.setSerializerFactory(serializerFactory); //mapper.setSerializerFactory(new myserializer()); // TODO Auto-generated constructor stub } // public class IdEntitySerializer<ENTITY extends IdEntity<KEY_TYPE>, KEY_TYPE extends Serializable> extends // JsonSerializer<ENTITY> { // @Override // public void serialize(ENTITY value, JsonGenerator paramJsonGenerator, // SerializerProvider paramSerializerProvider) throws IOException, JsonProcessingException { // // KEY_TYPE key = value.getId(); // if (key instanceof Long) { // paramJsonGenerator.writeNumber((Long) key); // } else if (key instanceof Integer) { // TODO remove as Long can contain Int ? // paramJsonGenerator.writeNumber((Integer) key); // } else { // paramJsonGenerator.writeString(key.toString()); // } // // } // } //objectMapper.writeValueUsingView(out, infoInstance, Views.Public.class); // short-cut // or full version: // objectMapper.getSerializationConfig().setSerializationView(Views.Public.class); // objectMapper.writeValue(out, beanInstance); // will use active view set via Config // (note: can also pre-construct config object with 'mapper.copySerializationConfig'; reuse configuration) // public final class AsearchSerializer extends JsonSerializer<Object> { // // @Override // public void serialize(Object value, JsonGenerator paramJsonGenerator, // SerializerProvider paramSerializerProvider) throws IOException, JsonProcessingException { // // //String keyStr = (value.getClass() == String.class) ? (String) value : value.toString(); // // paramJsonGenerator.writeNumber(42); // } // } // // //custom JSON serializer // // // and NullSerializer can be something as simple as: // public class NullSerializer extends JsonSerializer<Object> { // public void serialize(Object value, JsonGenerator jgen, SerializerProvider provider) throws IOException, // JsonProcessingException { // // any JSON value you want... // //jgen.writeString(""); // // jgen.w // } // } // // // and NullSerializer can be something as simple as: // public class LongSerializer extends JsonSerializer<Long> { // public void serialize(Long value, JsonGenerator jgen, SerializerProvider provider) throws IOException, // JsonProcessingException { // // any JSON value you want... // jgen.writeNumber(value); // } // } @Override public Writer serializeFromView(Object object, Class<?> view) { Writer writer = new StringWriter(); serializeFromView(object, writer, view); return writer; } @Override public void serializeFromView(Object object, Writer writer, Class<?> view) { try { ObjectWriter w = mapper.viewWriter(view); w.writeValue(writer, object); } catch (JsonGenerationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } @Override public StringWriter serialize(Object object) { StringWriter writer = new StringWriter(); // serialize serialize(object, writer); return writer; } @Override public void serialize(Object object, Writer writer) { try { mapper.writeValue(writer, object); } catch (JsonGenerationException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } } public <E> E deserialize(String datas, TypeReference<E> ref) { try { return (E) mapper.readValue(datas, ref); } catch (JsonParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public <E> E deserialize(String datas, JavaType javaType) { try { return (E) mapper.readValue(datas, javaType); } catch (JsonParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } @Override public <E> E deserialize(String datas, Class<E> clazz) { try { return mapper.readValue(datas, clazz); } catch (JsonParseException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (JsonMappingException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (IOException e) { // TODO Auto-generated catch block e.printStackTrace(); } return null; } }