Hi,

More updates on this topic.

1) I changed the Operation model to take an inputType, an outputType and a list of faultTypes. The inputType is a special DataType with its logical type representing the parameters. For a java method, the inputType looks like:

databinding: "java:parameters" (for the Object[] --> Object[] conversion)
physical: "java.lang.Object[]"
logical: List<DataType<T>> (A list of DataTypes, each element in the list representing a parameter type. The list is empty for no-arg.

2) Add speical databindings/transformers to represent the inputTypes from different IDLs so that we can perform payload transformations. For example, Object[] --> Object[] and Object[] --> OMElement.

3) Add "isWireable(ServiceContract source, ServiceContract target)" to the WireService and provide an implementation in JDKWireService. Right now, I relax the the checking on remotable operations so that only name is matched.

3) A databinding sample based on the dummy EchoBinding with the on-demand transformation across the following two interfaces.

@DataType(name="java.lang.String")
@Remotable
public interface Interface1 {
   Object call(Object msg);
   Object call1(Object msg);
}

@DataType(name="org.w3c.dom.Node") // interface-level
@Remotable
public interface Interface2 {
   Node call(Node msg);
   @DataType(name="javax.xml.stream.XMLStreamReader") // operation-level
   XMLStreamReader call1(XMLStreamReader msg);
}

And here's the result:

ComponentA --> Received message: <foo>123</foo> [java.lang.String]
ComponentB --> Received message: [#document: null] [org.apache.xerces.dom.DeferredDocumentImpl] ComponentB --> Returned message: [#document: null] [org.apache.xerces.dom.DeferredDocumentImpl] ComponentA --> Returned message: <?xml version="1.0" encoding="UTF-16"?><foo>123</foo> [java.lang.String]
ComponentA --> Received message: <foo>123</foo> [java.lang.String]
ComponentB --> Received message: [EMAIL PROTECTED] [org.apache.axiom.om.impl.llom.OMStAXWrapper] ComponentB --> Returned message: [EMAIL PROTECTED] [org.apache.axiom.om.impl.llom.OMStAXWrapper]
ComponentA --> Returned message: <foo>123</foo> [java.lang.String]

Accidentally, I verified the two-hop transformations from XMLString --> AXIOM --> XMLStreamReader and the reverse because I forgot to register the direct transformers. :-)

4) Several issues that are worked around

1. I have to add "addInterceptor(int index, Interceptor interceptor)" method to the InvocationChain so that I can add the DataBinding interceptor before the TargetInvokerInterceptor.

2. There's no component init dependency accross composites. In my case, some transformers from databinding-axiom have dependencies on databinding-framework which is still an extension at this moment. I have to add the "databinding.scdl" to the "test" to make it part of the "core".

I think I'm ready to check in the changes so that other folks can help if there's no objections.

Thanks,
Raymond

----- Original Message ----- From: "Jeremy Boynes" <[EMAIL PROTECTED]>
To: <[email protected]>
Sent: Thursday, September 07, 2006 11:47 AM
Subject: Re: Update on the databinding integration and open issues for discussion


On Sep 7, 2006, at 11:26 AM, Raymond Feng wrote:
I propose that we change the Operation model as follows:

Operation
   --- name (Name of the operation)
--- inputType (For java, it's a DataType representing the Object []. For WSDL, it could be a DataType representing the top-level request element using Axiom or other databindings) --- outputType (For java, it's a DataType representing the returnType. For WSDL, it could be a DataType representing the top- level response element using Axiom or other databindings) --- faultTypes (A list of DataTypes representing the faults/ exceptions)

OK

DataType
   --- databinding
   --- phsicalType
   --- logicalType
--- properties (A list of DataProperty(s) for the DataType to represent the visible children)

Why properties? For example, a Java argument list does not have named parameters (in the source yes but not in the public contract).
Can we just use:
  physicaltype: Object[].class
  logicalType: Class[]{Customer.class, String.class}
and
  physicalType: OMElement.class
  logicalType: QName{http://example.com, order}


DataProperty
   --- name (QName of the property)
   --- type (DataType for the property)

QName only makes sense for XML - what would that be in the Java case?

For the DataType/DataProperty recursion, we don't have to go too deep. For example, we may only require a list of properties for the DataType for the inputType.

There's something fishy here if the properties only apply in certain use cases.
--
Jeremy


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]



---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to