首页 > 解决方案 > 计算器宁静错误部署

问题描述

“uts.dae.model.rest.Calculadora”类的来源

 package uts.dae.model.rest;

 import javax.ejb.Stateless;
 import javax.ws.rs.GET;
 import javax.ws.rs.Path;
 import javax.ws.rs.QueryParam;

  /**
  *
  * @author x2010s
  */

  @Stateless

  @Path("/calculadora")


  public class Calculadora {


  @GET 
  public String Suma(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
  return Double.toString($Suma(num1,num2));
 }
  @Path("calculadora/suma")
    double $Suma(double num1,double num2) {
    double resultado;
    resultado = num1 + num2;
    return resultado; 
 }

@GET 
public String Resta(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
return Double.toString($Resta(num1,num2));
 }
 @Path("calculadora/resta")
    double $Resta(@QueryParam("num1") double num1,@QueryParam("num2") double num2) {
    double resultado;
    resultado = num1 - num2;
    return resultado;

 }

 @GET    
 public String Multiplicacion(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
 return Double.toString($Multiplicacion(num1,num2));
  } 
 @Path("calculadora/multiplicacion")
   double $Multiplicacion(double num1,double num2) {
    double resultado;
    resultado = num1 * num2;
    return resultado;

}  



 @GET 
 public String Division(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
 return Double.toString($Division(num1,num2));
 }
 @Path("calculadora/Division")
  double $Division(double num1,double num2) {
    double resultado;
    resultado = num1 / num2;
    return resultado;

}


@GET 
public String Modulo(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
 return Double.toString($Modulo(num1,num2));
 }
@Path("calculadora/Modulo")
double $Modulo(@QueryParam("num1") double num1,@QueryParam("num2") double num2) {
    double resultado;
    resultado = num1 % num2;
    return resultado;

}
}

当我部署时,如果它们具有不同的 url,则会发生以下错误:

[[警告] 子资源模型 double uts.dae.model.rest.Calculadora.$Suma(double,double) 必须是公共范围的,否则该方法将被忽略;source='class uts.dae.model.rest.Calculadora', [警告] 一个子资源模型,double uts.dae.model.rest.Calculadora.$Multiplicacion(double,double),必须是公共范围的,否则方法被忽略;source='class uts.dae.model.rest.Calculadora', [警告] 子资源模型 double uts.dae.model.rest.Calculadora.$Resta(double,double) 必须是公共范围的,否则该方法被忽略;source='class uts.dae.model.rest.Calculadora', [警告] 一个子资源模型,double uts.dae.model.rest.Calculadora.$Modulo(double,double),必须是公共范围的,否则该方法被忽略;source='class uts.dae.model.rest.Calculadora', [警告] 子资源模型,double uts.dae.model.rest.Calculadora.$Division(double,double),必须是公共范围的,否则该方法将被忽略;source='class uts.dae.model.rest.Calculadora', [FATAL] 资源模型具有用于 HTTP 方法 GET 的不明确(子)资源方法以及由“@Consumes”和“@Produces”定义的输入 mime 类型Java 方法 public java.lang.String uts.dae.model.rest.Calculadora.Suma(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Resta(double,double) 的注解匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型在 Java 方法 public java.lang.String uts.dae.model 中具有由“@Consumes”和“@Produces”注释定义的 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法.rest.Calculadora.Suma(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Multiplicacion(double,double) 匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“ Java 方法 public java.lang.String uts.dae.model.rest 处的 @Produces" 注释。Calculadora.Suma(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Division(double,double) 匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“在 Java 方法 public java.lang.String uts.dae.model.rest.Calculadora.Suma(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double, double) 在匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“ Java 方法 public java.lang.String uts.dae.model.rest.Calculadora.Resta(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Multiplicacion(double, double) 在匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型在 Java 方法 public java.lang.String uts.dae.model 中具有由“@Consumes”和“@Produces”注释定义的 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法.rest.Calculadora.Resta(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Division(double,double) 匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“ Java 方法公共 java.lang.String uts.dae.model.rest.Calculadora 处的 @Produces" 注释。Resta(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double,double) 匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“在 Java 方法 public java.lang.String uts.dae.model.rest.Calculadora.Multiplicacion(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Division(double, double) 在匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型具有用于 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法,如“@Consumes”和“ Java 方法中的 @Produces" 注释 public java.lang.String uts.dae.model.rest.Calculadora.Multiplicacion(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double, double) 在匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。source='org.glassfish.jersey.server.model.RuntimeResource@1f7972f', [致命] 资源模型在 Java 方法 public java.lang.String uts.dae.model 中具有由“@Consumes”和“@Produces”注释定义的 HTTP 方法 GET 和输入 mime 类型的模糊(子)资源方法.rest.Calculadora.Division(double,double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double,double) 匹配正则表达式 /calculadora。这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。来源='org.glassfish.jersey.server.model.RuntimeResource@1f7972f'] double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double,double) 在匹配正则表达式 /calculadora. 这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。来源='org.glassfish.jersey.server.model.RuntimeResource@1f7972f'] double) 和 public java.lang.String uts.dae.model.rest.Calculadora.Modulo(double,double) 在匹配正则表达式 /calculadora. 这两种方法产生和使用完全相同的 mime 类型,因此它们作为资源方法的调用总是会失败。来源='org.glassfish.jersey.server.model.RuntimeResource@1f7972f']

标签: javarestweb-servicesrestful-url

解决方案


将所有 @Path 注释从以 '$' 作为前缀的方法移动到这些公共方法,如下所示:

@GET
@Path("calculadora/Modulo")
public String Modulo(@QueryParam("num1") double num1,@QueryParam("num2") double num2)    {
    return Double.toString($Modulo(num1,num2));
}

double $Modulo(@QueryParam("num1") double num1,@QueryParam("num2") double num2) {
    double resultado;
    resultado = num1 % num2;
    return resultado;
}

也看看这个SO 帖子。

问题是,由于所有公共方法都是使用@GET 注释的资源方法,因此它们没有@Path 注释并且它们的参数列表是相同的,如果您将http GET 请求发送到“/calculadora” url应该调用哪个方法存在歧义,因此将 @Path 注释移动到公共方法将解决问题。


推荐阅读