我应该添加多少罐来使应用程序正常工作?

时间:2016-11-23 16:29:25

标签: java json restlet

我正在研究" Restlet in action"书。我不使用任何IDE,Maven或其他东西。只是一个纯粹的命令行。问题显示在资源类:

import java.io.IOException;

import org.restlet.data.Reference;
import org.restlet.ext.jackson.JacksonRepresentation;
import org.restlet.representation.Representation;
import org.restlet.resource.Get;
import org.restlet.resource.Put;
import org.restlet.resource.ServerResource;

public class MailServerResource extends ServerResource {

    @Get
    public Representation toJson() {
        // Create the mail bean
        Mail mail = new Mail();
        mail.setStatus("received");
        mail.setSubject("Message to self");
        mail.setContent("Doh!");
        mail.setAccountRef(new Reference(getReference(), "..").getTargetRef()
                .toString());

        // Wraps the bean with a Jackson representation
        return new JacksonRepresentation<Mail>(mail);
    }

    @Put
    public void store(Representation rep) throws IOException {
        // Parse the JSON representation to get the mail bean
        JacksonRepresentation<Mail> mailRep = new JacksonRepresentation<Mail>(
                rep, Mail.class);
        Mail mail = mailRep.getObject();

       // Output the JSON element values
        System.out.println("Status: " + mail.getStatus());
        System.out.println("Subject: " + mail.getSubject());
        System.out.println("Content: " + mail.getContent());
        System.out.println("Account URI: " + mail.getAccountRef());
    }
}

可以编译包含此类的应用程序。但我有一个运行时异常,表明缺少库。每次我添加缺少的库时,我都会遇到新的和新的异常,迫使我添加新的和新的库。这似乎无穷无尽。例如:

  1. 第一次编译和运行应用程序的结果:好的。尝试从浏览器获取资源时出现运行时错误:
  2. org.restlet.resource.ResourceException:内部服务器错误(500)引起:java.lang.NoClassDefFoundError:com / fasterxml / jackson / core / JsonFactory

    1. 将com.fasterxml.jackson.core.jar添加到编译命令并运行命令后的结果:确定。运行时错误:
    2. 由java.lang.NoClassDefFoundError引起的同样错误:com / fasterxml / jackson / dataformat / smile / SmileFactory

      1. 将com.fasterxml.jackson.smile.jar添加到编译命令并运行命令后的结果:确定。运行时错误:
      2. 由java.lang.NoClassDefFoundError引起的同样错误:com / fasterxml / jackson / databind / ObjectMapper

        1. 将com.fasterxml.jackson.databind.jar添加到编译命令并运行命令后的结果:确定。运行时错误:
        2. 由java.lang.NoClassDefFoundError引起的同样错误:com / fasterxml / jackson / dataformat / xml / XmlMapper

          它看起来很奇怪,因为Restlet框架中缺少这个库。所以我希望不应该在书中使用它。但无论如何我还要进一步添加从网上下载的这个库:

          1. 将jackson-dataformat-xml-2.8.5.jar添加到编译命令并运行命令后的结果:OK。运行时错误:
          2. 由java.lang.NoClassDefFoundError引起的同样错误:com / fasterxml / jackson / dataformat / yaml / YAMLFactory

            我放弃并向你寻求帮助......

2 个答案:

答案 0 :(得分:2)

嗯,确切地说,你有构建工具来管理传递依赖,如Gradle,Ant + Ivy或Maven(从最差到最差的顺序)。

如果您想坚持纯命令行,请阅读您使用的库的文档,以查看它们具有哪些依赖项,或者它们是否提供包含所有依赖项的分发包,然后添加所有这些,您应该没问题。< / p>

答案 1 :(得分:1)

根据导入,org.restlet.jarorg.restlet.ext.jackson.jar都是必需的。第一个用于基础框架,第二个用于支持jackson功能。

也许您还需要其他罐子,但您可以在从restlet下载的zip文件中找到所有这些罐子。下载并解压缩它,jars位于lib文件夹中。