com.sun.xml.ws.transport.http.server
Class ServerConnectionImpl

java.lang.Object
  extended by com.sun.xml.ws.api.PropertySet
      extended by com.sun.xml.ws.transport.http.WSHTTPConnection
          extended by com.sun.xml.ws.transport.http.server.ServerConnectionImpl
All Implemented Interfaces:
WebServiceContextDelegate

final class ServerConnectionImpl
extends WSHTTPConnection
implements WebServiceContextDelegate

WSHTTPConnection used with Java SE endpoints. It provides connection implementation using HttpExchange object.


Nested Class Summary
 
Nested classes/interfaces inherited from class com.sun.xml.ws.api.PropertySet
PropertySet.Accessor, PropertySet.Property, PropertySet.PropertyMap
 
Field Summary
 
Fields inherited from class com.sun.xml.ws.transport.http.WSHTTPConnection
INTERNAL_ERR, MALFORMED_XML, OK, ONEWAY, UNSUPPORTED_MEDIA
 
Constructor Summary
ServerConnectionImpl(HttpAdapter adapter, com.sun.net.httpserver.HttpExchange httpExchange)
           
 
Method Summary
 String getBaseAddress()
          Gets the absolute URL up to the context path.
 String getEPRAddress(Packet request, WSEndpoint endpoint)
          Gets the address of the endpoint.
 com.sun.net.httpserver.HttpExchange getExchange()
           
 InputStream getInput()
          Transport's underlying input stream.
 OutputStream getOutput()
          Transport's underlying output stream
 String getPathInfo()
          Requested path.
protected  PropertySet.PropertyMap getPropertyMap()
          Map representing the Fields and Methods annotated with PropertySet.Property.
 String getProtocol()
          Subclasses are expected to override
 String getQueryString()
          HTTP Query string, such as "foo=bar", or null if none exists.
 String getRequestHeader(String headerName)
          Gets an HTTP request header.
 Map<String,List<String>> getRequestHeaders()
          HTTP request headers.
 String getRequestMethod()
          HTTP request method, such as "GET" or "POST".
 Map<String,List<String>> getResponseHeaders()
           
 int getStatus()
          Gets the last value set by WSHTTPConnection.setStatus(int).
 Principal getUserPrincipal(Packet request)
          Implements WebServiceContext.getUserPrincipal() for the given packet.
 WebServiceContextDelegate getWebServiceContextDelegate()
          Returns the WebServiceContextDelegate for this connection.
 String getWSDLAddress(Packet request, WSEndpoint endpoint)
          Gets the address of the primary WSDL.
 boolean isSecure()
          Whether connection is HTTPS or not
 boolean isUserInRole(Packet request, String role)
          Implements WebServiceContext.isUserInRole(String) for the given packet.
 void setContentLengthResponseHeader(int value)
          Subclasses are expected to override
 void setContentTypeResponseHeader(String value)
          Sets the "Content-Type" header.
 void setResponseHeaders(Map<String,List<String>> headers)
          Overwrites all the HTTP response headers written thus far.
 void setStatus(int status)
          Sets the HTTP response code like WSHTTPConnection.OK.
 
Methods inherited from class com.sun.xml.ws.transport.http.WSHTTPConnection
close, isClosed
 
Methods inherited from class com.sun.xml.ws.api.PropertySet
containsKey, createMapView, get, parse, put, remove, supports
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ServerConnectionImpl

public ServerConnectionImpl(@NotNull
                            HttpAdapter adapter,
                            @NotNull
                            com.sun.net.httpserver.HttpExchange httpExchange)
Method Detail

getRequestHeaders

@NotNull
public Map<String,List<String>> getRequestHeaders()
Description copied from class: WSHTTPConnection
HTTP request headers.

Specified by:
getRequestHeaders in class WSHTTPConnection
Returns:
can be empty but never null.

getRequestHeader

public String getRequestHeader(String headerName)
Description copied from class: WSHTTPConnection
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.)

Specified by:
getRequestHeader in class WSHTTPConnection
Returns:
null if no header exists.

setResponseHeaders

public void setResponseHeaders(Map<String,List<String>> headers)
Description copied from class: WSHTTPConnection
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.

Specified by:
setResponseHeaders in class WSHTTPConnection
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:
WSHTTPConnection.setContentTypeResponseHeader(String)

getResponseHeaders

public Map<String,List<String>> getResponseHeaders()
Specified by:
getResponseHeaders in class WSHTTPConnection
Returns:
HTTP response headers.

setContentTypeResponseHeader

public void setContentTypeResponseHeader(@NotNull
                                         String value)
Description copied from class: WSHTTPConnection
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(Map>) may be invoked in any arbitrary order.

Specified by:
setContentTypeResponseHeader in class WSHTTPConnection
Parameters:
value - strings like "application/xml; charset=UTF-8" or "image/jpeg".

setStatus

public void setStatus(int status)
Description copied from class: WSHTTPConnection
Sets the HTTP response code like WSHTTPConnection.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 WSHTTPConnection.getOutput() is invoked.

Specified by:
setStatus in class WSHTTPConnection

getStatus

public int getStatus()
Description copied from class: WSHTTPConnection
Gets the last value set by WSHTTPConnection.setStatus(int).

Specified by:
getStatus in class WSHTTPConnection
Returns:
if WSHTTPConnection.setStatus(int) has not been invoked yet, return 0.

getInput

@NotNull
public InputStream getInput()
Description copied from class: WSHTTPConnection
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.

Specified by:
getInput in class WSHTTPConnection
Returns:
the stream from which the request body will be read.

getOutput

@NotNull
public OutputStream getOutput()
                       throws IOException
Description copied from class: WSHTTPConnection
Transport's underlying output stream

This method will be invoked exactly once by the JAX-WS RI to start writing the response body (unless the processing aborts abnormally.) Even if there's no response body to write, this method will still be invoked only to be closed immediately.

Once this method is called, the status code and response headers will never change (IOW WSHTTPConnection.setStatus(int), WSHTTPConnection.setResponseHeaders(java.util.Map>), and WSHTTPConnection.setContentTypeResponseHeader(String) will never be invoked.

Specified by:
getOutput in class WSHTTPConnection
Throws:
IOException

getWebServiceContextDelegate

@NotNull
public WebServiceContextDelegate getWebServiceContextDelegate()
Description copied from class: WSHTTPConnection
Returns the WebServiceContextDelegate for this connection.

Specified by:
getWebServiceContextDelegate in class WSHTTPConnection

getUserPrincipal

public Principal getUserPrincipal(Packet request)
Description copied from interface: WebServiceContextDelegate
Implements WebServiceContext.getUserPrincipal() for the given packet.

Specified by:
getUserPrincipal in interface WebServiceContextDelegate
Parameters:
request - Always non-null. See class javadoc.
See Also:
WebServiceContext.getUserPrincipal()

isUserInRole

public boolean isUserInRole(Packet request,
                            String role)
Description copied from interface: WebServiceContextDelegate
Implements WebServiceContext.isUserInRole(String) for the given packet.

Specified by:
isUserInRole in interface WebServiceContextDelegate
Parameters:
request - Always non-null. See class javadoc.
See Also:
WebServiceContext.isUserInRole(String)

getEPRAddress

@NotNull
public String getEPRAddress(Packet request,
                                    WSEndpoint endpoint)
Description copied from interface: WebServiceContextDelegate
Gets the address of the endpoint.

The "address" of endpoints is always affected by a particular client being served, hence it's up to transport to provide this information.

Specified by:
getEPRAddress in interface WebServiceContextDelegate
Parameters:
request - Always non-null. See class javadoc.
endpoint - The endpoint whose address will be returned.
Returns:
Absolute URL of the endpoint. This shold be an address that the client can use to talk back to this same service later.
See Also:
WebServiceContext.getEndpointReference(org.w3c.dom.Element...)

getWSDLAddress

public String getWSDLAddress(@NotNull
                             Packet request,
                             @NotNull
                             WSEndpoint endpoint)
Description copied from interface: WebServiceContextDelegate
Gets the address of the primary WSDL.

If a transport supports publishing of WSDL by itself (instead/in addition to MEX), then it should implement this method so that the rest of the JAX-WS RI can use that information. For example, HTTP transports often use the convention getEPRAddress()+"?wsdl" for publishing WSDL on HTTP.

Some transports may not have such WSDL publishing mechanism on its own. Those transports may choose to return null, indicating that WSDL is not published. If such transports are always used in conjunction with other transports that support WSDL publishing (such as SOAP/TCP used with Servlet transport), then such transport may choose to find the corresponding servlet endpoint by Module.getBoundEndpoints() and try to obtain the address from there.

This information is used to put a metadata reference inside an EPR, among other things. Clients that do not support MEX rely on this WSDL URL to retrieve metadata, it is desirable for transports to support this, but not mandatory.

This method will be never invoked if the WSEndpoint does not have a corresponding WSDL to begin with (IOW returning null.

Specified by:
getWSDLAddress in interface WebServiceContextDelegate
Parameters:
request - Always non-null. See class javadoc.
endpoint - The endpoint whose address will be returned.
Returns:
null if the implementation does not support the notion of WSDL publishing.

isSecure

public boolean isSecure()
Description copied from class: WSHTTPConnection
Whether connection is HTTPS or not

Specified by:
isSecure in class WSHTTPConnection
Returns:
if the received request is on HTTPS, return true else false

getRequestMethod

@NotNull
public String getRequestMethod()
Description copied from class: WSHTTPConnection
HTTP request method, such as "GET" or "POST".

Specified by:
getRequestMethod in class WSHTTPConnection

getQueryString

public String getQueryString()
Description copied from class: WSHTTPConnection
HTTP Query string, such as "foo=bar", or null if none exists.

Specified by:
getQueryString in class WSHTTPConnection

getPathInfo

public String getPathInfo()
Description copied from class: WSHTTPConnection
Requested path. A string like "/foo/bar/baz"

Specified by:
getPathInfo in class WSHTTPConnection

getExchange

public com.sun.net.httpserver.HttpExchange getExchange()

getBaseAddress

@NotNull
public String getBaseAddress()
Description copied from class: WSHTTPConnection
Gets the absolute URL up to the context path.

Overrides:
getBaseAddress in class WSHTTPConnection
Returns:
String like "http://myhost/myapp"

getProtocol

public String getProtocol()
Description copied from class: WSHTTPConnection
Subclasses are expected to override

Overrides:
getProtocol in class WSHTTPConnection
Returns:

setContentLengthResponseHeader

public void setContentLengthResponseHeader(int value)
Description copied from class: WSHTTPConnection
Subclasses are expected to override

Overrides:
setContentLengthResponseHeader in class WSHTTPConnection

getPropertyMap

protected PropertySet.PropertyMap getPropertyMap()
Description copied from class: PropertySet
Map representing the Fields and Methods annotated with PropertySet.Property. Model of PropertySet class.

At the end of the derivation chain this method just needs to be implemented as:

 private static final PropertyMap model;
 static {
   model = parse(MyDerivedClass.class);
 }
 protected PropertyMap getPropertyMap() {
   return model;
 }
 

Specified by:
getPropertyMap in class PropertySet