yadianna 发表于 2017-2-28 07:11:12

记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject

原因:Jetty会导致这个问题,Tomcat可以正常启动

一、异常产生现象
使用json-lib转换实体类/字符串,跑单元测试没问题,但是启动jetty后调用JSONArray.fromObject(data)就会抛标题中异常

二、尝试解决的步骤
1、网上有的说tomcat存在此问题,需要将jar包拷贝到tomcat目录,容器用的是jetty,所以不是这个原因(未解决)
http://blog.csdn.net/yeqiuzs/article/details/45097063


2、json-lib需要引入其它库,如图所示,引入后单元测试可以跑通,但是jetty启动还是抛异常(未解决)
http://stackoverflow.com/questions/11567383/java-runtime-classnotfoundexception
   

3、项目中用到了commons-lang3,考虑和commons-lang 2.5是否存在兼容性问题,删除commons-lang3后还是抛异常(未解决)



<dependency>
            <groupId>org.apache.commons</groupId>
            <artifactId>commons-lang3</artifactId>
            <version>3.4</version>
      </dependency>  4、考虑是不是json-lib其他库的版本问题,将图中下半部分的版本改成和上半部分一样,还是抛异常(未解决)

  三、最终替代方案:fastjon
  原因如下:
  1、阿里巴巴开源,质量和效率有保障
  2、不依赖其它jar包
  3、使用简单,满足要求
  pom依赖:



<dependency>
   <groupId>com.alibaba</groupId>
   <artifactId>fastjson</artifactId>
   <version>1.2.7</version>
</dependency>  工具类代码:



import java.util.ArrayList;
import java.util.List;

import com.alibaba.fastjson.JSON;

/**
* Json工具类
*
*/
public class JsonUtil {
    /**
   * 字符串转换为实体类
   *
   */
    public static <T> T StringToEntity(String str, Class<T> classT) {
      T t = JSON.parseObject(str, classT);
      return t;
    }

    /**
   * 字符串转换为实体集合
   *
   */
    public static <T> ArrayList<T> StringToEntityList(String str, Class<T> classT) {
      List<T> lst = JSON.parseArray(str, classT);
      return (ArrayList<T>) lst;
    }

    /**
   * 实体类转换为字符串
   *
   */
    public static <T> String EntityToString(T data) {
      String str = JSON.toJSONString(data);
      return str;
    }
}  


来自为知笔记(Wiz)  
页: [1]
查看完整版本: 记一次未解决的异常:java.lang.NoClassDefFoundError: net/sf/json/JSONObject