在现有的非maven Web应用程序中设置JAX RS

时间:2017-07-05 07:42:19

标签: java web-services rest netbeans

我试图将jax rs with jersey添加到我的webapplication中,该应用程序已经使用了jax ws。它适用于纯文本get和put,但不适用于多部分表单数据。

我正在使用

  • NetBeans 8.2
  • JDK 8
  • JAX WS 2.2.6
  • Metro 2.0

以下我从jersey主页非maven用户zip文件中获取的休息/球衣库:

aopalliance-repackaged-2.5.0-b32.jar
hk2-api-2.5.0-b32.jar
hk2-locator-2.5.0-b32.jar
hk2-utils-2.5.0-b32.jar
javassist-3.20.0-GA.jar
javax.annotation-api-1.2.jar
javax.inject-2.5.0-b32.jar
javax.servlet-api-3.0.1.jar
javax.ws.rs-api-2.0.1.jar
jersey-client-2.25.1.jar
jersey-common-2.25.1.jar
jersey-container-grizzly2-http-2.25.1.jar
jersey-container-grizzly2-servlet-2.25.1.jar
jersey-container-jdk-http-2.25.1.jar
jersey-container-jetty-http-2.25.1.jar
jersey-container-netty-http-2.25.1.jar
jersey-container-servlet-2.25.1.jar
jersey-container-servlet-core-2.25.1.jar
jersey-container-simple-http-2.25.1.jar
jersey-guava-2.25.1.jar
jersey-media-jaxb-2.25.1.jar
jersey-media-multipart-2.25.1.jar
jersey-netty-connector-2.25.1.jar
jersey-server-2.25.1.jar
jetty-continuation-9.2.14.v20151106.jar
jetty-http-9.2.14.v20151106.jar
jetty-io-9.2.14.v20151106.jar
jetty-server-9.2.14.v20151106.jar
jetty-util-9.2.14.v20151106.jar
mimepull-1.9.6.jar
oro-2.0.8.jar
osgi-resource-locator-1.0.1.jar
validation-api-1.1.0.Final.jar

我通过netbeans rest向导添加了一个ServiceResource类。哪个不能正常工作我必须添加一个配置类并手动将服务类添加到配置资源

@javax.ws.rs.ApplicationPath("api")
public class RestConfig extends Application{

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> resources = new java.util.HashSet<>();
        addRestResourceClasses(resources);
        return resources;
    }

    private void addRestResourceClasses(Set<Class<?>> resources) {
        resources.add(ws.rest.UploadResource.class);
    }
}

所以我可以使用从向导生成的简单代码,并通过get在文档中添加servlet之后收到一个文本,如下所示:

<servlet>
        <servlet-name>rest_let</servlet-name>
        <servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
        <init-param>
            <param-name>com.sun.jersey.config.property.packages</param-name>
            <param-value>ws.rest.RestConfig</param-value>
        </init-param>
        <load-on-startup>1</load-on-startup>
    </servlet>
    <servlet-mapping>
        <servlet-name>rest_let</servlet-name>
        <url-pattern>/api/</url-pattern>
    </servlet-mapping>

所以我能够访问该服务。但在我的资源中添加另一种方法之后:

@Path("upload")
public class UploadResource {

    @Context
    private UriInfo context;

    public UploadResource() {
    }


    @GET
    @Produces(MediaType.TEXT_PLAIN)
    public String getText() {
        return "test";
    }


    @PUT
    @Consumes(MediaType.TEXT_PLAIN)
    public void putText(String content) {
    }
    @POST
    @Consumes(MediaType.MULTIPART_FORM_DATA)
    @Path("fup")
    public Response uploadFile(@FormDataParam("file") InputStream uploadInputStream, @FormDataParam("file") FormDataContentDisposition fileDetail) 
    {
            return Response.status(Response.Status.OK).entity("as expected").build();
    }
}

我总是得到这个异常堆栈:

05-Jul-2017 09:35:23.059 SEVERE [http-nio-8084-exec-22] org.apache.catalina.core.ApplicationContext.log StandardWrapper.Throwable
 java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:274)
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:221)
    at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:453)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:387)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:837)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

05-Jul-2017 09:35:23.059 SEVERE [http-nio-8084-exec-22] org.apache.catalina.core.StandardWrapperValve.invoke Allocate exception for servlet ws.rest.RestConfig
 java.lang.IllegalStateException: The resource configuration is not modifiable in this context.
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:274)
    at org.glassfish.jersey.server.ResourceConfig$ImmutableState.register(ResourceConfig.java:221)
    at org.glassfish.jersey.server.ResourceConfig.register(ResourceConfig.java:453)
    at org.glassfish.jersey.servlet.WebComponent.<init>(WebComponent.java:387)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:177)
    at org.glassfish.jersey.servlet.ServletContainer.init(ServletContainer.java:369)
    at javax.servlet.GenericServlet.init(GenericServlet.java:158)
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1231)
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:837)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:106)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:142)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:79)
    at org.apache.catalina.valves.AbstractAccessLogValve.invoke(AbstractAccessLogValve.java:616)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:88)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:518)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1091)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:673)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.doRun(NioEndpoint.java:1500)
    at org.apache.tomcat.util.net.NioEndpoint$SocketProcessor.run(NioEndpoint.java:1456)
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.lang.Thread.run(Thread.java:748)

配置中有什么问题吗?我没有找到一个很好的教程来安排没有Maven的休息,所以我尝试自己在网上进行大量搜索,这很有帮助,但现在我被卡住了。它也让我感到烦恼,因为我已经在Maven项目中尝试了同样的工作,它没有问题。

0 个答案:

没有答案