XStreamUtil.java 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114
  1. package com.ym.mec.collectfee.utils;
  2. import com.thoughtworks.xstream.XStream;
  3. import com.thoughtworks.xstream.converters.javabean.BeanProvider;
  4. import com.thoughtworks.xstream.converters.javabean.JavaBeanConverter;
  5. import com.ym.mec.collectfee.entity.RequestHead;
  6. import org.springframework.beans.factory.annotation.Value;
  7. import java.security.MessageDigest;
  8. import java.security.NoSuchAlgorithmException;
  9. import java.util.Random;
  10. public final class XStreamUtil {
  11. private XStreamUtil() {
  12. }
  13. public static RequestHead getOrdersHead(String body,Integer cmd,String publicKey,Integer uid){
  14. RequestHead head = new RequestHead();
  15. head.setMsgId(getRandom(7));
  16. head.setCmd(cmd);
  17. if(uid != null){
  18. head.setUid(uid);
  19. }
  20. head.setSign(XStreamUtil.getSign(head, body, publicKey));
  21. return head;
  22. }
  23. public static String getRandom(int length) {
  24. String base = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789";
  25. Random random = new Random();
  26. StringBuffer sb = new StringBuffer();
  27. for (int i = 0; i < length; i++) {
  28. int number = random.nextInt(base.length());
  29. sb.append(base.charAt(number));
  30. }
  31. return sb.toString();
  32. }
  33. public static String getSign(RequestHead head,String body,String userSign){
  34. //msgId+cmd+uid+ts+body+用户密钥/公共密钥
  35. StringBuffer sb = new StringBuffer(head.getMsgId());
  36. sb.append(head.getCmd()).append(head.getUid()).append(head.getTs()).append(body).append(userSign);
  37. return XStreamUtil.encryption(sb.toString()).toLowerCase();
  38. }
  39. /**
  40. * 将包含xml内容的流转换成对�?
  41. *
  42. * @param rootNode
  43. * 根节点名�?
  44. * @param rootNodeType
  45. * 根节点类�?
  46. * @param inputStream
  47. * �?
  48. * @return 返回转换后的对象
  49. */
  50. @SuppressWarnings("unchecked")
  51. public static <T> T xmlToObject(String rootNode, Class<T> rootNodeType,
  52. String body) {
  53. XStream xStream = new XStream();// 默认用xppDriver
  54. xStream.autodetectAnnotations(true);
  55. xStream.alias(rootNode, rootNodeType);// 尽可能的加上,否则会抛CannotResolveClassException异常
  56. xStream.ignoreUnknownElements();
  57. // 将xml转换成对�?
  58. return (T) xStream.fromXML(body);
  59. }
  60. /**
  61. * 将对象转换成xml
  62. *
  63. * @param rootNodeName
  64. * 根节点名�?
  65. * @param obj
  66. * 对象�?
  67. * @return
  68. */
  69. public static String objectToXml(String rootNodeName, Object obj) {
  70. XStream xStream = new XStream();
  71. xStream.registerConverter(new JavaBeanConverter(xStream.getMapper(),
  72. new BeanProvider()), XStream.PRIORITY_VERY_LOW);
  73. xStream.alias(rootNodeName, obj.getClass());
  74. return xStream.toXML(obj);
  75. }
  76. public static String encryption(String body) {
  77. String re_md5 = new String();
  78. try {
  79. MessageDigest md = MessageDigest.getInstance("MD5");
  80. md.update(body.getBytes());
  81. byte b[] = md.digest();
  82. int i;
  83. StringBuffer buf = new StringBuffer("");
  84. for (int offset = 0; offset < b.length; offset++) {
  85. i = b[offset];
  86. if (i < 0)
  87. i += 256;
  88. if (i < 16)
  89. buf.append("0");
  90. buf.append(Integer.toHexString(i));
  91. }
  92. re_md5 = buf.toString();
  93. } catch (NoSuchAlgorithmException e) {
  94. e.printStackTrace();
  95. }
  96. return re_md5.toUpperCase();
  97. }
  98. }