线程“main”中的异常javax.ws.rs.InternalServerErrorException:HTTP 500 Erreur Interne de Servlet

问题描述 投票:0回答:1

我有一个java客户端来调用REST Web服务。如果我在java类中声明Path。一切都很好,即:那样:

@Path("/aqsensor")
@Produces(MediaType.TEXT_PLAIN)

public class CUManagerSensorImp {
@GET
@Path("/getQuality")
public String getQuality() {
        String quality;
        double average = getAverage();
        if (isBetween(average, 0, 39))
            quality = "Bonne qualité de l'air";
        else if (isBetween(average, 40, 79))
            quality = "Moyenne qualité de l'air";
        else
            quality = "Mauvaise qualité de l'air";

        return quality;
    }

    private double getAverage() {
        int v = (int) (Math.random() * 125);
        return v;

    }

    private boolean isBetween(double average, int min, int max) {

        if (average >= min && average <= max)
            return true;
        else
            return false;
    }

但如果我在界面中声明Path。像那样(接口代码):

@Path("/aqsensor")
@Produces(MediaType.TEXT_PLAIN)

public interface CUManagerSensor {
    @GET
    @Path("/getQuality")
    String getQuality();

这个接口实现:

public class CUManagerSensorImp implements CUManagerSensor{
@Override
public String getQuality() {
        String quality;
        double average = getAverage();
        if (isBetween(average, 0, 39))
            quality = "Bonne qualité de l'air";
        else if (isBetween(average, 40, 79))
            quality = "Moyenne qualité de l'air";
        else
            quality = "Mauvaise qualité de l'air";

        return quality;
    }

    private double getAverage() {
        int v = (int) (Math.random() * 125);
        return v;

    }

    private boolean isBetween(double average, int min, int max) {

        if (average >= min && average <= max)
            return true;
        else
            return false;
    }
}

我得到以下异常:

Exception in thread "main" javax.ws.rs.InternalServerErrorException: HTTP 500 Erreur Interne de Servlet
    at org.glassfish.jersey.client.JerseyInvocation.convertToException(JerseyInvocation.java:1074)
    at org.glassfish.jersey.client.JerseyInvocation.translate(JerseyInvocation.java:859)
    at org.glassfish.jersey.client.JerseyInvocation.lambda$invoke$1(JerseyInvocation.java:743)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:292)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:274)
    at org.glassfish.jersey.internal.Errors.process(Errors.java:205)
    at org.glassfish.jersey.process.internal.RequestScope.runInScope(RequestScope.java:390)
    at org.glassfish.jersey.client.JerseyInvocation.invoke(JerseyInvocation.java:741)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.method(JerseyInvocation.java:404)
    at org.glassfish.jersey.client.JerseyInvocation$Builder.get(JerseyInvocation.java:300)
    at airQUserAgent.UserImp.main(UserImp.java:25)

添加界面时问题出在哪里?在创建Web服务休息时是否禁止添加接口?或者您应该向web.xml文件添加一些说明吗?并提前谢谢你

java rest servlets jersey-client sca
1个回答
0
投票

JSR-339(RESTful Web Services 2.0的Java API)中,您可以在3.6注释继承的开头阅读:

JAX-RS注释可以用于超类或实现的接口的方法和方法参数。

所以可以使用注释,但只能在方法和方法参数中使用,而不能在接口本身使用。这很可能是因为它们会尝试创建一个用它注释的类型的实例。

因此,您的案例中的问题似乎是以下注释:

@Path("/aqsensor")
@Produces(MediaType.TEXT_PLAIN)

哪个应该保留在特定的类而不是接口。此外,同一节中的规范也在最后说明:

为了与其他Java EE规范保持一致,建议始终重复注释,而不是依赖注释继承。

因此,使用注释继承需要您自担风险。

© www.soinside.com 2019 - 2024. All rights reserved.