我正在尝试使用内置的HTTP服务器从命令行运行一个简单的泽西应用程序。
根据各种教程,我将我的应用程序设置为这样:
src/main/java/net/wjlafrance/jerseyfun/App.java:
package net.wjlafrance.jerseyfun;
import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.core.Response;
import java.io.IOException;
import com.sun.jersey.api.container.httpserver.HttpServerFactory;
/**
* Hello world!
*
*/
@Path("/hello")
public class App {
public static void main(String[] args) {
System.out.println("Starting HTTP server..");
try {
HttpServerFactory.create("http://localhost:9998/").start();
} catch (IOException ex) {
System.err.println(ex);
}
}
@GET
public Response getMessage() {
String output = "It works!";
return Response.status(200).entity(output).build();
}
}
src/main/WEB app/we b-INF/WEB . XML:
<web-app id="WebApp_ID" version="2.4"
xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>Restful Web Application</display-name>
<servlet>
<servlet-name>jersey-serlvet</servlet-name>
<servlet-class>com.sun.jersey.spi.container.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>com.sun.jersey.config.property.packages</param-name>
<param-value>net.wjlafrance.jerseyfun</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>jersey-serlvet</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>
当我运行mvn清洁包exec: java-Dexec.mainClass=net.wjlafrance.jerseyfun.App
时,我看到这样的输出:
Starting HTTP server..
Apr 29, 2013 9:12:11 AM com.sun.jersey.api.core.ClasspathResourceConfig init
INFO: Scanning for root resource and provider classes in the paths:
C:\cygwin\home\wlafrance\bin\apache-maven-3.0.5/boot/plexus-classworlds-2.4.jar
Apr 29, 2013 9:12:11 AM com.sun.jersey.server.impl.application.WebApplicationImpl _initiate
INFO: Initiating Jersey application, version 'Jersey: 1.17 01/17/2013 03:31 PM'
Apr 29, 2013 9:12:11 AM com.sun.jersey.server.impl.application.RootResourceUriRules <init>
SEVERE: The ResourceConfig instance does not contain any root resource classes.
[WARNING]
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.codehaus.mojo.exec.ExecJavaMojo$1.run(ExecJavaMojo.java:297)
at java.lang.Thread.run(Thread.java:662)
Caused by: com.sun.jersey.api.container.ContainerException: The ResourceConfig instance does not contain any root resource classes.
at com.sun.jersey.server.impl.application.RootResourceUriRules.<init>(RootResourceUriRules.java:99)
at com.sun.jersey.server.impl.application.WebApplicationImpl._initiate(WebApplicationImpl.java:1331)
at com.sun.jersey.server.impl.application.WebApplicationImpl.access$700(WebApplicationImpl.java:168)
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:774)
at com.sun.jersey.server.impl.application.WebApplicationImpl$13.f(WebApplicationImpl.java:770)
at com.sun.jersey.spi.inject.Errors.processWithErrors(Errors.java:193)
at com.sun.jersey.server.impl.application.WebApplicationImpl.initiate(WebApplicationImpl.java:770)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:172)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:264)
at com.sun.jersey.api.container.ContainerFactory.createContainer(ContainerFactory.java:246)
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:117)
at com.sun.jersey.api.container.httpserver.HttpServerFactory.create(HttpServerFactory.java:92)
at net.wjlafrance.jerseyfun.App.main(App.java:22)
... 6 more
显然,我的服务器配置错误。有人能给我指出正确的方向吗?
您应执行以下操作:
final com.sun.jersey.api.core.ResourceConfig packagesResourceConfig = new com.sun.jersey.api.core.ResourceConfig("net.wjlafrance.jerseyfun") ;
HttpServerFactory.create("http://localhost:9998/", packagesResourceConfig).start();
看到错误消息中的这行“ResourceConfig实例不包含任何根资源类”了吗?您没有为http服务器设置任何资源。我会用这种方法:
GrizzlyHttpServerFactory.createHttpServer("http://localhost:9998/", new Application());
新的应用程序()将为http服务器创建一个新的ResourceConfig类。你应该检查球衣的文件,这只是一个简单的类,其中包含一个java包。我的ResourceConfig是这样的:import org . glassfish . jersey . server . resource config;
public class Application extends ResourceConfig {
public Application() {
packages("ftp.recourse");
}
}
虽然ftp.recourse软件包包含所有路径和操作,如GET,PUT,POST。请查看球衣的官方文档以获取更多详细信息。希望这会有所帮助
对于Jersey 1.x,@pakOverflow的答案指向正确的方向。这里是我成功使用的完整代码。而不依赖于Grizly1或Grizly2等。
import java.io.IOException;
import java.util.HashSet;
import java.util.Set;
import javax.ws.rs.core.Application;
import com.sun.jersey.api.container.httpserver.HttpServerFactory;
import com.sun.jersey.api.core.DefaultResourceConfig;
import com.sun.jersey.api.core.ResourceConfig;
public class WineryUsingHttpServer {
public static void main(String[] args) throws IOException {
ResourceConfig packagesResourceConfig = new DefaultResourceConfig();
Application app = new Application() {
@Override
public Set<Class<?>> getClasses() {
Set<Class<?>> res = new HashSet<>();
res.add(org.example.MainResource.class);
return res;
}
};
packagesResourceConfig.add(app);
HttpServerFactory.create("http://localhost:8080/", packagesResourceConfig).start();
}
}
我的网络服务有一些问题,我试图从网络服务接收我的电影列表,但总有这个严重的错误。 这是我的模型: 还有一把刀和一个门面,但它们工作得很好! 以下是我的服务: 方法“onemovie”和“count”运行良好,我将在浏览器中显示xml,但当我调用“XMLForApp”时,服务器抛出异常。 我的客户在这里: 例外情况是:
我正在学习JAX-RS,在发出生成JSON的GET请求时,出现HTTP Status 500内部服务器错误。XML工作正常。 我搜索了其他问题,但找不到解决方案。这可能是因为我目前缺乏知识。然而,据我所知,有人建议我的项目在构建路径中缺少一个JAR。 我没有使用Maven。我刚刚在Eclipse中创建了一个动态Web应用程序,并将JAX-RS/jerjar添加到我的WEB-INF/lib目录中,并
问题内容: 我一直坚持使用jersey库为RESTful Web服务创建gradle项目。项目配置应该能够在码头应用服务器内启动服务。我已经找到了资源:https : //github.com/ziroby/jetty-gradle-hello- world 该解决方案的我的问题是,它使用的是球衣的过时版本。我至少需要版本2(最好是最新的2.14)。我试图在Maven Central上搜索新版本,
当我尝试在任何一点使用定位器时,我仍然无法创建我使用locator.create(mything.class)方法在AbstractBinder中注册的东西的实例。 我确信它们是正确绑定的,因为它们通过@inject字段注释被正确地注入到我的资源类中。 不同的是,Jersey/HK2框架正在实例化我的资源类(正如预期的那样,因为它们在我的包扫描路径中),但我似乎无法通过代码来利用ServiceLo
我是JavaWeb服务的新手,我正在努力解决一个基本问题。 在找到了一堆过时的示例后,我设法找到了一些使用XML的方法,但是当我要求它返回JSON时,相同的代码就不起作用了。 起初我认为它缺少JSON格式化程序,但JAXB应该负责从POJO到JSON的转换,所以我认为这不是问题所在。 Tomcat中引发的错误是: 网状物。XML Todo.java TodoResource。Java语言 你知道为
我试图在一个预构建项目中设置Swagger Swagger UI,该项目既不使用泽西2容器Servlet,也不使用官方文档中所述的过滤器配置(带web.xml)。 我的主类是这样的: 我想使用包扫描和Swagger用户界面来跟踪我的应用编程接口。我找到的所有答案都说你应该扩展类,或者使用带有文件的过滤器配置。请给我一个提示,告诉我如何将Swagger添加到给我的现有项目中。 我是新来JAX的,有点