我无法使用TomEE和Eclipse发布简单的JAX-RS服务(IllegalArgumentException)

时间:2016-06-28 11:58:00

标签: java eclipse jax-rs cxf

问题似乎是一些糟糕的错误信息。

我在eclipse中创建了一个动态Web应用程序项目,运行时是TomEE + 1.7.2

所以这是发布者

package study;

import java.io.IOException;
import java.net.InetSocketAddress;
import javax.ws.rs.ext.RuntimeDelegate;
import com.sun.net.httpserver.HttpHandler;
import com.sun.net.httpserver.HttpServer;

public class StandaloneJaxRsServer {

    public static void main(String[] args) throws IOException {
        HttpServer server = HttpServer.create(new InetSocketAddress(
                "localhost", 8765), 8);
        HttpHandler requestHandler = RuntimeDelegate.getInstance()
                .createEndpoint(new JaxRSApplication(), HttpHandler.class); //<<<<< line 15
        server.createContext("/jaxrs/", requestHandler);
        server.start();
    }
}

这是应用

package study;

import java.util.HashSet;
import java.util.Set;

import javax.ws.rs.ApplicationPath;
import javax.ws.rs.core.Application;

@ApplicationPath(value="/jaxrs")
public class JaxRSApplication extends Application{

    @Override
    public Set<Class<?>> getClasses() {
        Set<Class<?>> set = new HashSet<>();
        set.add(NotSingletonResource.class);
        return set ;
    }
//
//  @Override
//  public Set<Object> getSingletons() {
//      Set<Object> set = new HashSet<>();
//      set.add(new SingletonResource());
//      return set ;
//  }

}

这是资源

package study;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;

@Path("/notSingletonResource")
public class NotSingletonResource {

    private volatile int counter = 0;

    @GET
    @Produces({MediaType.TEXT_HTML})
    public String getHello() {
        return "Not singleton resource " + counter++;
    }

}

当我尝试运行StandaloneJaxRsServer.main()时,我得到了

Exception in thread "main" java.lang.IllegalArgumentException
    at org.apache.cxf.jaxrs.impl.RuntimeDelegateImpl.createEndpoint(RuntimeDelegateImpl.java:104)
    at study.StandaloneJaxRsServer.main(StandaloneJaxRsServer.java:15)

但是,IllegalArgumentException并没有多大帮助。我做错了什么?

2 个答案:

答案 0 :(得分:1)

RuntimeDelegate接口的javadoc状态“抛出:IllegalArgumentException - 如果application为null或者不支持请求的端点类型。”对于JAX-RS应用程序,我认为您应该使用org.apache.cxf.jaxrs.JAXRSServerFactoryBean,并使用创建端点的结果来设置服务器。

答案 1 :(得分:0)

我不会接受我自己的回答,我只想在这里留下一些有用的信息,以防有人需要。

TomEE +没有使这些工作的库。相反,我所做的是从我的eclipse项目中删除所有TomEE +依赖项,然后我根据@lmiguelmh回答这个问题将其转换为maven项目以包含this dependency

Latest Jersey example does not work

然后我刚刚添加了这些球衣库

enter image description here

我会在接受答案之前稍微等一下,因为我真的想要一个更好的答案。我遵循“Java Web Services,Up and Running”一书中描述的步骤,所以我认为人们真的需要知道这些信息。