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

标签 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 并不能说明什么。我做错了什么?

最佳答案

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

关于java - 我无法使用 TomEE 和 Eclipse 发布简单的 JAX-RS 服务 (IllegalArgumentException),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38075612/

相关文章:

java - 我必须在 JNLP 中的哪里提及服务器 URL?

java - 为什么我的 PlayFramework 应用程序出现很长的超时?

升级到 Ubuntu 13.10 后 Eclipse 菜单不显示

java - 尝试使用向导导出 Eclipse 产品时出错

java - RSA key key 静态生成

java - 什么是 Java 中的鸭子类型(duck typing)的示例?

java - 如何动态地将不同的JComboBox放入JTable的每一行中

java - 无法访问 WSDL 端点

java - 如何通过分段文件上传接受表单参数

java - Jersey 中单个值的多个 @QueryParam 键