content: package com.alibaba.json.bvt.taobao;
  
  import java.lang.annotation.Retention;
  import java.lang.annotation.RetentionPolicy;
  import java.lang.reflect.Field;
  
  import org.junit.Assert;
  
  import com.alibaba.fastjson.JSON;
  import com.alibaba.fastjson.annotation.JSONField;
  import com.alibaba.fastjson.serializer.BeanContext;
  import com.alibaba.fastjson.serializer.ContextValueFilter;
  import com.alibaba.fastjson.serializer.SerializerFeature;
  
  import junit.framework.TestCase;
  
  public class MTopTest extends TestCase {
  
      public void test_for_mtop() throws Exception {
          P0 p = new P0();
          p.model = new Model();
  
          ContextValueFilter valueFilter = new ContextValueFilter() {
  
              @Override
              public Object process(BeanContext context, Object object, String name, Object value) {
  
  
                  if (value instanceof Model) {
                      Assert.assertEquals(P0.class, context.getBeanClass());
                      Assert.assertNotNull(context.getField());
                      Assert.assertNotNull(context.getMethod());
                      Assert.assertEquals("model", context.getName());
                      Assert.assertEquals(Model.class, context.getFieldClass());
                      Assert.assertEquals(Model.class, context.getFieldType());
                      Assert.assertEquals(SerializerFeature.WriteMapNullValue.mask, context.getFeatures());
                      
                      Field field = context.getField();
                      Assert.assertNotNull(field.getAnnotation(UrlIdentify.class));
                      Assert.assertNotNull(context.getAnnation(UrlIdentify.class));
                      
                      return value;
                  }
  
                  return value;
              }
          };
  
          JSON.toJSONString(p, valueFilter);
      }
  
      private static class P0 {
  
          @JSONField(serialzeFeatures=SerializerFeature.WriteMapNullValue)
          @UrlIdentify(schema = "xxxx")
          private Model model;
  
          public Model getModel() {
              return model;
          }
  
          public void setModel(Model model) {
              this.model = model;
          }
  
      }
  
      public static class Model {
  
          private int    id;
          private String url;
  
          public String getUrl() {
              return url;
          }
  
          public void setUrl(String url) {
              this.url = url;
          }
  
          public int getId() {
              return id;
          }
  
          public void setId(int id) {
              this.id = id;
          }
  
      }
  
      @Retention(RetentionPolicy.RUNTIME)
      public static @interface UrlIdentify {
  
          String schema();
      }
  }
  