java.lang.RuntimeException: java.io.IOException: invalid constant type: 15 at javassist.CtClassType.getClassFile2(CtClassType.java:203) at javassist.CtClassType.subtypeOf(CtClassType.java:303) at javassist.CtClassType.subtypeOf(CtClassType.java:318) at javassist.compiler.MemberResolver.compareSignature(MemberResolver.java:247) at javassist.compiler.MemberResolver.lookupMethod(MemberResolver.java:119) Truncated. see log file for complete stacktrace Caused By: java.io.IOException: invalid constant type: 15 at javassist.bytecode.ConstPool.readOne(ConstPool.java:1090) at javassist.bytecode.ConstPool.read(ConstPool.java:1033) at javassist.bytecode.ConstPool.<init>(ConstPool.java:149) at javassist.bytecode.ClassFile.read(ClassFile.java:764) at javassist.bytecode.ClassFile.<init>(ClassFile.java:108) Truncated. see log file for complete stacktrace
经实际测试,dubbo服务里面暴露的接口方法重载后导致服务注册不上,胆并不是dubbo注册不上的根本原因
下面说一下解决办法
网上很多资料是javassist这个jar包的版本太低,我替换了项目里面的jar,仍然不能解决,
我的版本dubbo2.5.3----------------》》》》javassist3.15版本
dubbo.2.5.7----------------》》》》javassist3.20
换成dubbo2.5.7版本jar仍不能解决
so,那问题就出在weblogic身上,仔细了解了一下,weblogic有一个配置文件就是weblogic.xml,那么解决办法来了!
1.替换项目下javassist3.15版本为3.18-GA
2.在项目下建立weblogic.xml文件,如下
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE weblogic-web-app PUBLIC "-//BEA Systems, Inc.//DTD Web Application 8.1//EN" "http://www.bea.com/servers/wls810/dtd/weblogic810-web-jar.dtd"> <weblogic-web-app> <session-descriptor> <session-param> <param-name>TimeoutSecs</param-name> <param-value>1800</param-value> </session-param> </session-descriptor> <container-descriptor> <session-monitoring-enabled>true</session-monitoring-enabled> <prefer-web-inf-classes>true</prefer-web-inf-classes> </container-descriptor> </weblogic-web-app>
3.重新编译部署项目,你会发现解决了,后面附上weblogic.xml详细配置
原理,优先使用Web应用里加载的类。该参数常用来解决应用程序的jar包和weblogic下的jar包冲突,至于说网上说那么高深的还不懂,实际
留个口子,在后面的学习中再做出解释
===============================================================华丽分割线=======================================================
下面附上weblogic.xml详解
1.关于keepgenerated
<jsp-param>
<param-name>keepgenerated</param-name>
<param-value>true</param-value>
</jsp-param>
解释:该值表示是否在JSP编译过程中保存作为中间步骤生成的 Java 文件,如果设置为true,就可以在部署的环境查看jsp产生的.java文件,方便调试错误,否则编译完成后将删除所有中间 Java 文件。
2.关于pageCheckSeconds
<jsp-descriptor>
<param-name>pageCheckSeconds</param-name>
<param-value>-1</param-value>
</jsp-descriptor>
解释:pageCheckSecond表示检查JSP文件的时间间隔(秒),默认值是1,表示每隔1秒对JSP页面进行检查,检查JSP页面是否被修改、是否需要重新编译,
如果已发生更改,还会检查依赖关系并递归重新加载,倘若为0,则表示总是检查页面。
通常在系统上线前,需要对该默认值修改为-1,表示永不检查页面。修改为-1的一个缺点是:对于页面的修改需要重新部署整个WEB应用。
3.关于precompile
<jsp-descriptor>
<param-name>precompile</param-name>
<param-value>true</param-value>
</jsp-descriptor>
解释:如果设置为 true,当部署或重新部署 Web应用程序时,或启动 WebLogic时,WebLogic Server会自动预编译所有已修改的JSP。
4.关于precompile-continue
<jsp-descriptor>
<param-name>precompile-continue</param-name>
<param-value>true</param-value>
</jsp-descriptor>
解释:如果设置为 true,即使编译期间其中某些 JSP 失败,WebLogic Server也会继续预编译所有已修改的 JSP。仅当 precompile设置为true时才生效。
5.关于servlet-reload-check-secs
<container-descriptor>
<servlet-reload-check-secs>-1</servlet-reload-check-secs>
</container-descriptor>
解释:该参数的默认值也是1,每隔1秒检查servlet是否被修改并需要重新编译。这里建议修改为-1,表示永不检查。
6.关于prefer-web-inf-classes
<container-descriptor>
<prefer-web-inf-classes>true</prefer-web-inf-classes>
</container-descriptor>
解释:当该值为true时表示优先使用Web应用里加载的类。该参数常用来解决应用程序的jar包和weblogic下的jar包冲突。