我花了一些时间来调查Endpoint.publish可以做什么和不能做什么,看起来你很快就进入了未记录的领域。
如果您构建一个简单的独立应用程序,它使用Endpoint.publish公开一个或多个@WebService注释类,然后您遇到无法再使用Endpoint.publish的情况(出于任何原因)那么什么是最简单的迁移路径?
我知道您可以使用sun-jaxws.xml和可选的Metro jar创建一个WAR,然后可以将其部署到嵌入式Web服务器(如Jetty或Winstone),但我喜欢简单的“接受此类并将其公开这个URL“Endpoint.publish()的API没有任何XML或完整的容器。
有没有好办法呢?
答案 0 :(得分:0)
It's been said您可以使用com.sun.net.httpserver.HttpServer
的实例来自定义端点的HTTP行为。谨慎使用com.sun
API始终是个好主意,但根据您的具体情况,这可能是合适的。例如,有一个HttpsServer子类可用于提供SSL。
过程似乎是:
HttpServer.create(new InetSocketAddress(listenPortNumber), waitQueueDepth)
创建服务器实例。server.createContext("/path")
创建将托管端点的上下文。Endpoint.create(new RpcLitEndpoint())
创建端点。目前尚不清楚RpcLitEndpoint
的定义位置或是否严格要求;它可能是Metro JAX-WS的一部分。endpoint.publish(context)
将端点与HttpServer
(或HttpsServer
)实例相关联。完成后,使用endpoint.stop
和server.stop
关闭。
还有一个blog entry on blogs.oracle.com描述了自定义网络传输的创建。它没有足够的细节让我从快速扫描中获得很好的理解,但也许你可以从中获得更多。