/*
* Copyright 2012 The Netty Project
*
* The Netty Project 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 com.stratio.deep.commons.extractor.client.codecs;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.ObjectOutput;
import java.io.ObjectOutputStream;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.stratio.deep.commons.extractor.response.Response;
import io.netty.buffer.ByteBuf;
import io.netty.channel.ChannelHandlerContext;
import io.netty.handler.codec.MessageToByteEncoder;
public class ResponseEncoder extends MessageToByteEncoder<Response> {
private static final Logger LOG = LoggerFactory.getLogger(ResponseEncoder.class);
protected void encode(ChannelHandlerContext ctx, Response response, ByteBuf out) {
ByteArrayOutputStream bos = new ByteArrayOutputStream();
ObjectOutput outObj = null;
try {
outObj = new ObjectOutputStream(bos);
outObj.writeObject(response);
} catch (IOException e) {
LOG.error(e.getMessage());
} finally {
try {
if (outObj != null) {
outObj.close();
}
} catch (IOException ex) {
// ignore close exception
}
try {
bos.close();
} catch (IOException ex) {
// ignore close exception
}
}
byte[] encodedObj = bos.toByteArray();
int dataLength = encodedObj.length;
out.writeInt(dataLength);
out.writeBytes(encodedObj);
}
}