I'd like to follow up and further refine some ideas about data binding improvements. Much of this was published by Raymond on the wiki road map page [1] and on earlier dev list discussions [2].

I am especially interested in the areas regarding MIME type and binary data support given here. I think these 3 facets are related.
- Use MIME types to model the databinding ids (for example, application/xml,
application/x-java-serialized-object, image/jpeg)
- Support MIME based binary data types (incuding the xmime extensions in
WSDL/XSD)
- Support annotations of a java type (for example, an InputStream can be
used to contain different formats of data) to further constrain the data
type (We could use the JAXB annotation for this purpose)

Earlier this week I put together a customer scenario that I thought would benefit from this kind of feature. I imagined an auto insurance claim business service where customers could submit claims (simple Java beans with info) along with digital images of receipts. I thought the images could be provided as an InputStream or byte[]. Something like this:
   <service name="ClaimService">
      <interface.java interface="insurance.ClaimService" />
<binding.ws uri="http://localhost:8080/insurance/ClaimService"/>
   </service>
And the claim service would be something like this:
   @Remotable
   public interface ClaimService {
      boolean submit( Claim claim, InputStream [] receiptImages );
   }

Here is where I run into a junction, and I would like to open up the discussion to other Tuscany developers. Ideally I would like the interface to be generic, so as not to constrain the data to one image type. Allow JPGs, GIFs, PNGs, and future image types. On the other hand, I would not like to saddle clients with lots of digging, testing, and formatting work to fit into a more specific data type on the interface. MIME types seem a useful means of conveying what is in the binary InputStream. However, I'd like to know the best place to specify this. Put it on the service interface? As an extra method input? As a generic? Some other form of annotation?

This same sort of content discussion also applies to Strings. What is in that String you are passing? Text? HTML? XML? Other? How should one specify it so that clients are services don't have to do lots of digging and testing on the String?

What do users think would be an improvement over passing unlabeled blobs (InputStream, byte [], String, etc.) around?

[1] http://cwiki.apache.org/confluence/x/oU8B
[2] http://markmail.org/message/4iazlvo23qq3tho4

--
Thanks, Dan Becker

Reply via email to