title: how to use Elasticsearch jsonBuilder() in java?
body: <p>I have a document with the following schema,</p>
  
  <pre><code> {
      "_index": "test",
      "_type": "user",
      "_id": "2",
      "_score": 1,
      "_source": {
          "id": 2,
          "accountExpired": false,
          "accountLocked": false,
          "dateCreated": "2016-07-19T03:13:07Z",
          "employee": {
              "class": "bropen.framework.core.osm.Employee",
              "id": 1
          }
        }
  }
  </code></pre>
  
  <p>I want to modify the value of field "employee"
  I have tried this:</p>
  
  <pre><code>String employee="\"{\"class\":\"bropen.framework.core.osm.Employee\",\"id\":1,\"birthdate\":null,\"code\":null,\"dateCreated\":\"2016-07-19T03:13:07Z\",\"degree\":null,\"disabled\":false,\"email\":null,\"entryDate\":null,\"graduateDate\":null,\"groups\":[],\"identities\":[{\"class\":\"bropen.framework.core.osm.EmployeeIdentity\",\"id\":1},{\"class\":\"bropen.framework.core.osm.EmployeeIdentity\",\"id\":33}],\"identityNumber\":null,\"lastUpdated\":\"2016-07-19T07:58:34Z\",\"level\":0.10,\"location\":null,\"mainIdentityId\":1,\"major\":null,\"mobile\":null,\"name\":\"张三\",\"nation\":null,\"nativePlace\":null,\"notes\":null,\"organization\":{\"class\":\"bropen.framework.core.osm.Organization\",\"id\":2},\"payrollPlace\":null,\"professionalRank\":null,\"qualification\":null,\"rank\":null,\"sequence\":10,\"sex\":null,\"syncId\":null,\"telephoneNumber\":null,\"title\":null,\"type\":1,\"user\":{\"class\":\"bropen.framework.core.security.User\",\"id\":2},\"workingDate\":null,\"workingYears\":null}\"";
  
  
      try {
              client.prepareUpdate("test", "user", "2")
                      .setDoc(jsonBuilder().startObject().field("testfield", employee).endObject()).get();
          } catch (IOException e) {
              e.printStackTrace();
       }
  </code></pre>
  
  <p>return error info :</p>
  
  <pre><code>    java.util.concurrent.ExecutionException: RemoteTransportException[[node-1][192.168.0.224:9300][indices:data/write/update]]; nested: RemoteTransportException[[node-1]
  [192.168.0.224:9300][indices:data/write/update[s]]]; nested: 
  MapperParsingException[object mapping for [employee] tried to parse field [employee] as object, but found a concrete value];
      at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.getValue(BaseFuture.java:290)
  </code></pre>
  
  <p>how to use  <code>jsonBuilder()</code> to build a json like this:</p>
  
  <pre><code>   employee:{
            "id":"1",
            "class":"bropen",
            "name":"Tom"
     }
  </code></pre>
  
  <p>and modify the value of field "employee"?</p>
  
  <p>--------------update------------------</p>
  
  <p>I tried again:</p>
  
  <pre><code>public static void upMethod1() {
  
      XContentBuilder json;
      try {
          json = jsonBuilder().startObject("employee").field("id", 1)
                  .field("class", "bropen").field("name", "Tom").endObject();
          UpdateRequest request = new UpdateRequest();
          request.index("test");
          request.type("user");
          request.id("2");
          request.doc(json);
          client.update(request).get();
  
      } catch (IOException e) {
          e.printStackTrace();
      } catch (InterruptedException e) {
          e.printStackTrace();
      } catch (ExecutionException e) {
          e.printStackTrace();
      }
  
  }
  </code></pre>
  
  <p>Error info:</p>
  
  <pre><code>java.util.concurrent.ExecutionException: RemoteTransportException[[node-1][127.0.0.1:9300][indices:data/write/update]]; nested: RemoteTransportException[[node-1][192.168.0.87:9300][indices:data/write/update[s]]]; nested: NotSerializableExceptionWrapper[not_x_content_exception: Compressor detection can only be called on some xcontent bytes or compressed xcontent bytes];
  at org.elasticsearch.common.util.concurrent.BaseFuture$Sync.getValue(BaseFuture.java:290)
  </code></pre>