axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Jeff Barrett <barre...@us.ibm.com>
Subject Re: [Axis2] Post-1.3 mustUnderstand header validation proposal AXIS2-2853
Date Thu, 12 Jul 2007 15:31:23 GMT
Hi Sanjiva,

Thanks for responding so quickly!

> Why not just create a collection of all 
> the SOAPHeader elements which are yet not understood and pass them in 
> along with the MC? The engine knows what roles its acting in and should 
> only pass those MU headers that need to be dealt with for its roles.

My thoughts were:
(1) I thought some validators might know about more roles than the engine. 
 For example, a JAXWS application handler can indicate what roles it is 
valid for.  The engine doesn't care about these roles since they are 
JAXWS-specific; all it cares about is if there are any not-understood 
headers left after all the validators run.  That way we don't have to 
implement an API for components to register additional roles with the 
engine.
(2) I wasn't going to implement roles just yet, so passing in a null to 
the validators seemed like a good way to let each one decide what roles it 
wanted to default to.  Current AxisEngine semantics default to "all 
roles"; the JAXWS validator will default to NEXT and ULTIMATE_RECEVIER.

> Unless the validators are going to do anything beyond must understand 
> checking, how about s/SOAPHeaderValidator/SOAPMustUnderstandChecker/ ?

I think they will only do mustUnderstand checking, so that's fine.


Thanks,
Jeff

IBM Software Group - WebSphere Web Services Development
Phone: 512-838-4587 or Tie Line 678-4587
Internet e-mail and Sametime ID: barrettj@us.ibm.com

Sanjiva Weerawarana <sanjiva@opensource.lk> wrote on 07/11/2007 08:42:34 
PM:

> Hi Jeff,
> 
> Overall sounds ok but I don't see why we pass separate collections of 
> header QNames and String roles. Why not just create a collection of all 
> the SOAPHeader elements which are yet not understood and pass them in 
> along with the MC? The engine knows what roles its acting in and should 
> only pass those MU headers that need to be dealt with for its roles.
> 
> public interface SOAPHeaderValidator {
>    void validate (MessageContext mc, Collection notUnderstoodHeaders);
> }
> 
> Unless the validators are going to do anything beyond must understand 
> checking, how about s/SOAPHeaderValidator/SOAPMustUnderstandChecker/ ?
> 
> Sanjiva.
> 
> Jeff Barrett wrote:
> > 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: barrettj@us.ibm.com
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> > For additional commands, e-mail: axis-dev-help@ws.apache.org
> > 
> > 
> 
> -- 
> Sanjiva Weerawarana, Ph.D.
> Founder & Director; Lanka Software Foundation; http://www.opensource.lk/
> Founder, Chairman & CEO; WSO2, Inc.; http://www.wso2.com/
> Director; Open Source Initiative; http://www.opensource.org/
> Member; Apache Software Foundation; http://www.apache.org/
> Visiting Lecturer; University of Moratuwa; http://www.cse.mrt.ac.lk/
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
> For additional commands, e-mail: axis-dev-help@ws.apache.org
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: axis-dev-unsubscribe@ws.apache.org
For additional commands, e-mail: axis-dev-help@ws.apache.org


Mime
View raw message