DataBinding Echo Sample ======================= This sample demonstrates how databindings are used to convert data formats as the data flows between components. The README in the samples directory (the directory above this) provides general instructions about building and running samples. Take a look there first. If you just want to run it to see what happens, open a command prompt, navigate to this sample directory, and do ant run OR if you don't have ant, on Windows do java -cp ..\..\lib\tuscany-sca-manifest.jar;..\binding-echo-extension\target\sample-binding-echo-extension.jar;target\sample-databinding-echo.jar dbecho.EchoDataBindingClient and on *nix do java -cp ../../lib/tuscany-sca-manifest.jar:../binding-echo-extension/target/sample-binding-echo-extension.jar:target/sample-databinding-echo.jar dbecho.EchoDataBindingClient Sample Overview --------------- If reference and service interfaces are the same in all but the formats of data being passed to and returned from the operations of the interfaces, then SCA will try to apply appropriate transformations to the data formats to allow messages to pass. This sample shows this happening. ComponentA implements Interface1 which defines; String call(String msg) String call1(String msg) ComponentA defines a reference to ComponentB with Interface1. ComponentB however implements Interface2 which defines; Node call(Node msg); XMLStreamReader call1(XMLStreamReader msg); You can see from the test output below that SCA converts the call() msg from a String to a DOM object (org.apache.xerces.dom.DeferredDocumentImpl). It converts the call1() msg from a String to a XML stream reader (com.ctc.wstx.sr.ValidatingStreamReader). databinding-echo/ src/ main/ java/ dbecho/ ComponentAImpl.java - component implementation ComponentBImpl.java - component implementation Echo.java - service interface with data binding EchoDataBindingClient.java - sample client code Interface1.java - service interface with data binding Interface2.java - service interface with data bindings resources/ META-INF/ services/ org.apache.tuscany.sca.core.ModuleActivator - specifies the module activation class to call EchoDataBinding.composite - composite definition wsdl/ echo.wsdl - WSDL deinitions test/ java/ dbecho/ EchoDataBindingTestCase.java - junit test case databinding-echo.png - pictorial representation of the sample .composite file build.xml - the Ant build file pom.xml - the Maven build file TODO - Needs more description of what else is going on in this test properties, wsdl? Building And Running The Sample Using Ant ----------------------------------------- With the binary distribution the sample can be built and run using Ant as follows. cd databinding-echo ant compile ant run You should see the following output from the run target. run: [java] [Property] prefix: ABC [java] [Property] prefix1: ABC [java] [Property] bar: BAR [java] ComponentA --> Received message: 123 [java.lang.String] [java] ComponentB --> Received message: [#document: null] [org.apache.xerces.dom.DeferredDocumentImpl] [java] ComponentB --> Returned message: [#document: null] [org.apache.xerces.dom.DeferredDocumentImpl] [java] ComponentA --> Returned message: 123 [java.lang.String] [java] [Property] prefix: ABC [java] [Property] prefix1: ABC [java] [Property] bar: BAR [java] ComponentA --> Received message: 123 [java.lang.String] [java] ComponentB --> Received message: com.ctc.wstx.sr.ValidatingStreamReader@4c444c44 [com.ctc.wstx.sr.ValidatingStreamReader] [java] ComponentB --> Returned message: com.ctc.wstx.sr.ValidatingStreamReader@4c444c44 [com.ctc.wstx.sr.ValidatingStreamReader] [java] ComponentA --> Returned message: 123 [java.lang.String] [java] call response = 123 [java] call1 response = 123 Building And Running The Sample Using Maven ------------------------------------------- With either the binary or source distributions the sample can be built and run using Maven as follows. cd databinding-echo mvn You should see the following output from the test phase. ------------------------------------------------------- T E S T S ------------------------------------------------------- Running dbecho.EchoDataBindingTestCase [Property] prefix: ABC [Property] prefix1: ABC [Property] bar: BAR ComponentA --> Received message: 123 [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: 123 [java.lang.String] [Property] prefix: ABC [Property] prefix1: ABC [Property] bar: BAR ComponentA --> Received message: 123 [java.lang.String] ComponentB --> Received message: com.ctc.wstx.sr.ValidatingStreamReader@74e274e2 [com.ctc.wstx.sr.ValidatingStreamReader] ComponentB --> Returned message: com.ctc.wstx.sr.ValidatingStreamReader@74e274e2 [com.ctc.wstx.sr.ValidatingStreamReader] ComponentA --> Returned message: 123 [java.lang.String] Tests run: 1, Failures: 0, Errors: 0, Skipped: 0, Time elapsed: 1.653 sec Results : Tests run: 1, Failures: 0, Errors: 0, Skipped: 0 This shows that the Junit test cases have run successfully.