Jeff,
I like the idea of having pluggable validators.  +1

When you add the Validator interface, can you provide guidance in the
javadoc to log trace when a header understood (and removed from the
NotUnderstoodHeaders Set).

For example it would be nice to see trace like:
   JAXWSSoapHeaderValidator:  The JAX-WS application handler,
mySample.handler, understands header {http://mySample}Foo.

Thanks,
Rich Scheuerle
IBM Web Services
Apache Axis2 ([EMAIL PROTECTED])

Jeff Barrett/Austin/[EMAIL PROTECTED] wrote on 07/11/2007 05:20:35 PM:

> Hi All,
>
> Here is my proposal for a mustUnderstand header validation framework.
>
> PLEASE NOTE the mustUnderstand processing is required for fixes we're
> trying to get in by 7/20 and which Geronimo needs.
>
> So, please take a look as soon as possible.  If the overview seems OK,
> then I'll start on the code (this is post 1.3 work)
>
> Here's the Jira: https://issues.apache.org/jira/browse/AXIS2-2853
>
> Goals
> =====
>
> 1.  Pluggable and extensible via configuration.  Allow higher-level,
> non-engine components to participate in mustUnderstand validation.
> Examples include JAX-WS runtime and appliction handlers, WS-RM, and
> systems using Axis2 as a bus.
>
> 2.  Support for actors/roles.  Only mustUnderstand headers for
> actors/roles in which this node acts should be checked.  Note that
> actors/roles would not be implemented immediately, but future support is
> taken into consideration in the design.
>
> OVERVIEW
> ========
>
> A list of soapHeaderValidators can optionally be configured in axis2.xml.

> The list of validators will be stored on the AxisConfiguration.  Each
> validator has a method which takes a collection of not-yet-understood
> header QNames, a collection of String roles, and a MessageContext.  The
> method will return a collection of header QNames based on the input
> parameter which are still not understood; that is, it removes any that it

> understands from the list.
>
> The AxisEngine.checkMustUnderstand() method will invoke each validator,
> passing in the collection of still-not-understood headers.  If, after all

> the validators are called the collection is not empty, a mustUnderstand
> fault is thrown.  The logic would be something like:
>
>         String[] rolesActedIn = ...             // list of actors/roles
> acted in.
>         QName[] notUnderstoodHeaders = ...      // list of all mU headers

> not marked as processed
>         SOAPHeaderValidator[] validators =
> axisConfig.getSoapHeaderValidators();
>         for (SOAPHeaderValidator validator : validators) {
>             notUnderstoodHeaders =
> validator.validate(notUnderstoodHeaders, rolesActedIn, messageContext)
>         }
>
>         // If there are any not-understood headers after running the
> validators
>         // throw an exception
>         if (notUnderstoodHeader.length != 0) {
>             throw notUnderstoodException
>         }
>
> There is no API for the registration of understood headers; each
validator
>
> is responsible for deciding what it understands and removing it from the
> collection.  For example, the JAXWS validator would look for a property
> (which it set earlier) on the AxisOperation containing the QNames for any

> JAXWS SEI header parameters and any headers understood by JAXWS
> application handlers.  That property would be set by JAXWS on the
> AxisOperation during application startup.
>
> Configuration in axis2.xml
> --------------------------
>
> The <soapHeaderValidators> element is optional.  If ommited then all
> mustUnderstand headers must be marked as processed by handlers, or a
> mustUnderstand fault will be thown (i.e.  current
> AxisEngine.checkMustUnderstand semantics are unchanged)
>
> <soapHeaderValidators>
>
> <soapHeaderValidator>org.apache.axis2.jaxws.
> JAXWSSoapHeaderValidator</soapHeaderValidator>
>
> <soapHeaderValidator>my.other.validator.
> MySOAPHeaderValidator</soapHeaderValidator>
> </soapHeaderValidators>
>
>
>
> Thanks,
> Jeff
>
> IBM Software Group - WebSphere Web Services Development
> Phone: 512-838-4587 or Tie Line 678-4587
> Internet e-mail and Sametime ID: [EMAIL PROTECTED]
>
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: [EMAIL PROTECTED]
> For additional commands, e-mail: [EMAIL PROTECTED]
>

Reply via email to