java mina FundTradeProtocolEncoder
来源:互联网 发布:java错误无法加载主类 编辑:程序博客网 时间:2024/06/05 10:16
package com.pingan.emall.biz.communication.handler;
import com.paic.pafa.app.biz.service.BusinessServiceException;
import com.pingan.emall.dto.MidRequestDTO;
import com.pingan.emall.util.fund.BlowFish;
import com.pingan.emall.util.fund.CRCHelper;
import com.pingan.emall.util.fund.FundTradeConstants;
import java.nio.ByteOrder;
import java.nio.charset.Charset;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
/**
* 证券MID通讯请求编码器, 接收MidRequestDTO对象请求, 根据MidRequestDTO 中的functionId生成
* 对应的MID请求报文, 创建IoBuffer将MID请求报文以字节流的格式发送出去。
*
* @author LICHAO844
*
*/
public class FundTradeProtocolEncoder implements ProtocolEncoder {
private Charset charset;
private static final Logger LOG = Logger.getLogger(FundTradeProtocolEncoder.class);
private static final String SOH = "|";
public FundTradeProtocolEncoder(Charset charset) {
this.charset = charset == null ? Charset.defaultCharset() : charset;
}
@Override
public void encode(IoSession session, Object obj,
ProtocolEncoderOutput out) throws Exception {
if (obj instanceof MidRequestDTO) {
MidRequestDTO request = (MidRequestDTO) obj;
String functionId = request.getFunctionId();
if (StringUtils.isEmpty(functionId)) {
throw new BusinessServiceException("FunctionId not set for mid request");
}
String requestPackage = "";
if (FundTradeConstants.FUNCTION_SIGN_IN.equals(functionId)) {
requestPackage = request.getPackage();
} else {
String decWorksKey = request.getHeader().getCrc();
if (StringUtils.isEmpty(decWorksKey)) {
throw new BusinessServiceException("Workskey not set for mid request");
}
if (!FundTradeConstants.FUNCTION_NEXT_PACKAGE.equals(functionId)) {
for (int i = 0; i < request.getBodyParams().size(); i++) {
String param = request.getBodyParams().get(i);
String[] temp = StringUtils.split(param, SOH);
if (temp.length == 2 && "1".equals(temp[1])) {
// 密码加密
param = BlowFish.encrypt(StringUtils.rightPad(temp[0], 8, ' '),decWorksKey.getBytes(charset));
request.getBodyParams().set(i, param);
}
}
}
String data = request.getPackage();
request.getHeader().setCrc(CRCHelper.crcCode(data, charset));
requestPackage = request.getPackage();
}
send(out, requestPackage.getBytes(charset));
if (LOG.isInfoEnabled()) {
String markedLog = FundTradeLogger.getMarkedOutLog(functionId, requestPackage, session);
LOG.info(markedLog);
}
}
}
@Override
public void dispose(IoSession iosession) throws Exception {
}
private void send(ProtocolEncoderOutput out, byte[] bytes) {
IoBuffer buffer = IoBuffer.allocate(bytes.length).setAutoExpand(true);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.put(bytes);
buffer.flip();
out.write(buffer);
}
}
import com.paic.pafa.app.biz.service.BusinessServiceException;
import com.pingan.emall.dto.MidRequestDTO;
import com.pingan.emall.util.fund.BlowFish;
import com.pingan.emall.util.fund.CRCHelper;
import com.pingan.emall.util.fund.FundTradeConstants;
import java.nio.ByteOrder;
import java.nio.charset.Charset;
import org.apache.commons.lang.StringUtils;
import org.apache.log4j.Logger;
import org.apache.mina.core.buffer.IoBuffer;
import org.apache.mina.core.session.IoSession;
import org.apache.mina.filter.codec.ProtocolEncoder;
import org.apache.mina.filter.codec.ProtocolEncoderOutput;
/**
* 证券MID通讯请求编码器, 接收MidRequestDTO对象请求, 根据MidRequestDTO 中的functionId生成
* 对应的MID请求报文, 创建IoBuffer将MID请求报文以字节流的格式发送出去。
*
* @author LICHAO844
*
*/
public class FundTradeProtocolEncoder implements ProtocolEncoder {
private Charset charset;
private static final Logger LOG = Logger.getLogger(FundTradeProtocolEncoder.class);
private static final String SOH = "|";
public FundTradeProtocolEncoder(Charset charset) {
this.charset = charset == null ? Charset.defaultCharset() : charset;
}
@Override
public void encode(IoSession session, Object obj,
ProtocolEncoderOutput out) throws Exception {
if (obj instanceof MidRequestDTO) {
MidRequestDTO request = (MidRequestDTO) obj;
String functionId = request.getFunctionId();
if (StringUtils.isEmpty(functionId)) {
throw new BusinessServiceException("FunctionId not set for mid request");
}
String requestPackage = "";
if (FundTradeConstants.FUNCTION_SIGN_IN.equals(functionId)) {
requestPackage = request.getPackage();
} else {
String decWorksKey = request.getHeader().getCrc();
if (StringUtils.isEmpty(decWorksKey)) {
throw new BusinessServiceException("Workskey not set for mid request");
}
if (!FundTradeConstants.FUNCTION_NEXT_PACKAGE.equals(functionId)) {
for (int i = 0; i < request.getBodyParams().size(); i++) {
String param = request.getBodyParams().get(i);
String[] temp = StringUtils.split(param, SOH);
if (temp.length == 2 && "1".equals(temp[1])) {
// 密码加密
param = BlowFish.encrypt(StringUtils.rightPad(temp[0], 8, ' '),decWorksKey.getBytes(charset));
request.getBodyParams().set(i, param);
}
}
}
String data = request.getPackage();
request.getHeader().setCrc(CRCHelper.crcCode(data, charset));
requestPackage = request.getPackage();
}
send(out, requestPackage.getBytes(charset));
if (LOG.isInfoEnabled()) {
String markedLog = FundTradeLogger.getMarkedOutLog(functionId, requestPackage, session);
LOG.info(markedLog);
}
}
}
@Override
public void dispose(IoSession iosession) throws Exception {
}
private void send(ProtocolEncoderOutput out, byte[] bytes) {
IoBuffer buffer = IoBuffer.allocate(bytes.length).setAutoExpand(true);
buffer.order(ByteOrder.LITTLE_ENDIAN);
buffer.put(bytes);
buffer.flip();
out.write(buffer);
}
}
0 0
- java mina FundTradeProtocolEncoder
- MINA JAVA
- java NIO: MINA, Netty
- java mina TcpLongSyncConnector 初始化
- Java mina GateWayScaner Thread
- Java mina TcpConnector
- java mina TcpSessionLock
- java mina TcpSessionManager
- java mina TcpSocketAddress
- java mina MidRequestDTO
- java mina MidResponseDTO
- java mina FundTradeSAOImpl 入口
- Java mina FundTradeLogger
- java mina FundTradeProtocolCodecFactory
- java mina FundTradeProtocolDecoder
- Java MINA工作原理
- Java nio epoll mina
- java --MINA篇
- Spring MVC 3.0.5+Spring 3.0.5+MyBatis3.0.4全注解实例详解(三)
- sencha里用html5实现类似combobox组件,可选可输入
- java mina FundTradeProtocolDecoder
- javascript中日期Date类的setMonth问题 多一个月
- PHP调用APNS服务发送提醒样例
- java mina FundTradeProtocolEncoder
- Zend/EventManager(Part2)
- 语料中筛选出英文单词并统计词频,正则切割匹配
- nyoj14
- Be confident
- HTML5学习参考资料整理
- Git使用教程(以gitcafe为例)
- Android启动模式:singleTask的深究--其真正含义的解读之app间试验研究2
- windows下编译object-c