实习日志--java.lang.NoSuchMethodError异常问题解决

3 篇文章 0 订阅
3 篇文章 0 订阅

今天web项目报了一个java.lang.NoSuchMethodError错误,详情如下:

java.lang.NoSuchMethodException: com.sinosoft.crm.dto.custom.CRMFactorEvaluateDto.setCHANNELSCORE(java.lang.Long)
	at java.lang.Class.getMethod(Class.java:1607)
	at com.sinosoft.framework.reference.Result.invokeMethod(Result.java:411)
	at com.sinosoft.framework.reference.Result.result2Object(Result.java:261)
	at com.sinosoft.framework.reference.Result.result2Objects(Result.java:109)
	at com.sinosoft.framework.reference.QueryDBManager.getResultList(QueryDBManager.java:96)
	at com.sinosoft.framework.reference.DtoManager.querySQL(DtoManager.java:208)
	at com.sinosoft.framework.reference.DtoManager.querySQL(DtoManager.java:148)
	at com.sinosoft.crm.bl.facade.BLCommonFacade.findBySQL(BLCommonFacade.java:207)
	at com.sinosoft.crm.bl.facade.BLCommonFacade.findBySQL(BLCommonFacade.java:192)
	at com.sinosoft.crm.ui.control.UIFactorEvaluateControl.findCurrentInfo(UIFactorEvaluateControl.java:104)
	at com.sinosoft.crm.ui.action.UIFactorEvaluateAction.initEdit(UIFactorEvaluateAction.java:75)
	at sun.reflect.GeneratedMethodAccessor290.invoke(Unknown Source)
	at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
	at java.lang.reflect.Method.invoke(Method.java:597)
	at com.sinosoft.crm.ui.action.BaseAction.execute(BaseAction.java:114)
	at org.apache.struts.chain.commands.servlet.ExecuteAction.execute(ExecuteAction.java:58)
	at org.apache.struts.chain.commands.AbstractExecuteAction.execute(AbstractExecuteAction.java:67)
	at org.apache.struts.chain.commands.ActionCommandBase.execute(ActionCommandBase.java:51)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.commons.chain.generic.LookupCommand.execute(LookupCommand.java:305)
	at org.apache.commons.chain.impl.ChainBase.execute(ChainBase.java:191)
	at org.apache.struts.chain.ComposableRequestProcessor.process(ComposableRequestProcessor.java:283)
	at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1913)
	at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:449)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:707)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:820)
	at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
	at weblogic.servlet.internal.StubSecurityHelper.invokeServlet(StubSecurityHelper.java:125)
	at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
	at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:26)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
	at org.ecside.filter.ECSideFilter.doFilter(ECSideFilter.java:188)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
	at com.sinosoft.framework.web.control.SetCharacterEncodingFilter.doFilter(SetCharacterEncodingFilter.java:71)
	at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:60)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.wrapRun(WebAppServletContext.java:3748)
	at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3714)
	at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
	at weblogic.security.service.SecurityManager.runAs(SecurityManager.java:120)
	at weblogic.servlet.internal.WebAppServletContext.securedExecute(WebAppServletContext.java:2283)
	at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2182)
	at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1499)
	at weblogic.work.ExecuteThread.execute(ExecuteThread.java:263)
	at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

错误分析:应该是数据类型转化错误,所以跟进了一下错误中报的代码:

public Integer getCHANNELSCORE() {
		return CHANNELSCORE;
	}

public void setCHANNELSCORE(Integer cHANNELSCORE) {
	CHANNELSCORE = cHANNELSCORE;
}

可以看到项目代码定义的getCHANNELSCOREInteger类型的,传递过程中变成了Long类型,查了很久是因为Oracle数据库CHANNELSCORE字段长度定义问题,问题详情:因为定义的Number字段长度为10,所以在映射中,CHANNELSCORE返回的数据类型变成了Long,所以报出NoSuchMethodError,映射详情:

number(1) boolean Boolean 
number(2)2至4之间 byte Byte 
number(8)4至8之间 integer Integer 
numbernumber(10)8以上 long Long

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值