近期刚开始接触jbpm,在整合web工程时遇到一异常,特有意思。记录下来,以免更多人少走弯路。
代码
java.lang.LinkageError: loader constraint violation: when resolving
interface
method
"
javax.servlet.jsp.JspApplicationContext.getExpressionFactory()Ljavax/el/ExpressionFactory;
"
the
class
loader (instance of org
/
apache
/
jasper
/
servlet
/
JasperLoader) of the current
class
, org
/
apache
/
jsp
/
index_jsp, and the
class
loader (instance of org
/
apache
/
catalina
/
loader
/
StandardClassLoader)
for
resolved
class
, javax
/
servlet
/
jsp
/
JspApplicationContext, have different Class objects
for
the type javax
/
el
/
ExpressionFactory used in the signature
at org.apache.jsp.index_jsp._jspInit(index_jsp.java: 30 )
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java: 52 )
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java: 159 )
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 329 )
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 342 )
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java: 267 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 191 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 845 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 583 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
at org.apache.jsp.index_jsp._jspInit(index_jsp.java: 30 )
at org.apache.jasper.runtime.HttpJspBase.init(HttpJspBase.java: 52 )
at org.apache.jasper.servlet.JspServletWrapper.getServlet(JspServletWrapper.java: 159 )
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java: 329 )
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java: 342 )
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java: 267 )
at javax.servlet.http.HttpServlet.service(HttpServlet.java: 717 )
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java: 290 )
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java: 206 )
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java: 233 )
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java: 191 )
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java: 128 )
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java: 102 )
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java: 109 )
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java: 286 )
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java: 845 )
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java: 583 )
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java: 447 )
at java.lang.Thread.run(Thread.java: 619 )
从异常信息不难看出,是web容器 tomcat解析jsp页面时jar包冲突。
仔细查看jbpm4.3 lib目录下的jar包我们不难发现,罪魁祸首为juel.jar和juel-impl.jar
很显然原因就出在这两个jar包身上,从名字上不难发现juel-impl是前者的实现,因此这里采取的措施是保留juel-impl.jar删除juel.jar
重启tomcat,刷新web页面。问题迎刃而解。
刚开始接触jbpm,前阵子看了一下jbpm3的api,后来看了看jbpm4的API发现之间相差很大。