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]
>