Jackson Writer对象在序列化期间缺少字符

时间:2014-05-09 13:08:11

标签: java json multithreading serialization jackson

杰克逊作家想念角色 例如:

因为你可以看到第一个"值"财产有一个"案例"属性而第二个属性不是

"value" : 
{
    "case" : 0.9992928025068476,
    "unit" : 0.0012222687181184695,
    "revenue" : 0.0019201603131782656,
    "cost" : 4.066965790792624E-9,
    "margin" : 0.0012176183516316138
  },
  "value" : {
    "0.9999990.9999999964045203,
    "unit" : 1.679374899388513E-7,
    "revenue" : 1.7145802215154812E-7,
    "cost" : 7.49609082287828E-18,
    "margin" : 1.6790001622333746E-7
  },

这怎么可能发生? 我的环境是多线程的,并且JSON文件的序列化是并行发生的。 ObjectReader& ObjectWriter是不可变的,因此它们是线程安全的,静态初始化后不会触及Mapper ......

类代码如下:

 public class JsonFileRepository
    {
        private static final ObjectMapper mapper = new ObjectMapper();
        private final ObjectReader reader;
        private final ObjectWriter writer;
        static
        {
            AnnotationIntrospector jaxbIntrospector = new JaxbAnnotationIntrospector();
            mapper.setDeserializationConfig(mapper.getDeserializationConfig()
                    .withAnnotationIntrospector(jaxbIntrospector));
            mapper.setSerializationConfig(mapper.getSerializationConfig()
                    .withAnnotationIntrospector(jaxbIntrospector));
            mapper.configure(
                    org.codehaus.jackson.map.SerializationConfig.Feature.WRAP_ROOT_VALUE,
                    false);
            mapper.configure(
                    org.codehaus.jackson.map.SerializationConfig.Feature.INDENT_OUTPUT,
                    true);  

        }


        public JsonFileRepository(String entityType, Class clazz) {

            this.reader = mapper.reader(clazz);
            this.writer = mapper.writerWithType(clazz);
    ...

修改 我序列化了70个实体,每次运行大约发生2次。每次都在不同的文件中,虽然运行是相同的!

更新 从杰克逊搬到Gson消除了这种行为。因此,绝对要么代表我使用杰克逊,要么是杰克逊的错误

**最终更新** 我能够通过Gson产生类似的现象(尽管不那么频繁), 最后我发现问题确实是一个与序列化包无关的多线程问题。两个线程正在写入同一个文件。

0 个答案:

没有答案