content: package com.alibaba.json.bvt.bug;
  
  import java.lang.reflect.Type;
  
  import org.junit.Assert;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.parser.DefaultJSONParser;
  import com.alibaba.fastjson.parser.JSONToken;
  import com.alibaba.fastjson.parser.ParserConfig;
  import com.alibaba.fastjson.parser.deserializer.ObjectDeserializer;
  
  import junit.framework.TestCase;
  
  public class Bug_for_Issue_603 extends TestCase {
  
      public void test_for_issue() throws Exception {
          ParserConfig.getGlobalInstance().putDeserializer(OrderActionEnum.class, new OrderActionEnumDeser());
  
          {
              Msg msg = JSON.parseObject("{\"actionEnum\":1,\"body\":\"A\"}", Msg.class);
              Assert.assertEquals(msg.body, "A");
              Assert.assertEquals(msg.actionEnum, OrderActionEnum.FAIL);
          }
          {
              Msg msg = JSON.parseObject("{\"actionEnum\":0,\"body\":\"B\"}", Msg.class);
              Assert.assertEquals(msg.body, "B");
              Assert.assertEquals(msg.actionEnum, OrderActionEnum.SUCC);
          }
      }
  
      public static class OrderActionEnumDeser implements ObjectDeserializer {
  
          @SuppressWarnings("unchecked")
          @Override
          public <T> T deserialze(DefaultJSONParser parser, Type type, Object fieldName) {
              Integer intValue = parser.parseObject(int.class);
              if (intValue == 1) {
                  return (T) OrderActionEnum.FAIL;
              } else if (intValue == 0) {
                  return (T) OrderActionEnum.SUCC;
              }
              throw new IllegalStateException();
          }
  
          @Override
          public int getFastMatchToken() {
              return JSONToken.LITERAL_INT;
          }
  
      }
  
      public static enum OrderActionEnum {
                                          FAIL(1), SUCC(0);
  
          private int code;
  
          OrderActionEnum(int code){
              this.code = code;
          }
      }
  
      public static class Msg {
  
          public OrderActionEnum actionEnum;
          public String          body;
      }
  }
  