「SAX2 driver class org.apache.crimson.parser.XMLReaderImpl not found」 when using Batik in a webapp on Tomcat
解決css
<dependency> <groupId>batik</groupId> <artifactId>batik-transcoder</artifactId> <version>1.6-1</version> <exclusions> <exclusion> <artifactId>fop</artifactId> <groupId>fop</groupId> </exclusion> </exclusions> </dependency>
一、下載activiti5.22
https://pan.baidu.com/s/1jIacfaA
二、解壓activiti5.22
找到wars在的activiti-explorer.war,將其放在tomcat的webapps下,啓動tomcat將其解壓,找activiti-explorer\WEB-INF\lib,拷貝全部jar包到bamboo-activiti的lib下
本人採用的是maven 因此在pom文件中加入相關jar包html
<dependency> <groupId>org.activiti</groupId> <artifactId>activiti-explorer</artifactId> <version>5.19.0.2</version> </dependency> <!-- <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-engine</artifactId> <version>5.21.0</version> </dependency> --> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-modeler</artifactId> <version>5.22.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-rest</artifactId> <version>6.0.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-diagram-rest</artifactId> <version>5.22.0</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-bpmn-model</artifactId> <version>5.22.0</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-transcoder</artifactId> <version>1.6-1</version> <exclusions> <exclusion> <artifactId>fop</artifactId> <groupId>fop</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-dom</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>org.activiti</groupId> <artifactId>activiti-json-converter</artifactId> <version>5.19.0</version> <exclusions> <exclusion> <artifactId>commons-collections</artifactId> <groupId>commons-collections</groupId> </exclusion> </exclusions> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-bridge</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>org.codeartisans.thirdparties.swing</groupId> <artifactId>batik-all</artifactId> <version>1.8pre-r1084380</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-css</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-codec</artifactId> <version>1.9</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-ext</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-gvt</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-script</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-parser</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-svg-dom</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-svggen</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-util</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-xml</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>batik-js</artifactId> <version>1.7</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis-ext</artifactId> <version>1.3.04</version> </dependency> <dependency> <groupId>xml-apis</groupId> <artifactId>xml-apis</artifactId> <version>1.3.04</version> </dependency> <dependency> <groupId>org.apache.xmlgraphics</groupId> <artifactId>xmlgraphics-commons</artifactId> <version>1.2</version> </dependency> <dependency> <groupId>batik</groupId> <artifactId>batik-awt-util</artifactId> <version>1.6-1</version> </dependency> <dependency> <groupId>commons-collections</groupId> <artifactId>commons-collections</artifactId> <version>3.2.1</version> </dependency> <dependency> <groupId>commons-lang</groupId> <artifactId>commons-lang</artifactId> <version>2.6</version> </dependency>
三、 將wars下面的activiti-explorer.war 解壓縮
將webapp下的diagram-viewer、editor-app、modeler.html,將其加到項目的webapp下面
四、activiti 的配置文件以下前端
<?xml version="1.0" encoding="UTF-8"?> <beans xmlns="http://www.springframework.org/schema/beans" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:context="http://www.springframework.org/schema/context" xmlns:mvc="http://www.springframework.org/schema/mvc" xmlns:aop="http://www.springframework.org/schema/aop" xsi:schemaLocation=" http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans.xsd http://www.springframework.org/schema/context http://www.springframework.org/schema/context/spring-context.xsd http://www.springframework.org/schema/mvc http://www.springframework.org/schema/mvc/spring-mvc.xsd "> <!-- <bean id="processEngineConfiguration" class="org.activiti.engine.impl.cfg.StandaloneProcessEngineConfiguration"> 鏈接數據的配置 <property name="jdbcDriver" value="com.mysql.jdbc.Driver"></property> <property name="jdbcUrl" value="jdbc:mysql://localhost:3306/activiti"></property> <property name="jdbcUsername" value="root"></property> <property name="jdbcPassword" value="123123"></property> 沒有表建立表 <property name="databaseSchemaUpdate" value="true"></property> </bean> --> <!-- spring負責建立流程引擎的配置文件 --> <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration"> <!-- 數據源 --> <property name="dataSource" ref="dataSource" /> <!-- 配置事務管理器,統一事務 --> <property name="transactionManager" ref="transactionManager" /> <!-- 設置建表策略,若是沒有表,自動建立表 --> <property name="databaseSchemaUpdate" value="true" /> <!-- 做業執行器 --> <property name="jobExecutorActivate" value="false" /> <property name="enableDatabaseEventLogging" value="false" /> <!-- 歷史級別 --> <!-- <property name="history" value="activity" /> --> <property name="processDefinitionCacheLimit" value="10" /> <!-- 生成流程圖的字體 --> <property name="activityFontName" value="宋體" /> <property name="labelFontName" value="宋體" /> <!-- 全局監聽器 --> <!-- <property name="typedEventListeners"> <map> <entry key="ENTITY_CREATED"> <list> <bean class="com.ssm.activiti.listener.MyJobEventListener" /> </list> </entry> <entry key="TASK_CREATED"> <list> <bean class="com.ssm.activiti.listener.MyJobEventListener" /> </list> </entry> <entry key="TASK_COMPLETED"> <list> <bean class="com.ssm.activiti.listener.MyJobEventListener" /> </list> </entry> <entry key="PROCESS_COMPLETED"> <list> <bean class="com.ssm.activiti.listener.MyJobEventListener" /> </list> </entry> </map> </property> --> </bean> <!-- 建立流程引擎對象 --> <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean"> <property name="processEngineConfiguration" ref="processEngineConfiguration" /> </bean> <!-- 至關於下面的代碼 RepositoryServicie repositoryService = processEngine.getRepositoryService(); RuntimeServicie repositoryService = processEngine.getRuntimeServicie(); TaskServicie taskServicie = processEngine.getTaskServicie(); HistoryServicie historyServicie = processEngine.getHistoryServicie(); --> <!-- 由流程引擎對象,提供的方法,建立項目中使用的Activiti工做流的Service --> <bean id="repositoryService" factory-bean="processEngine" factory-method="getRepositoryService" /> <bean id="runtimeService" factory-bean="processEngine" factory-method="getRuntimeService" /> <bean id="taskService" factory-bean="processEngine" factory-method="getTaskService" /> <bean id="historyService" factory-bean="processEngine" factory-method="getHistoryService" /> <bean id="formService" factory-bean="processEngine" factory-method="getFormService" /> <bean id="identityService" factory-bean="processEngine" factory-method="getIdentityService" /> <bean id="managementService" factory-bean="processEngine" factory-method="getManagementService" /> <bean id="objectMapper" class="com.fasterxml.jackson.databind.ObjectMapper" /> <context:component-scan base-package="com.ssm.activiti.model" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan> </beans>
上面對於數據源的配置,我已經在mybatis配置的時候已經配置,這裏面直接用了datasource 在Spring 配置文件 spring.xml 引入上面的配置
<import resource="classpath:activiti.cfg.xml" />java
四、Activiti 5.22.0的libs中找到activiti-modeler-5.22.0-sources.jar 解壓
將三個java文件拷貝到本身的文件夾下 com.ssm.activiti.model ModelEditorJsonRestResource.java
ModelSaveRestResource.java
StencilsetRestResource.javamysql
五、activiti 配置文件添加配置web
<context:component-scan base-package="com.ssm.activiti.model" use-default-filters="false"> <context:include-filter type="annotation" expression="org.springframework.stereotype.Controller" /> </context:component-scan>
六、在editor-app中找到app-cfg.js文件,將'contextRoot' : '/activiti-explorer/service',修改成本項目的路徑spring
ACTIVITI.CONFIG = { 'contextRoot' : '/api', };
api是個人項目名稱sql
七、 建立Controller model 以下express
@Controller @RequestMapping(EnvConstant.WORKFLOW_PROJECT_NAME + EnvConstant.WORKFLOW_VERSION + "model/") public class ActivitiModelController { @Autowired private RepositoryService repositoryService; @RequestMapping("create") public void create(HttpServletRequest request, HttpServletResponse response) { try { ObjectMapper objectMapper = new ObjectMapper(); ObjectNode editorNode = objectMapper.createObjectNode(); editorNode.put("id", "canvas"); editorNode.put("resourceId", "canvas"); ObjectNode stencilSetNode = objectMapper.createObjectNode(); stencilSetNode.put("namespace", "http://b3mn.org/stencilset/bpmn2.0#"); editorNode.put("stencilset", stencilSetNode); Model modelData = repositoryService.newModel(); ObjectNode modelObjectNode = objectMapper.createObjectNode(); modelObjectNode.put(ModelDataJsonConstants.MODEL_NAME, "hello1111"); modelObjectNode.put(ModelDataJsonConstants.MODEL_REVISION, 1); String description = "hello1111"; modelObjectNode.put(ModelDataJsonConstants.MODEL_DESCRIPTION, description); modelData.setMetaInfo(modelObjectNode.toString()); modelData.setName("hello1111"); modelData.setKey("12313123"); //保存模型 repositoryService.saveModel(modelData); repositoryService.addModelEditorSource(modelData.getId(), editorNode.toString().getBytes("utf-8")); response.sendRedirect( request.getContextPath() + "/modeler.html?modelId=" + modelData.getId()); } catch (Exception e) { System.out.println("建立模型失敗:"); } } }
八、將stencilset.json 拷貝到 /src/main/resources 下面
若是是從activiti-export war裏面拷貝過來的是model是英文的,須要進行漢化。
參考漢化版本
https://pan.baidu.com/s/1skKoTU9 八、前端頁面index.jsp 裏面加上連接apache
<div style="margin-top: 20px;"> <a href="activiti/v0_1_0/model/create/">Spring-MVC 跳轉</a><br /> <a href="activiti/v0_1_0/model/create/">activiti-modele-index</a><br /> </div>
點擊連接跳轉到model界面
參考連接:http://blog.csdn.net/u010411264/article/details/71480354