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@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@lists.jboss.org
https://lists.jboss.org/mailman/listinfo/apiman-user