Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/304.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
NoClassDefFoundError:javax/ws/rs/WebApplicationException_Java_Exception_Jax Rs_Noclassdeffounderror_Netbeans 8 - Fatal编程技术网

NoClassDefFoundError:javax/ws/rs/WebApplicationException

NoClassDefFoundError:javax/ws/rs/WebApplicationException,java,exception,jax-rs,noclassdeffounderror,netbeans-8,Java,Exception,Jax Rs,Noclassdeffounderror,Netbeans 8,我有一个使用JAX-RS使用api的类: public class PackageProcessor implements IPackageProcessor { public PackageProcessor() { } @Override public PackageDimensions getPackageDimensions(byte[] image) throws PackageProcessorException { Imag

我有一个使用JAX-RS使用api的类:

public class PackageProcessor implements IPackageProcessor {

    public PackageProcessor() {   
    }

    @Override
    public PackageDimensions getPackageDimensions(byte[] image) throws PackageProcessorException {
        Image imageBase64 = toBase64(image);
        PackageDimensions dimensions = null;
        try {
            Client client = ClientBuilder.newClient();
            dimensions = client.target(BASE_URI)
                    .path(DIMENSIONS_PATH)
                    .request(MediaType.APPLICATION_JSON)
                    .accept(MediaType.APPLICATION_JSON)
                    .post(Entity.json(imageBase64))
                    .readEntity(PackageDimensions.class);

        } catch (WebApplicationException ex) {
            throw new PackageProcessorException("Error al procesar la imagen", ex);
        }

        return dimensions;
    }

}
我尝试在Java应用程序中使用它,只是为了测试它是否有效:

public static void main(String[] args)  {
    try {
        IPackageProcessor p = new PackageProcessor();

        Path path = Paths.get("path");
        byte[] data = Files.readAllBytes(path);
        PackageDimensions d = p.getPackageDimensions(data);

    } catch (IOException ex) {
        Logger.getLogger(Prueba.class.getName()).log(Level.SEVERE, null, ex);
    } catch (PackageProcessorException ex) {
        Logger.getLogger(Prueba.class.getName()).log(Level.SEVERE, null, ex);
    }
}
但是,当我尝试运行此应用程序时,在执行
新PackageProcessor()
的行中出现以下错误:

我明白它的意思,但我不会调用任何将其抛出构造函数的东西,是吗

我不想在java应用程序中向JAX-RS添加依赖项,这就是我在自己的异常类
PackageProcessorException
中封装一个可能的
WebApplicationException
。我想那就足够了

我做错了什么

我正在使用Netbeans,如果这能改变什么的话

更新 感谢您的解释,这些解释似乎是正确的,但如果是这样的话,我的java应用程序就无法忽略
PackageProcessor
的实现


这正是我所希望的。

当Java加载类时,它通过类文件工作,并确保在类被视为加载之前可以加载所有必需的类型


在这种情况下,您的
PackageProcessor
需要
WebApplicationException
,因为它在
catch
子句中提到。Java试图加载整个
PackageProcessor
,但失败了,因为在类路径上找不到
WebApplicationException

您的类
PackageProcessor
使用
WebApplicationException
类,因此在创建类实例时必须初始化该类

更详细的内容也一样:

:您的类在创建其实例时初始化

T是一个类,并且创建了T的一个实例

初始化时,它会尝试加载它引用的所有类,包括
WebApplicationException
(由代码引用)。由于找不到此类,因此发生错误


在异常类中包装
WebApplicationException
实例是不够的,因为首先必须捕获
WebApplicationException
,要做到这一点,您需要让类(即之前加载它)。

在编译时,您的程序可能会忽略
PackageProcessor
的实现,但是在运行时,您必须在类路径中具有某些类(实现依赖项,如
WebApplicationException
),因此答案是“是”和“否”。
Exception in thread "main" java.lang.NoClassDefFoundError: javax/ws/rs/WebApplicationException
    at prueba.Prueba.main(Prueba.java:25)
Caused by: java.lang.ClassNotFoundException: javax.ws.rs.WebApplicationException
    at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
    at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
    at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
    ... 1 more