anchor.diff:        // using super.write().
         super.write(chunk);
       }
  +
  +    @Override
  +    public void end() {
  +      // End of stream signalled, do cleanup, etc.
  +      super.end();
  +    }
     };
   }
   ```
   
   IMPORTANT: Do not mutate an `IApimanBuffer` once handed over.
  +
  +The request or response body will not begin streaming before the corresponding `doApply` has been called, however, it is still possible to interrupt the conversation during the streaming phase by signalling `doFailure` or `doError`.
   
   ==== Performance Considerations
   
  
positive.code: 
  As a factor of the asynchronous nature of apiman, any exceptions that may occur during the operation of a policy should be caught and explicitly handed to `chain.doError`. If exceptions are left uncaught, then it is possible that they will be lost.
  
  ==== Data Policies
  
  Whilst standard policies are concerned only with the head of the conversation, it is also possible for policies to access and manipulate the body in transit. A data policy must implement the `IDataPolicy` interface.
  
  
negative.code: 
  TIP: Policy instances are bound to a conversation, hence the same object will receive the response corresponding to the request.
  
  ```java
  Object parseConfiguration(String jsonConfiguration) throws ConfigurationParseException;
  ```
  
  The final `IPolicy` method is used to parse JSON configuration into an arbitrary object configuration which will be passed in in its parsed form to `doApply`, where the implementor may cast it their native configuration object. This method should be regarded as a static, as it is only called at the point when a policy is registered.
  
  ===== Indicating Successes
  
  If a policy determines that the conversation can continue, `chain.doApply` should be signalled. Any modifications you wish to pass onto the next policy should be completed and included in the invocation.
  