> -----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);
}
}
> 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