how do you think about about an adapter in the Un~/marshallerHandler layer
like this:
class UnmarshalHandlerAdapter{
public UnmarshalHandlerAdapter(XMLStreamReader staxStreamReader,
UnmarshalHandler unmarshalHandler){
...
}
public void adapt(){
int depth = 0;
int event = staxStreamReader.getEventType();
if (event == XMLStreamConstants.START_DOCUMENT) {
while (!staxStreamReader.isStartElement()) event =
staxStreamReader.next();
}
unmarshalHandler.startDocument();
...
do ({
switch (event) {
case XMLStreamConstants.START_ELEMENT:
depth++;
...
unmarshalHandler.startElement (uri, localName,
qName, atts);
break;
case XMLStreamConstants.END_ELEMENT:
...
unmarshalHandler.endElement (uri, localName, qName);
depth--;
break;
case XMLStreamConstants.CHARACTERS:
unmarshalHandler.characters();
break;
...
...
default:
...
}
event = staxStreamReader.next();
} while (depth != 0);
unmarshalHandler.endDocument();
}
}
2008/4/3, Werner Guttmann <[EMAIL PROTECTED]>:
>
> Hi Jiantan,
>
> looking at your ideas, I wonder whether this approach is a good one
> (though it is a valid one). Let me try to express my thoughts (slightly
> unstructured):
>
> - Is is really a good idea to expose the technologies we are using
> internally to parse an XML document to the user. In other words, should the
> user know and explicitely have to use classes that carry names that are
> linked to a technology such as SAX or STaX ? Is there a way to make this
> more transparent ?
>
> - Would it be possible to layer the approaches ? Personally, I see the
> main benefits of a STaX parser in the context of XML data binding that it
> would be absolutely easy to restrict the scope of processing during e.g.
> unmarshalling. In other words, within a biggish XML document navigate to a
> (smaller) subset and only use this subset as the input for unmarshalling.
> Such a layering could be achieved by creating an adapter that sits between
> the StAX parser and the UnmarshalHandler (which implements SAX
> ContentHandler), and translates STaX events into SAX events. This way, we
> would avoid having to completely write a new STaXUnmarshalHandler (and all
> the logic currently sitting in UnmarshalHandler).
>
> Werner
>
>
> 建坛林 wrote:
>
> > 1.introduction marshalling is the processing of convert a Object into
> > xml(or other structured) file, while unmarshalling is the reverse processing
> > of marshalling. This techonology is very useful in data binding and data
> > transfering.
> > Marshaller/Unmarshaller is the very object that responsible for doing
> > these work. For marshaller/unmarshaller to do the marshalling work, it need
> > the help of a xml parser. There are two kinds of xml parser nowaday:one is
> > based on dom model, the other is based on stream model.As to the latter one,
> > we got sax and stax. sax is a push parser, while stax is a pull parser. I
> > think castor's purpose of switching between the sax and stax is to make
> > castor more adaptive to different situations.
> >
> > 2.solution
> >
> > i think the work should be done to the class Marshaller and
> > UnMarshaller in Castor source.
> > Make Marshaller.java,UnMarshller
> > .java upper class instead of final class
> > class Marshaller {
> > private int parserType;
> > Marshaller marshaller = new SAXMarshaller() ;
> > ...
> > public static void marshal(Object obj,Writer writer);
> > public static void marshal(Object obj,int parserType);
> > public static void marshal(Object obj,Marshaller marshaller);
> > ...
> > public void setMarshaller(Marshaller marshaller);
> > public Marshaller getMarshaller();
> > ...
> > }
> > class UnMarshaller {
> > private int parserType;
> > UnMarshaller unMarshaller = new SAXUnMarshaller()
> > public Object unmarshal(InputSource in){
> > unMarshaller.unmarshal(in);
> > }
> > public Object unmarshal(InputSource in, int parserType);
> > public Object unmarshal(InputSource in,UnMarshaller unmarshaller);
> > ...
> > public void setUnMarshaller(UnMarshaller unMarshaller);
> > public UnMarshaller getUnMarshaller();
> > ...
> > }
> > this Un~/Marshaller keeps the common methods of SAXMarshaller and
> > StaxMarshaller,
> > default use a SAXMarshller in order to make the existed code
> > unchanged;we change the Marshaller by using the specific constructor and
> > setUn~/Marshaller method. In this case,
> > it's flexible to switch from sax to stax,vice versa. It seems this
> > pattern is much more like
> > the strategy pattern. we just abstract the algorithm of un~/Marshal. and
> > it's flexible to
> > switch between these algorithm.
> >
> > the former Marshaller.java can be a SAXMarshller.java and
> > SAXUnMarshaller.java.
> > class SAXMarshaller extends Marshaller {
> > ...
> > }
> >
> > class SAXUnMarshaller extends UnMarshaller {
> > ...
> > }
> >
> > we can add by the following new Implementation of Marshaller
> > class StaxMarshaller implements Marshaller {
> > ...
> > }
> >
> > class StaxUnMarshaller implements UnMarshaller {
> > ...
> > }
> >
> >
> > make MarshallingHandler ,UnMarshallingHandler upper class instead of
> > final class just like
> > we did to Marshaller,UnMarshller
> >
> > the specific work we have to do is in implemented a new
> > StaxMarshallerHandler and StaxUnMarshallerHandler
> >
> > to implement the Un~/Marshalling in stax way
> >
> > class SAXMarshallingHandler extends MarshallingHandler {
> > }
> >
> > class SAXUnMarshallingHandler extends UnMarshallingHandler {
> > }
> >
> > class StaxMarshallingHandler extends MarshallingHandler {
> > }
> >
> > class StaxUnMarshallingHandler extends UnMarshallingHandler {
> > }
> > And the specific implementation of StaxMarshallingHandler is associated
> > with how to map
> > a object to xml(and the reverse process).The detail of this can refer
> > the implementation
> > of StaxMarshallingHandler(former MarshallingHandler).
> >
> > 3.self-introduction
> > http://docs.google.com/Doc?docid=dc42tcq9_88gtxts6fv&hl=en <
> > http://docs.google.com/Doc?docid=dc42tcq9_88gtxts6fv&hl=en>
> >
> >
> > Jiantan Lin
> >
> >
> > 2008/4/3, Werner Guttmann <[EMAIL PROTECTED] <mailto:
> > [EMAIL PROTECTED]>>:
> >
> > HI,
> >
> > I have recently asked all the students that have submitted an
> > application to be mentored by one of the existing Castor committer
> > sto subscribe to this mailing list, so that we can ask questions
> > about their proposal and vice versa.
> >
> > Can I please ask all students to introduce themselves briefly, and
> > once again describe their proposals. It's especially the benefits
> > for the project that I am personally interested in.
> >
> > Thanks
> > Werner
> >
> > ---------------------------------------------------------------------
> > To unsubscribe from this list, please visit:
> >
> > http://xircles.codehaus.org/manage_email
> >
> >
> >
> >
>
> ---------------------------------------------------------------------
> To unsubscribe from this list, please visit:
>
> http://xircles.codehaus.org/manage_email
>
>
>