关于activiti报:org.activiti.engine.ActivitiException: couldn't find type for XXX 异常的问题

从activiti论坛的相关讨论中可以得知,activiti报这个异常的原因多是因为XXX类型可能做为Variable设给了工作流,而这个XXX类型并没有序列化!知道原因后,解决方法就很简单了,只需要将XXX类以及其依赖的其他类实现java.io.Serializable接口就好了。但是在有种情况下,这个问题并不太容易并发现,那就是在使用web service生成客户端stub代码后,如果本地工作流引用到了stub代码中的类型往往会报这外错误,这是因为,虽然在服务器端,所有类型可能都声明实现了java.io.Serializable接口,但通过工具在本地生成stub代码后,新生成的类型并不会实现java.io.Serializable接口,这个问题需要引起足够的注意。
bluishglc CSDN认证博客专家 CSDN博客专家 架构师
架构师,CSDN博客专家,14年IT系统开发和架构经验,对大数据、企业级应用架构、SaaS、分布式存储和领域驱动设计有丰富的实践经验。对Hadoop/Spark 生态系统有深入和广泛的研究,参与过Hadoop商业发行版的开发,目前负责企业数据中台的架构设计和开发工作,热衷函数式编程,著有《大数据平台架构与原型实现:数据中台建设实战》一书。
相关推荐
package com.ylw.p2p.common.utils; import java.awt.image.BufferedImage; import java.io.BufferedInputStream; import java.io.BufferedOutputStream; import java.io.File; import java.io.FileInputStream; import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.util.HashMap; import java.util.Iterator; import java.util.Map; import java.util.Map.Entry; import javax.imageio.ImageIO; import javax.imageio.ImageReader; import javax.imageio.stream.ImageInputStream; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class FileUtils { public final static Map<String, String> IMG_FILE_TYPE_MAP = new HashMap<String, String>(); /** * @Description: 图片文件上传 * @author Xiao.Sky * @creaetime 2015年4月17日下午5:20:27 * @param request * @param response * @param photo * @param strtmp * 文件名称 xxx.jpg * @param path * 文件路径 * @param num * @return */ public static boolean updatePhoto(HttpServletRequest request,HttpServletResponse response, File photo, String strtmp,String path, long num) { File dir = new File(path); // 如果不存在就创建次文件夹 if (!dir.exists()) { dir.mkdirs(); } File newFile = new File(dir, strtmp); // 如果存在此文件就删除此文件 if (newFile.exists()) newFile.delete(); BufferedInputStream bis = null; FileInputStream fis = null; try { fis = new FileInputStream(photo); FileOutputStream fos = new FileOutputStream(newFile); BufferedImage src = ImageIO.read(fis); ImageIO.write(src, "png", fos); } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != bis) { bis.close(); } if (null != fis) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * * @Description: 普通文件上传 * @author Xiao.Sky * @creaetime 2015年4月23日下午3:33:53 * @param request * @param response * @param photo * @param strtmp * @param path * @param num * @return */ public static boolean updateFile(HttpServletRequest request,HttpServletResponse response, File photo, String strtmp,String path, long num) { File dir = new File(path); // 如果不存在就创建次文件夹 if (!dir.exists()) { dir.mkdirs(); } File newFile = new File(dir, strtmp); // 如果存在此文件就删除此文件 if (newFile.exists()) newFile.delete(); BufferedOutputStream bos = null; BufferedInputStream bis = null; FileInputStream fis = null; try { fis = new FileInputStream(photo); long s = fis.available(); // 检查文件上传的大小,文件不能大于2MB 2097152 if (s > num) { return false; } bis = new BufferedInputStream(fis); FileOutputStream fos = new FileOutputStream(newFile); bos = new BufferedOutputStream(fos); byte[] buf = new byte[4096]; int len = -1; while ((len = bis.read(buf)) != -1) { bos.write(buf, 0, len); } } catch (Exception e) { e.printStackTrace(); } finally { try { if (null != bos) { bos.flush(); bos.close(); } if (null != bis) { bis.close(); } if (null != fis) { fis.close(); } } catch (IOException e) { e.printStackTrace(); } } return true; } /** * Discription:[getAllFileType,常见文件头信息] */ static{ IMG_FILE_TYPE_MAP.put("jpg", "FFD8FF"); // JPEG (jpg) IMG_FILE_TYPE_MAP.put("jpeg", "FFD8FF"); IMG_FILE_TYPE_MAP.put("png", "89504E47");// PNG (png) IMG_FILE_TYPE_MAP.put("bmp", "424D"); // Windows Bitmap (bmp) } /** * * @Description:getImageFileType,获取图片文件实际类型,若不是图片则返回null * @author Tang.Homvee * @creaetime 2015年8月21日下午5:43:53 * @param f * @return */ public final static String getImageFileType(File f) { if (isImage(f)) { ImageInputStream iis = null; try { iis= ImageIO.createImageInputStream(f); Iterator<ImageReader> iter = ImageIO.getImageReaders(iis); if (!iter.hasNext()) { return null; } ImageReader reader = iter.next(); return reader.getFormatName(); } catch (IOException e) { e.printStackTrace(); return null; } catch (Exception e) { e.printStackTrace(); return null; }finally{ if(iis != null){ try { iis.close(); } catch (IOException e) { } } } } return null; } public final static String getFileByFile(File file) { String filetype = null; byte[] b = new byte[50]; InputStream is = null; try { is = new FileInputStream(file); is.read(b); filetype = getFileTypeByStream(b); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); }finally{ if(is != null){ try { is.close(); } catch (IOException e) { } } } return filetype; } public final static String getFileTypeByStream(byte[] b) { String filetypeHex = String.valueOf(getFileHexString(b)); Iterator<Entry<String, String>> entryiterator = IMG_FILE_TYPE_MAP .entrySet().iterator(); while (entryiterator.hasNext()
©️2020 CSDN 皮肤主题: 数字20 设计师:CSDN官方博客 返回首页