MessageHandlerAdapter.java
package com.zone.weixin4j.handler;
import com.zone.weixin4j.exception.WeixinException;
import com.zone.weixin4j.request.WeixinMessage;
import com.zone.weixin4j.request.WeixinRequest;
import com.zone.weixin4j.response.WeixinResponse;
import com.zone.weixin4j.util.ClassUtil;
import java.util.Set;
/**
* 消息适配器:对于特定的消息类型进行适配,如text文本、voice语音消息
*
* @className MessageHandlerAdapter
* @author jinyu(foxinmy@gmail.com)
* @date 2015年5月17日
* @since JDK 1.6
* @see com.foxinmy.weixin4j.request.WeixinMessage
*/
@SuppressWarnings("unchecked")
public abstract class MessageHandlerAdapter<M extends WeixinMessage> implements
WeixinMessageHandler {
@Override
public boolean canHandle(WeixinRequest request, WeixinMessage message,
Set<String> nodeNames) throws WeixinException {
return message != null
&& message.getClass() == ClassUtil.getGenericType(getClass())
&& canHandle0(request, (M) message);
}
/**
* 能否处理请求
*
* @param request
* 微信请求
* @param message
* 微信消息
* @return true则执行doHandler0
* @throws WeixinException
*/
public boolean canHandle0(WeixinRequest request, M message)
throws WeixinException {
return true;
}
@Override
public WeixinResponse doHandle(WeixinRequest request,
WeixinMessage message, Set<String> nodeNames)
throws WeixinException {
return doHandle0(request, (M) message);
}
/**
* 处理请求
*
* @param request
* 微信请求
* @param message
* 微信消息
* @return
*/
public abstract WeixinResponse doHandle0(WeixinRequest request, M message)
throws WeixinException;
/**
* 缺省值为1,存在多个匹配到的MessageHandler则比较weight大小
*/
@Override
public int weight() {
return 1;
}
}