> -----Original Message-----
> From: Liu, Jervis [mailto:[EMAIL PROTECTED]
> Sent: 2007年12月29日 13:23
> To: [email protected]
> Subject: RE: Significant changes to Aegis API
> 
> 
> 
> > -----Original Message-----
> > From: Benson Margulies [mailto:[EMAIL PROTECTED]
> > Sent: 2007年12月29日 5:42
> > To: cxf-dev
> > Subject: Significant changes to Aegis API
> >
> > Goaded by Dan D, I went and refactored Aegis in the direction of having
> > a package like JAXB and XmlBeans that could be used independently of
> > CXF.
> >
> > It's not done, but I have the code considerably closer.
> >
> > However, in the process, I've incompatibly changed the API for
> > configuring an Aegis service. Instead of expecting various values to be
> > stuck into a properties of endpoints or services, the configurable items
> > really are just (Spring-configurable) properties of objects.
> >
> > In practical terms, instead of throwing property maps into factories, an
> > app would want to explicitly create an AegisContext, put it into an
> > AegisDatabinding, and put that into a service factory.
> >
> 
> Excellent, I am looking forward to this API. This is IMHO, what we really
> need if Aegis binding is to become a standalone data binding that can be
> used outside CXF. Think about the JSR-311 Aegis EntityProvider question I
> raised previously, this use case is about using Aegis binding to
> marshal/unmarshal data in a JSR-311 runtime. If this Aegis EntityProvider
> works, we can not only use it in CXF JSR-311 implementation, but also other
> JSR-311 runtimes, such as Jersey.
> 
> The usage of Aegis binding in JSR-311 EntityProvider may look like below,
> very similar to JAXB binding:
> 
> public final class AegisEntityProvider implements EntityProvider<Object> {
>     public Object readFrom(Class<Object> type, MediaType m,
> MultivaluedMap<String, String> headers,
>                            InputStream is) {
>       AegisContext context = getAegisContext (obj.getClass());
>       AegisDatabinding binding = new AegisDatabinding(context);
>       DataReader reader = binding.createReader(XMLStreamReader.class);
>       XMLStreamReader input =
> XMLInputFactory.newInstance().createXMLStreamReader(is, encoding);
>       Object obj = reader.read(type, input);
>       return obj;
>     }
> 
>     private AegisContext getAegisContext(Class type) {
>         //AegisContext can be registered with a Class, or a directory that
> contains type classes.
>         context = AegisContext.newInstance(type);
>     }
> }


It's even better if we can hide the creation of XMLStreamReader. Same as JAXB 
Unmarshaller:

public Object readFrom(Class<Object> type, MediaType m, MultivaluedMap<String, 
String> headers, InputStream is) {
       AegisContext context = getAegisContext (obj.getClass());
       AegisUnmarshaller unmarshaller = context.createUnmarshaller();
       return unmarshaller.unmarshal(is);       
}

Internally, we could do:

public Class AegisContext  {
    AegisUnmarshaller createUnmarshaller() {
        AegisDatabinding binding = new AegisDatabinding(this);
        DataReader reader = binding.createReader(XMLStreamReader.class);
        //
        AegisUnmarshaller u = new AegisUnmarshaller(binding, reader);
        return u;               
    }
}

public Class AegisUnmarshaller {
    DataReader reader;
   
    public AegisUnmarshaller (DataReader reader) {
    }

    Object unmarshal (InputStream is) {
         XMLStreamReader input = 
XMLInputFactory.newInstance().createXMLStreamReader(is, encoding);
         ....          
    }
}

> > If this really upsets people, I can, I suppose, graft a compatibility
> > scheme back into the Databinding object which looks for properties and,
> > if present, uses them to initialize.
> >
> > I guess I'll do this unless I hear voices opposed.
> >
> > The doc is another question; I can always add boxes to the doc that say
> > '2.0.x versus 2.1'.
> >
> > My efforts in the process to really understand the use of the 'encoding
> > URIs' remain disappointing. Some places they really are encoding URIs.
> > Some places they are service target namespaces. And one place it has to
> > the the special URL usually associated with the XSD prefix, or the WSDLs
> > that come out of Aegis come out completely wrong.
> >
> 
> ----------------------------
> IONA Technologies PLC (registered in Ireland)
> Registered Number: 171387
> Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

----------------------------
IONA Technologies PLC (registered in Ireland)
Registered Number: 171387
Registered Address: The IONA Building, Shelbourne Road, Dublin 4, Ireland

Reply via email to