Class WSHTTPConnection

  • All Implemented Interfaces:
    PropertySet
    Direct Known Subclasses:
    ServletConnectionImpl

    public abstract class WSHTTPConnection
    extends BasePropertySet
    The view of an HTTP exchange from the point of view of JAX-WS.

    Different HTTP server layer uses different implementations of this class so that JAX-WS can be shielded from individuality of such layers. This is an interface implemented as an abstract class, so that future versions of the JAX-WS RI can add new methods.

    This class extends PropertySet so that a transport can expose its properties to the application and pipes. (This object will be added to BaseDistributedPropertySet.addSatellite(PropertySet).)

    Author:
    Jitendra Kotamraju
    • Constructor Detail

      • WSHTTPConnection

        public WSHTTPConnection()
    • Method Detail

      • setResponseHeaders

        public abstract void setResponseHeaders​(@NotNull
                                                Map<String,​List<String>> headers)
        Overwrites all the HTTP response headers written thus far.

        The implementation should copy the contents of the Map, rather than retaining a reference. The Map passed as a parameter may change after this method is invoked.

        This method may be called repeatedly, although in normal use case that's rare (so the implementation is encourage to take advantage of this usage pattern to improve performance, if possible.)

        Initially, no header is set.

        This parameter is usually exposed to WebServiceContext as Packet.OUTBOUND_TRANSPORT_HEADERS, and thus it should ignore Content-Type and Content-Length headers.

        Parameters:
        headers - See URLConnection.getHeaderFields() for the format. This parameter may not be null, but since the user application code may invoke this method, a graceful error checking with an helpful error message should be provided if it's actually null.
        See Also:
        setContentTypeResponseHeader(String)
      • setResponseHeader

        public void setResponseHeader​(String key,
                                      String value)
      • setResponseHeader

        public abstract void setResponseHeader​(String key,
                                               List<String> value)
      • setContentTypeResponseHeader

        public abstract void setContentTypeResponseHeader​(@NotNull
                                                          String value)
        Sets the "Content-Type" header.

        If the Content-Type header has already been set, this method will overwrite the previously set value. If not, this method adds it.

        Note that this method and setResponseHeaders(java.util.Map) may be invoked in any arbitrary order.

        Parameters:
        value - strings like "application/xml; charset=UTF-8" or "image/jpeg".
      • setStatus

        public abstract void setStatus​(int status)
        Sets the HTTP response code like OK.

        While JAX-WS processes a WSHTTPConnection, it will at least call this method once to set a valid HTTP response code. Note that this method may be invoked multiple times (from user code), so do not consider the value to be final until getOutput() is invoked.

      • getStatus

        public abstract int getStatus()
        Gets the last value set by setStatus(int).
        Returns:
        if setStatus(int) has not been invoked yet, return 0.
      • getInput

        @NotNull
        public abstract InputStream getInput()
                                      throws IOException
        Transport's underlying input stream.

        This method will be invoked at most once by the JAX-WS RI to read the request body. If there's no request body, this method should return an empty InputStream.

        Returns:
        the stream from which the request body will be read.
        Throws:
        IOException
      • getRequestMethod

        @NotNull
        public abstract String getRequestMethod()
        HTTP request method, such as "GET" or "POST".
      • getRequestHeaders

        @NotNull
        public abstract Map<String,​List<String>> getRequestHeaders()
        Deprecated.
        This is a potentially expensive operation. Programs that want to access HTTP headers should consider using other methods such as getRequestHeader(String).
        HTTP request headers.
        Returns:
        can be empty but never null.
      • getRequestHeaderNames

        @NotNull
        public abstract Set<String> getRequestHeaderNames()
        Deprecated.
        This is a potentially expensive operation. Programs that want to access HTTP headers should consider using other methods such as getRequestHeader(String).
        HTTP request header names.
        Returns:
        can be empty but never null.
      • getResponseHeaders

        public abstract Map<String,​List<String>> getResponseHeaders()
        Returns:
        HTTP response headers.
      • getRequestHeader

        @Nullable
        public abstract String getRequestHeader​(@NotNull
                                                String headerName)
        Gets an HTTP request header.

        if multiple headers are present, this method returns one of them. (The implementation is free to choose which one it returns.)

        Returns:
        null if no header exists.
      • getRequestHeaderValues

        @Nullable
        public abstract List<String> getRequestHeaderValues​(@NotNull
                                                            String headerName)
        Gets an HTTP request header.
        Returns:
        null if no header exists.
      • getQueryString

        @Nullable
        public abstract String getQueryString()
        HTTP Query string, such as "foo=bar", or null if none exists.
      • getPathInfo

        @Nullable
        public abstract String getPathInfo()
        Extra portion of the request URI after the end of the expected address of the service but before the query string
      • getRequestURI

        @NotNull
        public abstract String getRequestURI()
        Requested path. A string like "/foo/bar/baz"
      • getRequestScheme

        @NotNull
        public abstract String getRequestScheme()
        Requested scheme, e.g. "http" or "https"
      • getServerName

        @NotNull
        public abstract String getServerName()
        Server name
      • getServerPort

        public abstract int getServerPort()
        Server port
      • getContextPath

        @NotNull
        public String getContextPath()
        Portion of the request URI that groups related service addresses. The value, if non-empty, will always begin with '/', but will never end with '/'. Environments that do not support context paths must return an empty string.
      • getContext

        public Object getContext()
        Environment specific context , if available
      • getBaseAddress

        @NotNull
        public String getBaseAddress()
        Gets the absolute URL up to the context path.
        Returns:
        String like "http://myhost/myapp"
        Since:
        2.1.2
      • isSecure

        public abstract boolean isSecure()
        Whether connection is HTTPS or not
        Returns:
        if the received request is on HTTPS, return true else false
      • getUserPrincipal

        public Principal getUserPrincipal()
        User principal associated with the request
        Returns:
        user principal
      • isUserInRole

        public boolean isUserInRole​(String role)
        Whether user associated with the request holds the given role
        Parameters:
        role - Role to check
        Returns:
        if the caller holds the role
      • getRequestAttribute

        public Object getRequestAttribute​(String key)
        Gets request metadata attribute
        Parameters:
        key - Request metadata key
        Returns:
        Value of metadata attribute or null, if no value present
      • close

        public void close()
        Close the connection
      • isClosed

        public boolean isClosed()
        Retuns whether connection is closed or not.
      • getProtocol

        public String getProtocol()
        Subclasses are expected to override
        Returns:
        a String containing the protocol name and version number
      • getCookie

        public String getCookie​(String name)
        Subclasses are expected to override
        Returns:
        value of given cookie
        Since:
        JAX-WS RI 2.2.2
      • setCookie

        public void setCookie​(String name,
                              String value)
        Subclasses are expected to override
        Since:
        JAX-WS RI 2.2.2
      • setContentLengthResponseHeader

        public void setContentLengthResponseHeader​(int value)
        Subclasses are expected to override