Module  java.xml.ws

Package javax.xml.ws.spi.http

提供用于在容器(例如servlet容器)中便携式部署JAX-WS Web服务的HTTP SPI。 此SPI不适用于最终开发人员,但为容器开发人员提供可移植部署JAX-WS服务的方式。

便携式部署完成如下:

  1. 容器为应用程序创建Endpoint对象。 创建端点对象的必要信息可能来自Web服务部署描述符文件。
  2. 容器需要创建HttpContext对象进行部署。 例如,可以使用servlet配置(例如url-pattern)在servlet容器情况下为Web服务创建HttpContext。
  3. 然后使用Endpoint.publish(HttpContext)发布所有端点。 在publish()期间,JAX-WS运行时注册一个HttpHandler回调来处理传入请求或HttpExchange对象。 HttpExchange对象封装了HTTP请求和响应。
  Container                               JAX-WS runtime
  ---------                               --------------
  1. Creates Invoker1, ... InvokerN
  2. Provider.createEndpoint(...)     --> 3. creates Endpoint1
     configures Endpoint1
     ...
  4. Provider.createEndpoint(...)     --> 5. creates EndpointN
     configures EndpointN
  6. Creates ApplicationContext
  7. creates HttpContext1, ... HttpContextN
  8. Endpoint1.publish(HttpContext1)  --> 9. creates HttpHandler1
                                          HttpContext1.setHandler(HttpHandler1)
     ...
 10. EndpointN.publish(HttpContextN)  --> 11. creates HttpHandlerN
                                         HttpContextN.setHandler(HttpHandlerN) 
请求处理完成如下(对于每个请求):
  Container                               JAX-WS runtime
  ---------                               --------------
  1. Creates a HttpExchange
  2. Gets handler from HttpContext
  3. HttpHandler.handle(HttpExchange) --> 4. reads request from HttpExchange
                                      <-- 5. Calls Invoker
  6. Invokes the actual instance
                                          7. Writes the response to HttpExchange 

便携式取消部署完成如下:

  Container
  ---------
  1. @preDestroy on instances
  2. Endpoint1.stop()
  ...
  3. EndpointN.stop() 
从以下版本开始:
1.7, JAX-WS 2.2