1 /*
   2  * Copyright (c) 2009, 2012, Oracle and/or its affiliates. All rights reserved.
   3  * DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
   4  *
   5  * This code is free software; you can redistribute it and/or modify it
   6  * under the terms of the GNU General Public License version 2 only, as
   7  * published by the Free Software Foundation.  Oracle designates this
   8  * particular file as subject to the "Classpath" exception as provided
   9  * by Oracle in the LICENSE file that accompanied this code.
  10  *
  11  * This code is distributed in the hope that it will be useful, but WITHOUT
  12  * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
  13  * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
  14  * version 2 for more details (a copy is included in the LICENSE file that
  15  * accompanied this code).
  16  *
  17  * You should have received a copy of the GNU General Public License version
  18  * 2 along with this work; if not, write to the Free Software Foundation,
  19  * Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
  20  *
  21  * Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
  22  * or visit www.oracle.com if you need additional information or have any
  23  * questions.
  24  */
  25 
  26 /**
  27   Provides HTTP SPI that is used for portable deployment of JAX-WS
  28   web services in containers(for e.g. servlet containers). This SPI
  29   is not for end developers but provides a way for the container
  30   developers to deploy JAX-WS services portably.
  31 
  32   <p>
  33   The portable deployment is done as below:
  34   <ol>
  35   <li>Container creates {@link javax.xml.ws.Endpoint} objects for an
  36   application. The necessary information to create Endpoint objects
  37   may be got from web service deployment descriptor files.</li>
  38   <li>Container needs to create {@link javax.xml.ws.spi.http.HttpContext}
  39   objects for the deployment. For example, a HttpContext could be
  40   created using servlet configuration(for e.g url-pattern) for the
  41   web service in servlet container case.</li>
  42   <li>Then publishes all the endpoints using
  43   {@link javax.xml.ws.Endpoint#publish(HttpContext)}. During publish(),
  44   JAX-WS runtime registers a {@link javax.xml.ws.spi.http.HttpHandler}
  45   callback to handle incoming requests or
  46   {@link javax.xml.ws.spi.http.HttpExchange} objects. The HttpExchange
  47   object encapsulates a HTTP request and a response.
  48   </ol>
  49 
  50   <pre>
  51   Container                               JAX-WS runtime
  52   ---------                               --------------
  53   1. Creates Invoker1, ... InvokerN
  54   2. Provider.createEndpoint(...)     --> 3. creates Endpoint1
  55      configures Endpoint1
  56      ...
  57   4. Provider.createEndpoint(...)     --> 5. creates EndpointN
  58      configures EndpointN
  59   6. Creates ApplicationContext
  60   7. creates HttpContext1, ... HttpContextN
  61   8. Endpoint1.publish(HttpContext1)  --> 9. creates HttpHandler1
  62                                           HttpContext1.setHandler(HttpHandler1)
  63      ...
  64  10. EndpointN.publish(HttpContextN)  --> 11. creates HttpHandlerN
  65                                          HttpContextN.setHandler(HttpHandlerN)
  66 
  67   </pre>
  68 
  69   The request processing is done as below(for every request):
  70   <pre>
  71   Container                               JAX-WS runtime
  72   ---------                               --------------
  73   1. Creates a HttpExchange
  74   2. Gets handler from HttpContext
  75   3. HttpHandler.handle(HttpExchange) --> 4. reads request from HttpExchange
  76                                       <-- 5. Calls Invoker
  77   6. Invokes the actual instance
  78                                           7. Writes the response to HttpExchange
  79   </pre>
  80 
  81   <p>
  82   The portable undeployment is done as below:
  83   <pre>
  84   Container
  85   ---------
  86   1. @preDestroy on instances
  87   2. Endpoint1.stop()
  88   ...
  89   3. EndpointN.stop()
  90   </pre>
  91 
  92   @author Jitendra Kotamraju
  93   @since 1.7, JAX-WS 2.2
  94  */
  95 package javax.xml.ws.spi.http;