如何从Java客户端调用我的REST服务?

时间:2013-11-29 00:40:33

标签: rest maven java-ee glassfish jax-rs

我想在GlassFish中的EAR中部署一些模块,并从java客户端调用服务。

有一个EJB模块(“ejbees.jar”)包含这些类。

@Stateless
@Path("hello")
public class HelloREST{

    @GET
    @Produces({MediaType.TEXT_PLAIN})
    public String sayHello(){
        return "Hello REST";
    }
}

@ApplicationPath("example/*") 
public class ApplicationConfig extends Application{

    @Override
    public Set<Class<?>> getClasses() { 
        Set<Class<?>> c = new HashSet();
        c.add(HelloREST.class);
        return c;
}

EJB模块和其他一些JAR打包在一个名为“simpleapp.ear”的EAR中,并部署到GlassFish。 GlasFish使用一个模块“ejbees.jar”和一个组件“HelloREST”列出了应用程序“simpleapp”。

这是我到目前为止致电HelloREST的代码。

public void callHelloRest(String uri){
    WebTarget wr = ClientBuilder.newClient.target(uri);
    String hellomessage = wr.path("hello").request(MediaType.TEXT_PLAIN).get(String.class);//Here comes HTTP 404 not found error.
}

我试过的URI:

http://localhost:8080/example
http://localhost:8080/simpleapp/example
http://localhost:8080/simpleapp/ejbees/example
http://localhost:8080/ejbees/simpleapp/example

但我总是得到一个http 404找不到错误。正确的URI应该如何?或者在EAR内部的EJB中包装REST服务是错误的吗?有没有办法向GlassFish询问REST服务的URI?

提前致谢。

1 个答案:

答案 0 :(得分:0)

我的ApplicationConfig类看起来像这样:

@ApplicationPath("rest")
public class ApplicationConfig extends Application {
}

REST服务如下所示:

@Stateless
@Path("/hello")
public class HelloRest {         
    @GET
    @Path("/getHello")
    public String getHello(@QueryParam(value = "name") String name) throws Exception
        return "Hello, " + name;
    }
}

现在您可以像访问它一样访问它:

http://localhost:8080/rest/hello/getHello?name=RAM

没有测试过这个例子,但这几乎就像我在我的应用程序中使用它一样。