On Tue June 16 2009 11:29:05 pm Sanjiva Weerawarana wrote: > +1 from me. > > So WSS4J is currently not really policy- aware .. that's done in Rampart. > I'd say that that's a WSS4J2 we're talking about right?
Possibly. Since pulling code from CXF/Rampart could just be additions to WSS4J, it could be a 1.6 type thing as well. Not really sure at this point. Dan > > Sanjiva. > > 2009/6/17 Daniel Kulp <dk...@apache.org> > > > 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 -- Daniel Kulp dk...@apache.org http://www.dankulp.com/blog