7

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

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

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

有没有好的方法来做到这一点?

4

1 回答 1

0

据说您可以通过一个实例来自com.sun.net.httpserver.HttpServer定义端点的 HTTP 行为。谨慎使用com.sunAPI 始终是一个好主意,但根据您的具体情况,它可能是合适的。例如,有一个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上还有一个博客条目,描述了自定义网络传输的创建。它没有足够的细节让我通过快速扫描获得很好的理解,但也许你可以从中得到更多。

于 2012-09-06T17:20:23.563 回答