具有本机@WebService支持的可嵌入Web服务器,作为Endpoint.publish的替代方案

Tho*_*sen 7 java web-services endpoint

我花了一些时间来调查Endpoint.publish可以做什么和不能做什么,看起来你很快就进入了无证领域.

如果您构建一个简单的独立应用程序,它使用Endpoint.publish公开一个或多个@WebService注释类,然后您遇到无法再使用Endpoint.publish的情况(出于任何原因)什么是最简单的迁移路径?

我知道您可以使用sun-jaxws.xml和可选的Metro jar创建一个WAR,然后可以将其部署到嵌入式Web服务器(如Jetty或Winstone),但我喜欢简单的"拿这个类并在这个URL上公开它" Endpoint.publish()的API,没有任何XML或完整容器.

有没有办法做到这一点?

Gar*_*het 0

据说您可以通过 的实例com.sun.net.httpserver.HttpServer来自定义端点的 HTTP 行为。对 API 保持谨慎总是一个好主意,com.sun但根据您的具体情况,这可能是合适的。例如,有一个HttpsServer子类可用于提供 SSL。

过程似乎是:

  1. 用于HttpServer.create(new InetSocketAddress(listenPortNumber), waitQueueDepth)创建服务器实例。
  2. 用于server.createContext("/path")创建将托管端点的上下文。
  3. 使用 来创建端点Endpoint.create(new RpcLitEndpoint())。不清楚在哪里RpcLitEndpoint定义或是否严格要求;它可能是 Metro JAX-WS 的一部分。
  4. 调用endpoint.publish(context)以将端点与HttpServer(或HttpsServer) 实例关联。

完成后,使用endpoint.stopserver.stop关闭。

blogs.oracle.com 上还有一个博客条目描述了自定义网络传输的创建。它没有足够的细节让我通过快速浏览获得很好的理解,但也许你可以从中获得更多。