首页 > 解决方案 > 尝试将对象从项目传递到 API 休息时出现 NoClassDefFoundError

问题描述

我的一个项目有问题。这是有关它的更多信息:

我们的老师给了我们一个包含HadoopHbase的虚拟机(ubuntu) ,已经设置好了。目标很简单:我们有一个Rest apiwith tomcat 8.5RestServer项目,web 项目),它拦截GET请求(我们的老师只希望我们有GET请求,显然是出于安全原因),我们需要根据url(例如:/students/{id}/{program}将返回此特定学生(id)和学习年份(程序)的成绩摘要,Hbase 表上的数据选择和 mapreduce 作业。我们有一个BigData项目,其中包含用于扫描和过滤Hbase表的简单 java 代码。这是该项目的简短摘要。

这是我们用于这个项目的结构:项目结构

这里是执行逻辑:我们url在浏览器中输入我们的,在我们启动我们的RestServer项目后(right click on RestServer-> Run as-> Run on server。这是我们这样做之后得到的:浏览器中的 RestServer

简单的部分到此为止。我们在上图中看到的链接仅用于演示,它们不是我们在这个项目中需要做的。这个想法是拦截GET来自api的请求,在处理请求的方法中,获取参数,将它们传递给我们响应对象的构造函数的调用,并将对象作为响应返回(将转换为a JSON) . 这个想法是从BigData项目中获取这个对象(对我们GET请求的响应) 。所以我们需要让这两个项目进行交流。

这是拦截请求的代码:

    @GET
    @Path("/students/{id}/{program}")
    @Produces(MediaType.APPLICATION_JSON)
    public Response getStudent(@PathParam("id") String ID,@PathParam("program") String program) throws IOException {
        System.out.println("ID : "+ID+" program"+program);
        if (ID != null) {
            System.out.println("Non nul");
            return Response.ok(new Response1(ID,program), MediaType.APPLICATION_JSON).build();
        } else {
            return Response.status(Response.Status.NOT_FOUND).entity("Student not found: " + ID).build();
        }
    }

Response1(ID,program)对象在BigData项目中构建。当我直接从BigData项目执行代码时(as Java application),我绝对没有问题,没有错误。但想法是使用BigData项目中的代码来构建Result1对象,并将其“归还”给Rest api. 问题就在这里,我尝试了所有我在互联网上知道和找到的东西,但我无法解决这个问题。当我输入我的网址时,(即:)http://localhost:8080/RestServer/v1/StudentService/students/2005000033/L3我收到此错误:错误

根据我的研究,我发现(如果我错了,请纠正我)程序ByteArrayComparableruntime. 我查看了我能找到的所有链接,这是我试图解决的问题:

我不知道我现在能做什么。我的一些朋友也有同样的问题,即使我们没有相同的代码,所以似乎问题来自配置。在这一点上,我没有执行任何 mapreduce 工作,我只是用Hbase java api一些过滤器来扫描表。

感谢您阅读我,我希望我能找到答案。我会继续测试和搜索,如果我发现了什么,我会编辑这篇文章。

这是Response1该类的代码:

package bdma.bigdata.project.rest.core;

import java.io.IOException;
import org.apache.hadoop.hbase.filter.Filter.*;

public class Response1 {
    private StudentBD student;
    private Semester semesters;

    public Response1(String id, String program) throws IOException {
        System.out.println("Building student");
        this.student = new StudentBD(id);
        System.out.println("Building semester");
        this.semesters = new Semester(id,program);
    }

    @Override
    public String toString() {
        return student.toString()+" "+semesters.toString();
    }

    public static void main(String[] args) throws IOException {
        Response1 r = new Response1("2005000100", "L1");
        System.out.println("AFFICHAGE TEST");
        System.out.println(r);
    }
}

编辑

我终于设法解决了我的问题。我把解决方案放在这里,如果它可以在未来帮助与我相同情况的人。一旦你链接了你的 2 个项目(在项目Java Build Path的属性部分Rest api),你需要去,仍然在属性中,在部署程序集中(上图Java Build Path)。在这里,您单击Add...并添加所有 jar 文件。

标签: javaresthadoophbasenoclassdeffounderror

解决方案


推荐阅读