zoukankan      html  css  js  c++  java
  • SSM集成activiti6.0错误集锦(一)

    项目环境

    • Maven构建
    • 数据库:Orcle12c
    • 服务器:Tomcat9
    • <java.version>1.8</java.version>
    • <activiti.version>6.0.0</activiti.version>
    • <springframework.version>5.0.4.RELEASE</springframework.version>
    • <mybatis.version>3.4.5</mybatis.version>

    问题

    问题一:java.lang.ClassNotFoundException: com.fasterxml.jackson.databind.exc.InvalidDefinitionException

    • 出现原因:Jackson和Spring版本不兼容问题,activiti6中自带的Jackson版本是2.7.5,和spring5不兼容,Jackson版本过低
    • 解决思路:查询pom中是否存在jacksonjar包引用,如果存在则在pom的activiti引用中排除jackson的jar包引用
    • 解决步骤
      • 查看pom引用jar,如下图所示,点击4——>使用3搜索,可以看见activiti-engine下依赖很多jackson的低版本的jar。2.7.5版本和Spring5一定不兼容

                                图一

      • 在pom的activiti-engine下排除关于jackson的引用,如下
        <!-- activiti-engine-->
            <dependency>
                <groupId>org.activiti</groupId>
                <artifactId>activiti-engine</artifactId>
                <version>${activiti.version}</version>
                <exclusions>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-core</artifactId>
                    </exclusion>
                    <exclusion>
                        <groupId>com.fasterxml.jackson.core</groupId>
                        <artifactId>jackson-databind</artifactId>
                    </exclusion>
                </exclusions>
            </dependency> 
        
                

        如果找不到相关的<groupId>和<artifactId>,可以双击图一中的标记2(也就是相关的依赖jar),将会进入到如下界面,找到相关的<groupId>和<artifactId>

      • 重新引入高版本Jackson
        <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-core -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-core</artifactId>
                <version>2.9.5</version>
            </dependency>
            <!-- https://mvnrepository.com/artifact/com.fasterxml.jackson.core/jackson-databind -->
            <dependency>
                <groupId>com.fasterxml.jackson.core</groupId>
                <artifactId>jackson-databind</artifactId>
                <version>2.9.5</version>
            </dependency>
      • 强制更新maven项目,解决问题

    问题二:Could not open ServletContext resource [diagrams/test.bpmn]

    • 出现原因:在项目启动时自送部署流程的相关配置路径问题,如下图

    • 解决办法:在路径前面加上classpath:  ,代表在当前资源文件路径下查找
      • 如下图,修改自动部署流程路径

    问题三:No qualifying bean of type 'org.activiti.engine.ProcessEngine' is defined

    • 问题场景
      • 我的activiti.cfg.xml中配置如下
        <bean id="processEngineConfiguration" class="org.activiti.spring.SpringProcessEngineConfiguration">
                <!-- 配置数据源,和系统使用同一个数据源-->
                  <property name="dataSource" ref="dataSource" />
                  <property name="databaseSchemaUpdate" value="true" />
                  <!-- 统一的事务管理 -->
                  <property name="transactionManager" ref="transactionManager" />
                  <property name="activityFontName"  value="宋体" />
                  <property name="labelFontName"  value="宋体" />
                  <property name="deploymentResources">
                    <list>
                        <value>classpath:diagrams/test.bpmn</value>
                    </list>
                </property>
                  <property name="beans">
                    <map>
                        <entry key="myService" value-ref="myService" />
                    </map>
                </property>
            </bean>
            
            <bean id="processEngine" class="org.activiti.spring.ProcessEngineFactoryBean">
                 <property name="processEngineConfiguration" ref="processEngineConfiguration" />
            </bean>
      • Java类中注入方法如下
        @Autowired
        @Qualifier
        private ProcessEngine processEngine;
      • 报错信息如下图

    • 问题原因
      • 在配置文件中,注入的类是org.activiti.spring.ProcessEngineFactoryBean,而在Java中自动注入的实体Bean则是org.activiti.engine.ProcessEngine,两者类型不匹配
      • 注解@Autowired默认是按照Bean类型来匹配,而org.activiti.engine.ProcessEngine根本就没有配置注入,所以报错
    • 解决办法
      • 修改匹配模式为名称匹配,将注解@Qualifier修改为@Qualifier(value="processEngine")
      • 虽然两者类型不一样,但是Spring 会自动将org.activiti.spring.ProcessEngineFactoryBean强转成org.activiti.engine.ProcessEngine注入
  • 相关阅读:
    一起学编程(2--认识世界)
    在CentOS 6 中安装 Apache,Mysql, PHP
    JavaScript的代码库
    http get请求获取server返回的应答数据
    Effective C++ 45-48
    通过telent、php深入了解http协议
    UVA 10069 Distinct Subsequences(DP)
    Linux局域网搭建
    iTextSharp之pdfRead(两个文件文本内容的比较,指定页数的pdf截取,水印的添加)
    c#操作pdf文件系列之创建文件
  • 原文地址:https://www.cnblogs.com/zuiyue_jing/p/8933432.html
Copyright © 2011-2022 走看看