Class RequestContext

All Implemented Interfaces:
DistributedPropertySet, PropertySet

public final class RequestContext extends BaseDistributedPropertySet
Request context implementation.

Why a custom map?

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.

How it works?

For better performance, we wan't use strongly typed field as much as possible to avoid reflection and unnecessary collection iterations; Using BasePropertySet.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 as well; those would be processed using iterating the BasePropertySet.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.

Author:
Kohsuke Kawaguchi
  • Field Details

  • Method Details

    • getEndPointAddressString

      @Deprecated public String getEndPointAddressString()
      Deprecated.
      always access endpointAddress.
      Creates BindingProvider.ENDPOINT_ADDRESS_PROPERTY view on top of endpointAddress.
    • setEndPointAddressString

      public void setEndPointAddressString(String s)
    • setEndpointAddress

      public void setEndpointAddress(@NotNull EndpointAddress epa)
    • getEndpointAddress

      @NotNull public EndpointAddress getEndpointAddress()
    • getContentNegotiationString

      public String getContentNegotiationString()
    • setContentNegotiationString

      public void setContentNegotiationString(String s)
    • getSoapAction

      public String getSoapAction()
    • setSoapAction

      public void setSoapAction(String sAction)
    • getSoapActionUse

      public Boolean getSoapActionUse()
    • setSoapActionUse

      public void setSoapActionUse(Boolean sActionUse)
    • get

      public Object get(Object key)
      The efficient get method that reads from RequestContext.
      Specified by:
      get in interface PropertySet
      Overrides:
      get in class BaseDistributedPropertySet
      Parameters:
      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.
    • put

      public Object put(String key, Object value)
      The efficient put method that updates RequestContext.
      Specified by:
      put in interface PropertySet
      Overrides:
      put in class BaseDistributedPropertySet
      See Also:
    • fill

      public void fill(Packet packet, boolean isAddressingEnabled)
      Fill a Packet with values of this RequestContext.
      Parameters:
      packet - to be filled with context values
      isAddressingEnabled - flag if addressing enabled (to provide warning if necessary)
    • copy

      public RequestContext copy()
    • getPropertyMap

      protected BasePropertySet.PropertyMap getPropertyMap()
      Description copied from class: BasePropertySet
      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;
       }
       
      or if the implementation is in different Java module.
       private static final PropertyMap model;
       static {
         model = parse(MyDerivedClass.class, MethodHandles.lookup());
       }
       protected PropertyMap getPropertyMap() {
         return model;
       }
       
      Specified by:
      getPropertyMap in class BasePropertySet
      Returns:
      the map of strongly-typed known properties keyed by property names
    • mapAllowsAdditionalProperties

      protected boolean mapAllowsAdditionalProperties()
      Description copied from class: BasePropertySet
      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
      Overrides:
      mapAllowsAdditionalProperties in class BasePropertySet
      Returns:
      true if Map should allow also properties not defined as strongly typed fields