5

私は現在、カスタムシリアライザーとデシリアライザーを使用してJsonにPOJOをシリアライズ/デシリアライズするためにjackson fast xmlを使用するプロジェクトを持っています。私が理解していることから、 ObjectMapper は、作成および構成されるとスレッドセーフになります。ただし、JMeter でテストを実行しているときに、次のことが時折発生する可能性があることに気付きました -

  • スレッド 1 は CustomerSerializer に入り、シリアル化を開始します
  • スレッド 2 は CustomSerializer に入り、スレッド 1 を中断し、最初から最後までシリアル化を開始します
  • スレッド 1 が再開し、最後にシリアライズされたものが欠落している

2 番目のスレッドが入ったときに JsonGenerator インスタンスがリセットされているようです - 確かにこれは起こってはいけませんか? いくつかのサイトとスレッドをチェックして、設定する必要がある設定や機能があるかどうかを確認しましたが、ObjectMapper が JsonGenerator インスタンスを再利用していることを理解しているので、これが問題になる可能性がありますか?

以下は、私のカスタムシリアライザーからのスニペットです...

@Override
public final void serialize(Object o, JsonGenerator jsonGenerator, SerializerProvider serializerProvider) throws IOException {

    jsonGenerator.writeStartObject();

    ... Code here ....

    jsonGenerator.writeEndObject();

    closeJsonGenerator(jsonGenerator);
}

そして、それが使用されている場所の例

SimpleModule sm = new SimpleModule();
sm.addSerializer(new myCustomSerializer());
new ObjectMapper().registerModule(sm)
                  .writeValue(new myObject());
4

1 に答える 1