On 8/13/07, R J Scheuerle Jr <[EMAIL PROTECTED]> wrote:
>
> Rich Scheuerle
> IBM Web Services
> Apache Axis2 ([EMAIL PROTECTED])
> 512-838-5115 (IBM TL 678-5115)
>
> "Amila Suriarachchi" <[EMAIL PROTECTED]> wrote on 08/13/2007
> 09:10:10 AM:
>
> >
>
> > On 8/10/07, R J Scheuerle Jr <[EMAIL PROTECTED]> wrote:
> > Rich Scheuerle
> > IBM Web Services
> > Apache Axis2 ([EMAIL PROTECTED])
> > 512-838-5115 (IBM TL 678-5115)
> >
> > "Amila Suriarachchi" <[EMAIL PROTECTED]> wrote on
> > 08/09/2007 11:02:18 PM:
> >
> > Thanks for the questions, Amila.
> > > hi,
> > > what type of object you expect in the
> > > public Object getObject();
> > >
> > > method in OMDataSourceExt interface.
> >
> > The getObject() allows access to the object backed by the
> OMDataSourceExt.
> > See the new CharArrayDataSouce as an example.  It returns the char[].
> >
> > >
> > > When building the OMElement currently OMDataSource calls to
> > > getReader() to get the XmlStreamReader and creates the
> > >
> > > OMElement from it. Can I directly send the OMElement (already build)
> > > using that interface?
> >
> > Is this the scenario ?
> >   1) There is a OMSourcedElement backed by an OMDataSource.
> >   2) A query is made on the OMSourcedElement that causes a
> > forceExpand.  (For example, getFirstChild() is called on the
> > OMSourcedElement.)
> >   3) The OMSoucedElementImpl.forceExpand() method calls
> > OMDataSource.getREader() and uses it to build the OM sub-tree.
> >
> > yes.
> >
> > I believe your suggestion is:
> >   A) During forceExpand() invoke OMDataSourceExt.getObject().
> >
> >   A1) If the returned Object is an OMElement, then
> >       * Add the attributes/namespace of the OMElement to the
> OMSoucedElement.
> >       * Add the children of the OMElement to the OMSoucedElement.
> >       (This effectively eliminates the XMLStreamReader parse).
> >
> >   A2) If the returned Object is not an OMElement, then fallback to
> > the old logic.
> >
> > I think this would be a valuable follow-on to the original
> > contribution.  Comments ?
> >
> > I am not much familiar with the  Axiom inside but I think this is what I
> need.
> >
> > Let me explain this a bit.
> >
> > ADBDatasource class is like this.
> >
> > public abstract class ADBDataSource implements OMDataSource {
> >     protected QName parentQName;
> >     private ADBBean bean;
> >
> >
> >     protected ADBDataSource(ADBBean bean, QName parentQName) {
> >         this.bean = bean;
> >         this.parentQName = parentQName;
> >     }
> >
> >     public void serialize(OutputStream output, OMOutputFormat
> > format) throws XMLStreamException {
> >         XMLStreamWriter xmlStreamWriter = StAXUtils.
> > createXMLStreamWriter(output);
> >         serialize(xmlStreamWriter);
> >         xmlStreamWriter.flush();
> >     }
> >
> >     public void serialize(Writer writer, OMOutputFormat format)
> > throws XMLStreamException {
> >         serialize(StAXUtils.createXMLStreamWriter(writer));
> >     }
> >
> >      public void serialize(XMLStreamWriter xmlWriter) throws
> > XMLStreamException{
> >         MTOMAwareXMLStreamWriter mtomAwareXMLStreamWriter = new
> > MTOMAwareXMLSerializer(xmlWriter);
> >         serialize(mtomAwareXMLStreamWriter);
> >     }
> >
> >     public abstract void serialize(MTOMAwareXMLStreamWriter
> > xmlWriter) throws XMLStreamException;
> >
> >
> >     public XMLStreamReader getReader() throws XMLStreamException {
> >         // since only ADBBeans related to elements can be serialized
> >         // we are safe in passing null here.
> >         MTOMAwareOMBuilder mtomAwareOMBuilder = new
> MTOMAwareOMBuilder();
> >         serialize(mtomAwareOMBuilder);
> >         return mtomAwareOMBuilder.getOMElement().getXMLStreamReader();
> >     }
> >
> > }
> >
> > getReader method expect an XMLStreamReader. So what ADBDataSouce
> > does is it creates an OMElement using the MTOMAwareOMBuilder and
> > serialize method. Then gets the XMLStreamReader from this.
> >
> > So In this process Two OMElements are created (1. OMElement axiom
> > created using Xmlstream reader and intermediate OMElement created by
> > ADBDataSource. So if I can pass the created OMElement directly we
> > have to create only one OMElement.
>
> So there seems to be two patterns here:
>    1) Some OMDataSources build a complete OM tree as a side effect of
> getReader() (e.g. ADBDataSource)
>    2) Some DataSources don't require an intermediate OM Tree (e.g.
> ByteArrayDataSource)
>
> One solution is to add a new method to OMDataSourceExt.
>      /**
>       * Returns either an XMLStreamReader or fully built OMElement.
>       * For some OMDataSource implementations, it is more efficient for
> the datasource to return
>       * an XMLStreamReader.  In other OMDataSourceImplementations it is
> faster to return
>       * a fully built OM tree.
>       * @return XMLStreamReader or OMElement
>       */
>      public Object read();
>
> Then change OMSourcedElement.forceExpand() to handle either the
> XMLStreamReader or OMElement case.
> (For the OMElement case, the children and attributes would be copied to
> the OMSourcedElement tree)
>
> Your ADBDataSource would be coded as:
>
> public Object getReader() throws XMLStreamException {
>     MTOMAwareOMBuilder mtomAwareOMBuilder = new MTOMAwareOMBuilder();
>     serialize(mtomAwareOMBuilder);
>      return mtomAwareOMBuilder.getOMElement();
> }
>

yes. this is what i need.

>
> > Amila.
>
> >
> > >
> > > Amila.
> >
> > >
> >
> > > On 8/9/07, R J Scheuerle Jr < [EMAIL PROTECTED]> wrote:
> > > I have added some much needed upgrades to
> OMDataSource/OMSourcedElement.
> > >
> > > Here is the JIRA with the discussion and code/test patch.
> > > https://issues.apache.org/jira/browse/WSCOMMONS-232
> > >
> > > These changes will make it easier for users to access and plug in
> > > OMDataSource objects.
> > > It also provides a public interface for OMSourcedElement.
> > >
> > > The changes will not affect any existing code that relies on
> > > OMDataSource or OMSourcedElement.
> > >
> > > Please reply with your comments.  I will commit this code to Axiomon
> Friday.
> > >
> > > Thanks,
> > >
> > > Rich Scheuerle
> > > IBM Web Services
> > > Apache Axis2 ([EMAIL PROTECTED])
> > > 512-838-5115  (IBM TL 678-5115)
> > >
> > >
> > >
> > > --
> > > Amila Suriarachchi,
> > > WSO2 Inc.
> >
> >
> >
> > --
> > Amila Suriarachchi,
> > WSO2 Inc.
>
>


-- 
Amila Suriarachchi,
WSO2 Inc.

Reply via email to