package com.creditharmony.apporveadapter.core.utils; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import java.util.Date; import java.util.Random; import java.util.regex.Matcher; import java.util.regex.Pattern; import javax.servlet.http.HttpServletRequest; import org.apache.commons.lang3.StringUtils; import org.apache.commons.lang3.time.DateFormatUtils; import org.springframework.web.context.request.RequestContextHolder; import org.springframework.web.context.request.ServletRequestAttributes; import com.thoughtworks.xstream.XStream; import com.thoughtworks.xstream.io.xml.Dom4JDriver; import com.thoughtworks.xstream.mapper.MapperWrapper; /** * 接口业务,共同处理. */ public class AdapterUtils { /** * 根据传入的数字, 产生 【年月日时分秒毫秒+随机数】. 格式:yyyyMMddHHmmssSSS + '_' + 四位随机数 * * @return 25位 随机数 */ public static String getSerialNum() { Random random = new Random(); String sRand = ""; for (int i = 0; i < 2; i++) { String rand = String.valueOf(random.nextInt(10)); sRand += rand; } for (int i = 0; i < 2; i++) { random = new Random(); String rand = String.valueOf(random.nextInt(10)); sRand += rand; } StringBuilder randNoSb = new StringBuilder(); String dateStr = DateFormatUtils.format(new Date(), "yyyyMMddHHmmssSSS"); randNoSb.append(dateStr).append(sRand); return randNoSb.toString(); } /** * 取得邮件地址的服务商 * * @param userAddr 邮件地址 * @return 邮件服务商 */ public static String getMailExtName(String userAddr) { if (StringUtils.isEmpty(userAddr) == false) { if (userAddr.indexOf("@") > 0) { int lastIdx = userAddr.lastIndexOf("@"); return userAddr.substring(lastIdx); } else { return ""; } } else { return ""; } } /** * 按照指定的格式取出区间参数. * * @param param 信息 * @return 状态号 */ public static String getParam(String param, String inPattern) { String code = ""; String pattern = "\<" + inPattern + ">(.*?)\</" + inPattern + ">"; // 正则表达式,取<error>和</error>之间的字符串 Pattern p = Pattern.compile(pattern); Matcher m = p.matcher(param); // 取得对应的返回编号 while (m.find()) { code = m.group(1); } return code; } /** * xml转bean. 将传入的XML转为对应的javaBean 该方法可忽略缺少或者多出的XML中节点对象 * * @param xml 源XML内容 * @param clazz 对象Class * @return 转换后Bean */ @SuppressWarnings("unchecked") public static <T> T xmlToBean(String xml, Class<T>... clazz) { T t = null; // xml转对象需要用到dom4j.jar包 XStream xStream = new XStream(new Dom4JDriver()) { protected MapperWrapper wrapMapper(MapperWrapper next) { return new MapperWrapper(next) { @SuppressWarnings("rawtypes") public boolean shouldSerializeMember(Class definedIn, String fieldName) { if (definedIn == Object.class) { try { return this.realClass(fieldName) != null; } catch (Exception e) { return false; } } return super.shouldSerializeMember(definedIn, fieldName); } }; } }; xStream.setMode(XStream.NO_REFERENCES); xStream.processAnnotations(clazz); t = (T) xStream.fromXML(xml); return t; } /** * 文件byte转文件InputStream 处理. * * @param buf 文件byte * @return 文件InputStream */ public static final InputStream byte2Input(byte[] buf) { return new ByteArrayInputStream(buf); } /** * 文件InputStream转文件byte 处理. * * @param inStream 文件InputStream * @return 文件byte */ public static final byte[] input2byte(InputStream inStream) throws IOException { ByteArrayOutputStream swapStream = new ByteArrayOutputStream(); byte[] buff = new byte[100]; int rc = 0; while ((rc = inStream.read(buff, 0, 100)) > 0) { swapStream.write(buff, 0, rc); } swapStream.close(); byte[] in2b = swapStream.toByteArray(); return in2b; } /** * 获取客户端IP地址. * @param serialNum 请求唯一序列号 * @return IP地址 */ public static String getClientIP(HttpServletRequest request, String serialNum) { try { if (request.getHeader("x-forwarded-for") == null) { return request.getRemoteAddr(); } return request.getHeader("x-forwarded-for"); } catch (Exception e) { } return ""; } /** * 获取当前项目URL地址. * * @return URL地址 */ public static String getRequestPath() { HttpServletRequest request = ((ServletRequestAttributes) RequestContextHolder.getRequestAttributes()).getRequest(); String path = request.getRequestURL() + "/"; return path; } public static String readString3(String pathName) { String str=""; File file=new File(pathName); try { FileInputStream in=new FileInputStream(file); // size 为字串的长度 ,这里一次性读完 int size=in.available(); byte[] buffer=new byte[size]; in.read(buffer); in.close(); str=new String(buffer,"utf-8"); } catch (IOException e) { // TODO Auto-generated catch block return null; } return str; } }