title: Jackson: final field written to after it is set by @JsonCreator?
body: <p>It seems Jackson uses reflection to write additional attributes directly into fields even if a <code>@JsonCreator</code> constructor was used and the field is marked as <code>final</code>.</p>
  
  <p>Example:</p>
  
  <pre><code>public class Test {
      static class X {
          final String s;
  
          @JsonCreator
          public X(@JsonProperty("a") String a) {
              s = "s";
          }
  
          public String getS() {
              return s;
          }
      }
  
      @org.junit.Test
      public void ds() throws Exception {
          ObjectMapper om = new ObjectMapper();
          X x = om.readValue("{`a`:``, `s`: `t`}".replace('`', '"'), X.class);
          assertEquals("s", x.s);
      }
  }
  </code></pre>
  
  <p>The assert will fail with <code>org.junit.ComparisonFailure: expected:&lt;[s]&gt; but was:&lt;[t]&gt;</code>.</p>
  
  <p>Is this behavior documented anywhere? Is there anyway to disable this globally?</p>
  
  <p>Also, I think this is a very dangerous design: if there are some value that should be read-only to the client, this effectively allows the client to set them even if the class is well designed according to normal immutable class guidelines.</p>