package apisync.processor; import org.apache.camel.Exchange; import org.apache.camel.ExchangePattern; import org.apache.camel.Message; import org.apache.camel.Processor; import org.apache.camel.http.common.HttpMessage; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.io.InputStream; /** * @author Airhead * @since 2016-11-13 */ public class ApiProcessor implements Processor { public void process(Exchange exchange) throws Exception { // 因为很明确消息格式是http的,所以才使用这个类 // 否则还是建议使用org.apache.camel.Message这个抽象接口 HttpMessage message = (HttpMessage) exchange.getIn(); InputStream bodyStream = (InputStream) message.getBody(); String inputContext = this.analysisMessage(bodyStream); bodyStream.close(); // 存入到exchange的out区域 if (exchange.getPattern() == ExchangePattern.InOut) { Message outMessage = exchange.getOut(); outMessage.setBody("hello.123," + inputContext); } } /** * 从stream中分析字符串内容 * * @param bodyStream * @return */ private String analysisMessage(InputStream bodyStream) throws IOException { if (bodyStream == null) { return ""; } ByteArrayOutputStream outStream = new ByteArrayOutputStream(); byte[] contextBytes = new byte[4096]; int realLen; while ((realLen = bodyStream.read(contextBytes, 0, 4096)) != -1) { outStream.write(contextBytes, 0, realLen); } // 返回从Stream中读取的字串 try { return new String(outStream.toByteArray(), "UTF-8"); } finally { outStream.close(); } } }