content: package com.alibaba.json.bvt.bug;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.JSONArray;
  import com.alibaba.fastjson.JSONObject;
  import com.alibaba.fastjson.annotation.JSONField;
  import com.alibaba.fastjson.annotation.JSONPOJOBuilder;
  import com.alibaba.fastjson.annotation.JSONType;
  import junit.framework.TestCase;
  import org.junit.Assert;
  import org.junit.Test;
  
  import java.text.ParseException;
  import java.text.SimpleDateFormat;
  import java.util.Date;
  import java.util.Locale;
  
  /**
   * Created by wenshao on 19/12/2016.
   */
  public class Issue955 extends TestCase {
  
      public void test_checkObject() {
          Art origin = makeOrigin();
          JSONObject articleObj = (JSONObject) JSON.toJSON(origin);
  
          JSONObject dataObj = new JSONObject();
          dataObj.put("art", articleObj);
  
          Art other = dataObj.getObject("art", Art.class);// return null;
          assertSame(origin, other); // test failed
      }
  
      public void test_checkArray() throws Exception {
          Art origin = makeOrigin();
          JSONObject object = (JSONObject) JSON.toJSON(origin);
  
          JSONArray jsonArray = new JSONArray();
          jsonArray.add(object);
  
          Art other = JSON.parseObject(jsonArray.getString(0), Art.class);
          assertSame(origin, other); // test passed
  
          other = jsonArray.getObject(0, Art.class); // return = null;
          assertSame(origin, other); // test failed
      }
  
      private Art makeOrigin() {
          final long unixTime = System.currentTimeMillis() / 1000;
          final Art origin = new Art();
          origin.id = "12";
          origin.date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(unixTime * 1000));
          origin.isSupported = true;
          return origin;
      }
  
      public void assertSame(Art origin, Art another) {
          assertNotNull(another);
          assertEquals(origin.id, another.id);
          assertEquals(origin.date, another.date);
          assertSame(origin.isSupported, another.isSupported);
      }
  
      @JSONType(builder = Art.Builder.class)
      public static class Art {
          private String id;
          private String date;
          private boolean isSupported;
  
          public String getId() {
              return id;
          }
  
          public long getDatetime() throws ParseException {
              SimpleDateFormat format = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
              return (format.parse(date)).getTime() / 1000;
          }
  
          @JSONField(name = "isSupported")
          public int isSupported() {
              return isSupported ? 1 : 0;
          }
  
          @JSONPOJOBuilder()
          public final static class Builder {
              private final Art article = new Art();
  
              public Builder(){
  
              }
  
              @JSONField(name = "id")
              public Builder withId(String id) {
                  article.id = id;
                  return this;
              }
  
              @JSONField(name = "datetime")
              public Builder withDateTime(long dateTime) {
                  if (dateTime > 0)
                      article.date = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()).format(new Date(dateTime * 1000));
                  return this;
  
              }
  
              @JSONField(name = "isSupported")
              public Builder withSupported(int supported) {
                  article.isSupported = supported == 1;
                  return this;
              }
  
              public Art build() {
                  return article;
              }
          }
      }
  }
  