问题似乎是一些糟糕的错误信息。
我在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并没有多大帮助。我做错了什么?
答案 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
然后我刚刚添加了这些球衣库
我会在接受答案之前稍微等一下,因为我真的想要一个更好的答案。我遵循“Java Web Services,Up and Running”一书中描述的步骤,所以我认为人们真的需要知道这些信息。