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 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
    • Method Detail

      • addSatellite

        public void addSatellite​(@NotNull
                                 PropertySet satellite)
        Deprecated.
      • getEndPointAddressString

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