The more I think about this, the more I like it.   Porting existing code to 
3.0 becomes quite easy: just change:

public class MyBuilder implements AssertionBuilder{

to

public class MyBuilder implements AssertionBuilder<OMEelement>{

and it should be fine.   Obviously, those builders would only work when Axiom 
is available (ex: in Axis2) but that should be fine.   For builders we "build 
in" to Neethi or WSS4J, we can use either Element (if easier/complex) or StAX 
(simple things) to make them usable when Axiom isn't there.   

Anyway, I change my #3 proposal to this idea.   :-)

Dan



On Tue June 16 2009 2:45:54 pm Daniel Kulp wrote:
> Since we're going Java 5, the other option COULD be to make the
> AssertionBuilder interface something like:
>
> public interface AssertionBuilder<T> {
>    Assertion build(T element, AssertionBuilderFactory factory)
>   ...
> }
> where T could be Element, XMLStreamReader, or OEElement (or others in the
> future)  and do some "magic" in the AssertionBuilderFactory to do
> conversions back and forth as needed depending on what the registered
> Builder requires and what gets passed in.   Quite a bit more complex, but
> definitely more flexible.
>
> Dan
>
> On Tue June 16 2009 2:41:14 pm Daniel Kulp wrote:
> > On Tue June 16 2009 10:32:50 am Sanjiva Weerawarana wrote:
> > > The way Neethi works is that it basically uses Axiom only to implement
> > > the policy-domain specific parser to create the policy-domain specific
> > > object model. That is, it is TOTALLY internal.
> >
> > Not entirely.   The PolicyEngine object has public methods like:
> > Policy getPolicy(OMElement element)
> > that make it NOT totally internal.
> >
> > > Its of course possible to do without it, but that would make it that
> > > much harder to write a security policy parser for example as everything
> > > would have to be done directly in StAX instead of Axiom - a tree API is
> > > of course easier to deal with than a streaming API.
> >
> > That's a matter of opinion.  I personally find dealing with StAX quite
> > easy, but I'm completely used to it by now.  :-)
> >
> > That said, if you want to keep it a tree, I'm QUITE OK with using
> > org.w3c.dom.Element.   That would make my life MUCH easier as all the CXF
> > builders are already using it.   :-)       I mostly suggested StAX since
> > the writers are already using it.  Kind of a mirror thing.
> >
> > > That could could easily be factory'ed away but that would still require
> > > CXF and Axis2 to have their own domain specific builders. Have you
> > > evaluated the pain level of going down to StAX to do the building?
> >
> > The main point of what I'm trying to do with 3.0 is to make it so CXF and
> > Axis2 don't need their own domain specific builders.   We can share the
> > policy model objects, the builders that go with them, etc....    For
> > example, I know that several of the Rampart builders don't properly
> > record some of the attributes into the model.   I know cause I fixed them
> > in the CXF builders. It would be good to have a single set of builders
> > and models where we can both benefit from fixes such as that.
> >
> > However, that cannot happen until we agree on an API for the builders.
> > Using Axiom is a non-starter for me.   StAX or DOM Element is OK by me.
> > Doesn't matter which.  You have a preference between those two?   I'd be
> > happy either way.
> >
> > > I'm not sure what MEX impacts here .. Axis2 has a MEX module and
> > > there's no overlap/issue with Neethi's parsing model there. What am I
> > > missing?
> >
> > It mostly has to do if you get a Policy as an InputStream (MEX or from a
> > Policy repository via REST or similar), what is the most efficient way of
> > converting that stream into a usable Policy object.   InputStream -> StAX
> > -> builders is quite efficient requiring near 0 memory overhead during
> > the conversion.  However, policy docs are "generally" fairly smallish
> > (unless you are really nuts and LOVE policy docs ;-)  so doing an
> > InputStream -> some infoset model like Axiom/DOM -> builders is really
> > not THAT big of a deal.
> >
> > Dan
> >
> > > Sanjiva.
> > >
> > > 2009/6/16 Daniel Kulp <dk...@apache.org>
> > >
> > > > On Tue June 16 2009 1:41:25 am Sanjiva Weerawarana wrote:
> > > > > +1 Dan. Can you clarify #3 a bit please?
> > > >
> > > > Sure.   Basically, in order to make this workable at all (and worth
> > > > my time to
> > > > proceed down this course), we need to have an API that is palatable
> > > > by everyone involved.   The PRIMARY reason for the fork of some of
> > > > the Neethi stuff in CXF is the Axiom dependency which is not
> > > > acceptable for our core use
> > > > cases.   If that is eliminated, the fork in CXF can go away.    There
> > > > were two
> > > > main options I considered:
> > > >
> > > > 1) DOM element - this is currently what the CXF version uses.   This
> > > > is because things like WSDL4J DOM parses extensor elements (by
> > > > default) and spring provides configuration things as DOM elements and
> > > > such. Thus, it worked best for us.   However, for Axis2, that would
> > > > require flipping the Axiom stuff over to DOM mode which has
> > > > performance issues.
> > > >
> > > > 2) StAX - The proposal below is to use StAX.   The Policy objects
> > > > themselves
> > > > already use StAX for writing XML.   Thus, using it to read the xml
> > > > would make
> > > > it consistent.   Also, that makes it pretty easy for both Axis2 and
> > > > CXF to work with it.   Creating an XMLStreamReader from a DOM or
> > > > Axiom thing is "trivial" so whatever path you choose should work
> > > > fairly well. Plus, as we
> > > > go down the route of WS-MEX and other remote policy retrieval
> > > > mechanisms, it
> > > > would allow direct  StAX streaming.  (like directly from the HTTP
> > > > InputStream)
> > > >
> > > > Anyway, switching to StAX seemed to be the most palatable by both
> > > > parties. If we can agree on that, then the common policy objects and
> > > > stuff can become a
> > > > reality.
> > > >
> > > > Dan
> > > >
> > > > > Sanjiva.
> > > > >
> > > > > 2009/6/15 Daniel Kulp <dk...@apache.org>
> > > > >
> > > > > > Some of you have noticed some discussions on WSCOMMONS-299.  
> > > > > > I've also been
> > > > > > thinking about some of those issues and I DID have a discussion
> > > > > > with
> > > >
> > > > Glen
> > > >
> > > > > > Daniels at TSSJS about the possibility of starting work on a
> > > > > > Neethi
> > > >
> > > > 3.0.
> > > >
> > > > > > With the comments and stuff on WSCOMMONS-299, it might be time to
> > > >
> > > > really
> > > >
> > > > > > start
> > > > > > it.   Thus, I'd like to "svn cp" the trunk to a 2.x branch for
> > > > > > future maintenance and start making trunk 3.0.
> > > > > >
> > > > > > Things I'd like tackled for 3.0:
> > > > > >
> > > > > > 1) Java 5 - make the collections and everything typed.  Use Enums
> > > > > > where appropriate, etc....  Basically, general cleanup.   Also, I
> > > > > > see that
> > > >
> > > > many
> > > >
> > > > > > operations aren't threadsafe due to use of HashMap's with no
> > > > > > synchronization.
> > > > > > Possibly fix those with ConcurrentHashMaps or similar.
> > > > > >
> > > > > > 2) Better support for the nested policies as described in
> > > >
> > > > WSCOMMONS-299.
> > > >
> > > > > > 3) Change the builders to use XMLStreamReader.   The Policies use
> > > > > > XMLStreamWriter.  For consistency, using the reader is preferred.
> > > >
> > > > This
> > > >
> > > > > > also
> > > > > > removes Axiom as a dependency making the requirement list
> > > > > > smaller.
> > > > > >
> > > > > > 4) With (3) fixed, most of the Neethi "fork" we have in CXF can
> > > > > > be
> > > >
> > > > ported
> > > >
> > > > > > back.  CXF has a few utilities and such that would be good to
> > > > > > push back and then remove from CXF.
> > > > > >
> > > > > > 5) Once all of that is done, it would open up the door to allow
> > > > > > some
> > > >
> > > > more
> > > >
> > > > > > "common" Policies objects for standard policies.   Some could be
> > > > > > in Neethi directly (things like policies objects for
> > > > > > WS-Addressing assertions, mtom stuff, etc...).    Others, like
> > > > > > the
> > > > > > WS-SecurityPolicy stuff could either go into Neethi or might be
> > > > > > better in WSS4J.   This could help eliminate a BUNCH
> > > > > > of duplicate code between users of Neethi, particularly CXF and
> > > >
> > > > Rampart.
> > > >
> > > > > > (maybe if I keep pushing similar code down into commons, we can
> > > > > > have a big merger in the future.  Acxfis 3?  Maybe not.  :-) )
> > > > > >
> > > > > > 6) Support for WS-Policy 1.5.
> > > > > >
> > > > > > Anyway, if no one really objects to starting the 3.0 work, I'd
> > > > > > like to create
> > > > > > the 2.x branch later this week.    Thoughts?
> > > > > >
> > > > > > BTW: This is also why I STRONGLY am in favor of Neethi staying in
> > > >
> > > > commons
> > > >
> > > > > > and
> > > > > > not going to an Axis2 TLP.
> > > > > >
> > > > > > --
> > > > > > Daniel Kulp
> > > > > > dk...@apache.org
> > > > > > http://www.dankulp.com/blog
> > > >
> > > > --
> > > > Daniel Kulp
> > > > dk...@apache.org
> > > > http://www.dankulp.com/blog

-- 
Daniel Kulp
dk...@apache.org
http://www.dankulp.com/blog

Reply via email to