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

java.lang.Object
  extended by org.jvnet.ws.message.BasePropertySet
      extended by com.sun.xml.ws.transport.http.WSHTTPConnection
          extended by com.sun.xml.ws.transport.http.server.PortableConnectionImpl
All Implemented Interfaces:
WebServiceContextDelegate, org.jvnet.ws.message.PropertySet

final class PortableConnectionImpl
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 org.jvnet.ws.message.BasePropertySet
org.jvnet.ws.message.BasePropertySet.Accessor, org.jvnet.ws.message.BasePropertySet.PropertyMap
 
Nested classes/interfaces inherited from interface org.jvnet.ws.message.PropertySet
org.jvnet.ws.message.PropertySet.Property
 
Field Summary
 
Fields inherited from class com.sun.xml.ws.transport.http.WSHTTPConnection
INTERNAL_ERR, MALFORMED_XML, OK, ONEWAY, UNSUPPORTED_MEDIA
 
Constructor Summary
PortableConnectionImpl(HttpAdapter adapter, 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.
 HttpExchange getExchange()
           
 InputStream getInput()
          Transport's underlying input stream.
 OutputStream getOutput()
          Transport's underlying output stream
 String getPathInfo()
          Extra portion of the request URI after the end of the expected address of the service but before the query string
protected  org.jvnet.ws.message.BasePropertySet.PropertyMap getPropertyMap()
          Map representing the Fields and Methods annotated with 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.
 Set<String> getRequestHeaderNames()
          HTTP request header names.
 Map<String,List<String>> getRequestHeaders()
          HTTP request headers.
 List<String> getRequestHeaderValues(String headerName)
          Gets an HTTP request header.
 String getRequestMethod()
          HTTP request method, such as "GET" or "POST".
 String getRequestScheme()
          Requested scheme, e.g.
 String getRequestURI()
          Requested path.
 Map<String,List<String>> getResponseHeaders()
           
 String getServerName()
          Server name
 int getServerPort()
          Server port
 Object getServletContext()
           
 Object getServletRequest()
           
 Object getServletResponse()
           
 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 setResponseHeader(String key, List<String> value)
           
 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, getContext, getContextPath, getCookie, getRequestAttribute, getUserPrincipal, isClosed, isUserInRole, setCookie, setResponseHeader
 
Methods inherited from class org.jvnet.ws.message.BasePropertySet
asMap, containsKey, createEntrySet, createMapView, createView, get, mapAllowsAdditionalProperties, parse, put, remove, supports
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

PortableConnectionImpl

public PortableConnectionImpl(@NotNull
                              HttpAdapter adapter,
                              @NotNull
                              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)

setResponseHeader

public void setResponseHeader(String key,
                              List<String> value)
Specified by:
setResponseHeader in class WSHTTPConnection

getRequestHeaderNames

public Set<String> getRequestHeaderNames()
Description copied from class: WSHTTPConnection
HTTP request header names.

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

getRequestHeaderValues

public List<String> getRequestHeaderValues(String headerName)
Description copied from class: WSHTTPConnection
Gets an HTTP request header.

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

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<String,List<String>>) 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()
                     throws IOException
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.
Throws:
IOException

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...)

getServletContext

public Object getServletContext()

getServletResponse

public Object getServletResponse()

getServletRequest

public Object getServletRequest()

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
Extra portion of the request URI after the end of the expected address of the service but before the query string

Specified by:
getPathInfo in class WSHTTPConnection

getExchange

public 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

getRequestURI

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

Specified by:
getRequestURI in class WSHTTPConnection

getRequestScheme

public String getRequestScheme()
Description copied from class: WSHTTPConnection
Requested scheme, e.g. "http" or "https"

Specified by:
getRequestScheme in class WSHTTPConnection

getServerName

public String getServerName()
Description copied from class: WSHTTPConnection
Server name

Specified by:
getServerName in class WSHTTPConnection

getServerPort

public int getServerPort()
Description copied from class: WSHTTPConnection
Server port

Specified by:
getServerPort in class WSHTTPConnection

getPropertyMap

protected org.jvnet.ws.message.BasePropertySet.PropertyMap getPropertyMap()
Description copied from class: org.jvnet.ws.message.BasePropertySet
Map representing the Fields and Methods annotated with 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 org.jvnet.ws.message.BasePropertySet


Copyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.