Hi Mark,

You're absolutely right .. and Axis2 will support the model you're
asking for. In particular, it does not assume that Java/XML binding
is a core part of the engine that the user must use. This is probably
one of the most fundamental changes in Axis2 vs. Axis1.

We're working to get a milestone 1 drop out soon. It would be great
if you could look at that and give your thoughts.

Bye,

Sanjiva.

----- Original Message ----- 
From: "Mark D. Hansen" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Friday, January 28, 2005 4:50 PM
Subject: RE: [Axis2] design direction related to Java/XML binding


> Thanks Alek - good points.  You may well be right that the performance hit
for "parsing twice" - once into the SOAP engine, and again into the XML-Java
binding "thingy" - may not be a big performance problem except with very
large messages.  I should run some performance metrics.  I have just been
assuming that my "toy" architecture would not scale at all.
>
> Actually, my interest is much less with performance than with usability in
a typical corporate (e.b., Fortune 500) infrastructure.  As I tried to point
out in the "ns:MyCompanyPO" toy example below, my sense is that opening up
the Axis architecture to make a wide range of XML-Java binding "thingies"
pluggable is IMHO important in order to meet the SOA/EAI requirements of
enterprise users.
>
> Different communities of users have different preferred XML-Java binding
approaches.  So, when you start looking at how practical it really is to use
web services as a technology for interoperability between these communities,
you quickly run into the problem that there is no "one size fits all"
mapping from (for example) <ns:purchaseOrder> ... </ns:purchaseOrder>
<--->  public class PurchaseOrder { ... }.  The web services approach to
integration says that these communities should standardize on a particular
schema for ns:purchaseOrder.  But for them to do that and keep their
existing PurchaseOrder { ... } they must have flexibility to use whatever
XML-Java binding mechanism gets them to/from their prefered implementation
of PurchaseOrder { ... }
>
> That is the main reason that I would like to see Axis2 go with a pluggable
XML-Binding approach.
>
> -- Mark
>
> > -----Original Message-----
> > From: Aleksander Slominski [mailto:[EMAIL PROTECTED]
> > Sent: Friday, January 28, 2005 4:22 AM
> > To: [email protected]
> > Subject: Re: [Axis2] design direction related to Java/XML binding
> >
> >
> > Mark D. Hansen wrote:
> >
> > >I recently read the JIRA AXIS-1498 discussion on pluggable
> > XML transformations
> > (http://issues.apache.org/jira/browse/AXIS-1498) with great interest.
> > >
> > >Has the team decided how this will work in Axis2?  I'm
> > working on a web services based SOA framework and am creating
> > a "toy" mechanism to allow pluggable/portable [de]serializers
> > on top of any JAX-RPC implementation.  Of course, it is very
> > inefficient because you first have to let the JAX-RPC
> > implementation turn the XML stream in to a SAAJ SOAPElement
> > (JAX-RPC API doesn't give access to the XML stream), and then
> > apply the XML-Java binding mechanism (e.g., JAXB, Castor,
> > XMLBeans, or whatever) to complete the deserialization into
> > the desired Java object.
> > >
> > >
> > did you measure how "inefficient" it is? try different sizes
> > of XML and
> > different XML parsers and you may be surprised with results.
> >
> > >As suggested in AXIS-1498, it seems to me that a SOAP engine
> > ideally would parse just the SOAP header (so handlers can do
> > their thing) and the outer elements of the SOAP Body (to
> > identify the WSDL operation as in the doc/lit case where
> > method name shows up as a wrapper element around the
> > parameters).  At this point, parsing the actual "meat" should
> > be handed off to whatever XML-Java binding mechanism the user
> > decides to plug in.  In this manner, if I want to deploy a
> > method void foo(Bar b), then the SOAP engine would handle it
> > as follows:
> > >
> > >Incoming SOAP message looks like:
> > >
> > ><env:Envelope xmlns:env="http://www.w3.org/2003/05/soap-envelope";>
> > >  <env:Header>
> > >  ...
> > >  </env:Header>
> > >  <env:Body>
> > >    <n1:foo>
> > >      <n2:Bar>
> > >      ... serialization of an instance of a Bar ...
> > >      </n2:Bar>
> > >    </n2:foo>
> > >  </env:Body>
> > ></env:Envelope>
> > >
> > >(1) SOAP engine parses <env:Header> and hands off to
> > handlers as appropriate
> > >(2) SOAP engine parses <env:Body><n1:foo>, but then hands off ...
> > >(3) the parsing and deserialization of <n2:Bar> to the
> > XML-Java binding mechanism deployed along with the method
> > void foo(Bar b).
> > >
> > >In this manner, deployment of a Java method as a web service
> > would allow the deployer to specify the XML-Java binding
> > framework.  This is similar to how custom type mappings can
> > be deployed in Axis, except that it goes a step further than
> > just allowing the custom specification of an Axis style
> > [de]serializer, but instead enables custom specification of
> > the entire XML-Java binding framework.
> > >
> > >
> > i think that it would be handy to be able to deserialize and use
> > flexibility in of XML-Java binding for headers too.
> >
> > >Why is this useful?  Because one problem with current SOAP
> > engines is that they limit the set of XML types that you can
> > map your Java classes to when deploying a service.  Suppose
> > I've got a class named PO that I want to deploy via something
> > like void processPO(PO po).  Say my company has standardized
> > on a particular XML representation of a PO: ns:MyCompanyPO.
> > When I deploy processPO(PO po), I'd like to be able to accept
> > instances of ns:MyCompanyPO without having to write a custom
> > Axis deserializer to do that because, chances are that I've
> > got a good deserializer for ns:MyCompanyPO that maps to the
> > java class PO.  It might be a custom deserializer, or JAXB,
> > or Castor, or XMLBeans, or whatever.  But whatever it is, I
> > ought to be able to plug it in to Axis without paying a huge
> > performance penalty
> > >
> > i think the performance penalty becomes visible only for
> > large messages
> > so if you are processing lot of small messages then supporting XML
> > streaming infrastructure may be actually more expensive then
> > just parse
> > input into XML infoset optimized internal representation (this is
> > simpler and Java GC is very fast to get rid of it from memory when it
> > stays in short-lived heap).
> >
> > also when sending very big XML messages that needs to preserved then
> > using signed MTOM/XOP may be by far the best option (no need to worry
> > about XML namespaces/prefixes/c14n/etc nuances)
> >
> > > while Axis first parses ns:MyCompanyPO into its internal
> > Java representation or SAX events and then translating that
> > back into an XML stream that my deserializer can use.
> > >
> > >
> > i think it is more complicated in case when you want to do security
> > checks (is S:Body signed) or WS-RM (S:Body and whole
> > S:Envelope may need
> > to be saved until more messages arrive to create sequence).
> >
> > in general all streaming disappears as soon as anybody
> > mentions message
> > level security or reliable messaging ;-)
> >
> > >Another advantage of this approach relates to JAX-RPC 2.0.
> > Supporting this standard should be relatively straightforward
> > if Axis2 adopts the approach outlined here.  Just plug in any
> > JAXB 2.0 implementation as the XML-Java binding framework and
> > all the type mapping and [de]serialization behavior mandated
> > by the JAX-RPC 2.0 spec is done.
> > >
> > >Does this make sense to any of you Axis2 developers?  I'd
> > appreciate any feedback.
> > >
> > >
> > it sounds good :)
> >
> > i am sure it would be useful for AXIS2 to have detailed examples
> > (scenario + WSDL + Java code that uses classes from XML
> > databinding to
> > do something) and revisit how such use cases can be (or not)
> > implemented
> > in AXIS2.
> >
> > personally i am leaning towards parsing a XML message into some very
> > lightweight in-memory representation (akin AXIOM) that may support
> > on-demand parsing of S:Body into XML event stream that is redirected
> > into XML-Java databinding "thingy" but as well databinding
> > "thingy" can
> > enclose existing XML Infoset tree.
> >
> > as support for as complete as possible XML Schemas is needed more and
> > more then i like to use XMLBeans (seems to be the best of
> > Castor, JAXB1,
> > JaxMe, and even JAXB2 especially that the last one is only in plans)
> > even though there are very limited ways to integrate with XMLBeans
> > internal XML infoset representation - in some ways XMLBeans is very
> > greedy as it wants to parse whole S:Envelope not just content of Body
> > whereas i would like it to create a XMLBeans "view" over an
> > existing XML
> > infoset representation (like for S:Header headers elements or
> > DOM:Element after S:Body verification).
> >
> > just my .02c
> >
> > alek
> >
> > -- 
> > The best way to predict the future is to invent it - Alan Kay
> >
>
>

Reply via email to