[Apiman-user] API policy response data handler

Marc Savy marc.savy at redhat.com
Thu Feb 2 12:15:07 EST 2017


Hi,

Perhaps URLRewritingPolicy
https://github.com/apiman/apiman/blob/master/gateway/engine/policies/src/main/java/io/apiman/gateway/engine/policies/URLRewritingPolicy.java
be an informative place to start?

- Apiman streams data, so the client may be receiving data already by the
time you've determined you want to cancel (the connection is already
established; headers have been sent) - it's often too late to gracefully
cancel. You could try throwing an exception and seeing what happens (not
recommended practice!).

If that doesn't work, perhaps you can explain your use-case more clearly
and explicitly so we can see what the alternatives are?

- Policies are *static* instances, if you are assigning that buffer to the
object then it's as if you were writing "static Buffer  buffer" and
different requests will all share that variable (and thus swap it out
repeatedly!).

Regards,
Marc





On 2 February 2017 at 16:56, Balu S <sbalu27 at gmail.com> wrote:

> Hello,
> I'm trying to parse the response using responseDataHandler() in the custom
> policy. In cases, if the response from API is of certain content, I would
> like the Apiman to consider as failure. But I don't find a way to throw
> policy failure from responseDataHandler(). And I cannot achieve this in
> doApply() as the ApiResponse object does not have "content" to parse.
>
> Also, what I found is write(chunk) in the AbstractStream is called after
> doApply, so I cannot set any attributes in it to fetch it in doApply() and
> trigger doFailure().
>
> For example, in below call, how to throw as policy failure after parsing
> the contents ? Or how can I access response content even before write()
> method.
>
>
> *URLRewritingPolicy.java*
>
>     @Override
>     protected IReadWriteStream<ApiResponse> responseDataHandler(ApiResponse
> response,
>             IPolicyContext context, URLRewritingConfig
> policyConfiguration) {
>         if (policyConfiguration.isProcessResponseBody()) {
>             return new URLRewritingStream(context.getComponent(
> IBufferFactoryComponent.class), response,
>                     policyConfiguration.getFromRegex(),
> policyConfiguration.getToReplacement());
>         } else {
>             return null;
>         }
>     }
>
> *URLRewritingStream.java*
>
>     /**
>      * @see io.apiman.gateway.engine.io.AbstractStream#write(io.
> apiman.gateway.engine.io.IApimanBuffer)
>      */
>     @Override
>     public void write(IApimanBuffer chunk) {
>         if (buffer == null) {
>             buffer = bufferFactory.cloneBuffer(chunk);
>         } else {
>             buffer.append(chunk);
>         }
>         atEnd = false;
>         processBuffer();
>     }
>
>
> Best regards
> Balu
>
> _______________________________________________
> Apiman-user mailing list
> Apiman-user at lists.jboss.org
> https://lists.jboss.org/mailman/listinfo/apiman-user
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: http://lists.jboss.org/pipermail/apiman-user/attachments/20170202/d677f92b/attachment-0001.html 


More information about the Apiman-user mailing list