public final class RequestContext
extends org.jvnet.ws.message.BaseDistributedPropertySet
The JAX-WS spec exposes properties as a Map
, but if we just use
an ordinary HashMap
for this, it doesn't work as fast as we'd like
it to be. Hence we have this class.
We expect the user to set a few properties and then use that same setting to make a bunch of invocations. So we'd like to take some hit when the user actually sets a property to do some computation, then use that computed value during a method invocation again and again.
For this goal, we use PropertySet
and implement some properties
as virtual properties backed by methods. This allows us to do the computation
in the setter, and store it in a field.
These fields are used by Stub.process(com.sun.xml.ws.api.message.Packet, com.sun.xml.ws.client.RequestContext, com.sun.xml.ws.client.ResponseContextReceiver)
to populate a Packet
.
For better performance, we wan't use strongly typed field as much as possible
to avoid reflection and unnecessary collection iterations;
Using MapView
implementation allows client to use Map
interface
in a way that all the strongly typed properties are reflected to the fields
right away. Any additional (extending) properties can be added by client aswell;
those would be processed using iterating the MapView
and their processing,
of course, would be slower.
The previous implementation with fallback mode has been removed to simplify the code and remove the bugs.
Modifier and Type | Field and Description |
---|---|
ContentNegotiation |
contentNegotiation
The value of
ContentNegotiation.PROPERTY
property. |
Constructor and Description |
---|
RequestContext()
Creates an empty
RequestContext . |
Modifier and Type | Method and Description |
---|---|
void |
addSatellite(PropertySet satellite)
Deprecated.
|
RequestContext |
copy() |
void |
fill(Packet packet,
boolean isAddressingEnabled)
Fill a
Packet with values of this RequestContext . |
Object |
get(Object key)
The efficient get method that reads from
RequestContext . |
String |
getContentNegotiationString() |
EndpointAddress |
getEndpointAddress() |
String |
getEndPointAddressString()
Deprecated.
always access
endpointAddress . |
protected org.jvnet.ws.message.BasePropertySet.PropertyMap |
getPropertyMap()
Map representing the Fields and Methods annotated with
Property . |
String |
getSoapAction() |
Boolean |
getSoapActionUse() |
protected boolean |
mapAllowsAdditionalProperties()
Used when constructing the
BasePropertySet.MapView for this object - it controls if the BasePropertySet.MapView servers only to
access strongly typed values or allows also different values |
Object |
put(String key,
Object value)
The efficient put method that updates
RequestContext . |
void |
setContentNegotiationString(String s) |
void |
setEndpointAddress(EndpointAddress epa) |
void |
setEndPointAddressString(String s) |
void |
setSoapAction(String sAction) |
void |
setSoapActionUse(Boolean sActionUse) |
addSatellite, addSatellite, asMapLocal, copySatelliteInto, copySatelliteInto, createEntrySet, createView, getSatellite, remove, removeSatellite, supports, supportsLocal
asMap, containsKey, createMapView, parse
public ContentNegotiation contentNegotiation
ContentNegotiation.PROPERTY
property.RequestContext()
RequestContext
.public void addSatellite(@NotNull PropertySet satellite)
public String getEndPointAddressString()
endpointAddress
.BindingProvider.ENDPOINT_ADDRESS_PROPERTY
view
on top of endpointAddress
.public void setEndPointAddressString(String s)
public void setEndpointAddress(@NotNull EndpointAddress epa)
@NotNull public EndpointAddress getEndpointAddress()
public String getContentNegotiationString()
public void setContentNegotiationString(String s)
public String getSoapAction()
public void setSoapAction(String sAction)
public Boolean getSoapActionUse()
public void setSoapActionUse(Boolean sActionUse)
public Object get(Object key)
RequestContext
.get
in interface org.jvnet.ws.message.PropertySet
get
in class org.jvnet.ws.message.BaseDistributedPropertySet
key
- This field is typed as Object
to follow the Map.get(Object)
convention, but if anything but String
is passed, this method
just returns null.public Object put(String key, Object value)
RequestContext
.put
in interface org.jvnet.ws.message.PropertySet
put
in class org.jvnet.ws.message.BaseDistributedPropertySet
Property
public void fill(Packet packet, boolean isAddressingEnabled)
Packet
with values of this RequestContext
.packet
- to be filled with context valuesisAddressingEnabled
- flag if addressing enabled (to provide warning if necessary)public RequestContext copy()
protected org.jvnet.ws.message.BasePropertySet.PropertyMap getPropertyMap()
org.jvnet.ws.message.BasePropertySet
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; }
getPropertyMap
in class org.jvnet.ws.message.BasePropertySet
protected boolean mapAllowsAdditionalProperties()
org.jvnet.ws.message.BasePropertySet
BasePropertySet.MapView
for this object - it controls if the BasePropertySet.MapView
servers only to
access strongly typed values or allows also different valuesmapAllowsAdditionalProperties
in class org.jvnet.ws.message.BasePropertySet
Map
should allow also properties not defined as strongly typed fieldsCopyright (c) 1997-2012 Oracle and/or its affiliates. All rights reserved.