在activiti工作流中的将工作流文件通过activit-probe的deployment部署文件。实现原理如下。通过activiti-probe中调用commons-fileupload将文件上传到并部署。源代码如下:
package org.activiti.rest.api.repository; import java.util.List; /** * @author Tijs Rademakers */ public class DeploymentUploadResource extends SecuredResource { @Post public void uploadDeployment(Representation entity) { try { if(authenticate(SecuredResource.ADMIN) == false) return; RestletFileUpload upload = new RestletFileUpload(new DiskFileItemFactory()); List<FileItem> items = upload.parseRepresentation(entity); FileItem uploadItem = null; String successMethod = null; for (FileItem fileItem : items) { if(fileItem.getName() != null) { uploadItem = fileItem; } else if(fileItem.getFieldName().equals("success")){ successMethod = fileItem.getString(); } } DeploymentBuilder deploymentBuilder = ActivitiUtil.getRepositoryService().createDeployment(); String fileName = uploadItem.getName(); if (fileName.endsWith(".bpmn20.xml")) { deploymentBuilder.addInputStream(fileName, uploadItem.getInputStream()); } else if (fileName.endsWith(".bar") || fileName.endsWith(".zip")) { deploymentBuilder.addZipInputStream(new ZipInputStream(uploadItem.getInputStream())); } else { throw new ActivitiException("File must be of type .bpmn20.xml, .bar or .zip"); } deploymentBuilder.name(fileName); deploymentBuilder.deploy(); StringBuilder html = new StringBuilder(); html.append("<html>\n"); html.append(" <script type=\"text/javascript\">\n"); html.append(" " + successMethod + "()\n"); html.append(" </script>\n"); html.append("</html>\n"); getResponse().setEntity(html.toString(), MediaType.TEXT_HTML); } catch (Exception e) { throw new ActivitiException(e.getMessage(), e); } } }