HttpResponseProcessHandler.java
/*
* Copyright (c) 2019, WSO2 Inc. (http://www.wso2.org) All Rights Reserved.
*
* WSO2 Inc. licenses this file to you under the Apache License,
* Version 2.0 (the "License"); you may not use this file except
* in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing,
* software distributed under the License is distributed on an
* "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
* KIND, either express or implied. See the License for the
* specific language governing permissions and limitations
* under the License.
*/
package org.apache.synapse.commons.emulator.http.producer;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.channel.ChannelInboundHandlerAdapter;
import io.netty.handler.codec.http.HttpContent;
import io.netty.handler.codec.http.HttpResponse;
import io.netty.handler.codec.http.LastHttpContent;
import org.apache.synapse.commons.emulator.http.dsl.dto.producer.OutgoingMessage;
public class HttpResponseProcessHandler extends ChannelInboundHandlerAdapter {
private HttpResponseContext responseContext;
private HttpResponseInformationProcessor responseInformationProcessor;
private HttpResponseAssertProcessor responseAssertProcessor;
private OutgoingMessage outgoingMessage;
public HttpResponseProcessHandler(OutgoingMessage outgoingMessage) {
this.outgoingMessage = outgoingMessage;
}
@Override
public void channelRead(ChannelHandlerContext ctx, Object msg) {
if (msg instanceof HttpResponse) {
this.responseContext = new HttpResponseContext();
this.responseInformationProcessor = new HttpResponseInformationProcessor();
this.responseAssertProcessor = new HttpResponseAssertProcessor();
HttpResponse response = (HttpResponse) msg;
responseInformationProcessor.process(response, responseContext);
}
if (msg instanceof HttpContent) {
HttpContent httpContent = (HttpContent) msg;
ByteBuf content = httpContent.content();
if (content.isReadable()) {
this.responseInformationProcessor.appendDecoderResult(responseContext, httpContent, content);
}
if (content instanceof LastHttpContent) {
ctx.fireChannelReadComplete();
}
}
}
@Override
public void exceptionCaught(ChannelHandlerContext ctx, Throwable cause) {
cause.printStackTrace();
ctx.close();
}
@Override
public void channelReadComplete(ChannelHandlerContext ctx) {
if (responseAssertProcessor != null) {
this.responseAssertProcessor.process(responseContext, outgoingMessage);
}
ctx.close();
}
}