java.lang.NoSuchMethodError: java.lang.Character.isSurrogate(C)Z

来源:互联网 发布:临时水电计算软件 编辑:程序博客网 时间:2024/06/07 05:36

异常信息:

2017-2-12 22:04:08 org.apache.jasper.compiler.TldLocationsCache tldScanJar
信息: At least one JAR was scanned for TLDs yet contained no TLDs. Enable debug logging for this logger for a complete list of JARs that were scanned but no TLDs were found in them. Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.
2017-2-12 22:07:07 org.apache.catalina.core.StandardWrapperValve invoke
严重: Servlet.service() for servlet [springmvc] in context with path [/MonitoringSystem] threw exception [Handler processing failed; nested exception isjava.lang.NoSuchMethodError: java.lang.Character.isSurrogate(C)Z] with root cause
java.lang.NoSuchMethodError: java.lang.Character.isSurrogate(C)Z
at com.alibaba.fastjson.util.IOUtils.decodeUTF8(IOUtils.java:703)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:365)
at com.alibaba.fastjson.JSON.parseObject(JSON.java:452)
at com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter.read(FastJsonHttpMessageConverter.java:190)
at org.springframework.web.servlet.mvc.method.annotation.AbstractMessageConverterMethodArgumentResolver.readWithMessageConverters(AbstractMessageConverterMethodArgumentResolver.java:197)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.readWithMessageConverters(RequestResponseBodyMethodProcessor.java:147)
at org.springframework.web.servlet.mvc.method.annotation.RequestResponseBodyMethodProcessor.resolveArgument(RequestResponseBodyMethodProcessor.java:125)
at org.springframework.web.method.support.HandlerMethodArgumentResolverComposite.resolveArgument(HandlerMethodArgumentResolverComposite.java:99)
at org.springframework.web.method.support.InvocableHandlerMethod.getMethodArgumentValues(InvocableHandlerMethod.java:161)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:128)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:110)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:832)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:743)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:85)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:961)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:895)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:967)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:869)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
at org.springframework.web.servlet.FrameworkServlet.service(FrameworkServlet.java:843)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:383)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:262)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:121)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:107)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:220)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:122)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:501)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:170)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:98)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:950)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1040)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:607)
at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.doRun(AprEndpoint.java:2441)

项目信息:
项目是用maven构建的,用的Spring+Mybatis+Oracle,后台和页面以json数据通信,用的fastjson做的中间转换器:
<mvc:annotation-driven><!-- 返回值类型的转换器 --><mvc:message-converters register-defaults="true"><!-- 将Jackson2HttpMessageConverter的默认格式化输出为true --><!-- 配置Fastjson支持 --><beanclass="com.alibaba.fastjson.support.spring.FastJsonHttpMessageConverter"><property name="supportedMediaTypes"><list><value>text/html;charset=UTF-8</value><value>application/json</value></list></property><property name="features"><list><!-- 输出key时是否使用双引号 --><!-- <value>QuoteFieldNames</value>是否输出值为null的字段<value>WriteMapNullValue</value>数值字段如果为null,输出为0,而非null<value>WriteNullNumberAsZero</value>List字段如果为null,输出为[],而非null<value>WriteNullListAsEmpty</value>字符类型字段如果为null,输出为"",而非null<value>WriteNullStringAsEmpty</value>Boolean字段如果为null,输出为false,而非null<value>WriteNullBooleanAsFalse</value>null String不输出<value>WriteNullStringAsEmpty</value>null String也要输出<value>WriteMapNullValue</value>Date的日期转换器<value>WriteDateUseDateFormat</value> --><value>WriteMapNullValue</value><value>QuoteFieldNames</value> <value>WriteDateUseDateFormat</value></list></property></bean></mvc:message-converters></mvc:annotation-driven>

异常现象:对应实体的json数据从页面往后台传时,若包含中文,就报如上异常;若无中文,则正常。


参考:http://stackoverflow.com/questions/7270207/exception-in-thread-main-java-lang-nosuchmethoderror-java-lang-character-isal
V           voidZ           booleanC           charB           byteS           shortI           intF           floatJ           longD           doubleL<class>;   Reference type, for example Ljava/lang/String;

异常原因:运行环境问题,编译的JDK和运行的不一致导致。

查看项目发现用的fastjosn版本为:1.2.24
查看其编译JDK:1.8.0_112
而项目构建JDK:1.6



解决办法:把fastjson版本换为用1.6编译的1.1.41后解决。

附:查看jar包JDK版本的方法:
地址:http://www.itnpc.com/news/web/146215427561876.html

1.查看.jar包中的META-INF\MANIFEST.MF

          使用winrar等压缩软件打开.jar包,查看META-INF\MANIFEST.MF中的内容,Build-Jdk属性就是JDK的版本,比如:

Build-Jdk: 1.8.0_91

      说明其JDK版本为1.8.0_91。 

      但是,如果一个.jar文件中,如果没有这个字段,就必须通过下面一种方法来查看。

2.通过反编译.class文件来查看

      解压.jar包,能得到.class文件。用JDK自带的javap反编译.class文件,用如下命令:

javap -verbose Configuration.class11

      查看得到的信息中,major version属性的内容,如下

major version: 5211

      说明这个.class文件是由JDK1.8编译得到的。

  • J2SE 6.0 = 50 (0x32 hex)

  • J2SE 5.0 = 49 (0x31 hex)

  • JDK 1.4 = 48 (0x30 hex)

  • JDK 1.3 = 47 (0x2F hex)

  • JDK 1.2 = 46 (0x2E hex)

  • JDK 1.1 = 45 (0x2D hex)

      [注意]一个.jar包中可能有多个.class文件,每个.class的JDK版本可能会不一样(编译器多个项目设置不同) 。

3.如何设置Eclipse导出.jar的JDK版本

      我们可以在同一台机器上安装多个JDK,然后在eclipse中选择不同版本的JDK来导出.jar包。

      Project右键->Properties->JavaCompiler中的JDK Compliance选项下,有Use Compliance from execution environment 选择JDK版本。

      [注意]如果一个.jar依赖于多个Project,必须将每个Project的JDK版本都选择一致。



0 0