weblogic容器dubbo,jdk8 :invalid constant type: 15

本文介绍了一种由于接口方法重载导致Dubbo服务无法正常注册的问题,并给出了具体的解决方案,包括更新Javassist版本及配置weblogic.xml文件。
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包冲突。

 

  

转载于:https://www.cnblogs.com/yinfj/p/7833932.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值