Issue Details (XML | Word | Printable)

Key: TUSCANY-195
Type: Bug Bug
Status: Resolved Resolved
Resolution: Fixed
Priority: Blocker Blocker
Assignee: Unassigned
Reporter: Rick Rineholt
Votes: 0
Watchers: 0
Operations

If you were logged in you would be able to see more operations.
Tuscany

Load time EMF registering of URI to dynamic data object before static types can be registered.

Created: 15/Apr/06 05:08 AM   Updated: 27/Apr/06 03:14 PM
Return to search
Component/s: Java SCA Axis Binding Extension
Affects Version/s: None
Fix Version/s: None

Time Tracking:
Not Specified

Environment: ALL current build

Resolution Date: 27/Apr/06 03:14 PM


 Description  « Hide
The loading of the TypeHelper in ExternalWebServiceBuilder.createExternalWebServiceClient() line: 183 loads into the EMF registry the URI that most likely maps to a static generated type. But this is occuring at load/build time prior to even any statically generated application SDO's are in scope. Or before they can be registered by the application. This mapping is then done to DynamicDataObjects. This results in a class cast exception when the generated interface expects the static types and a DDO is supplied. My very limited understanding of EMF/SDO is that once the mapping is in place that subsequent registering of static types will not have any affect.


 All   Comments   Work Log   Change History   Subversion Commits      Sort Order: Ascending order - Click to sort in descending order
ant elder added a comment - 24/Apr/06 08:52 PM
I've changed this to blocker as it breaking WS interop testing as well.
Frank/Jeremy: On the IRC chat last Friday it sounded like you guys were working on this, hows that going and can I assign the JIRA to one of you?

Jean-Sebastien Delfino added a comment - 25/Apr/06 04:52 PM
Here's a hack to workaround this problem and get the WS interop tests to work:

in o.a.t.core.loader.assembly.ImportWSDLLoader, comment out lines 98 and 99:
                //XSDHelper xsdHelper = SDOUtil.createXSDHelper(context.getTypeHelper());
                //xsdHelper.define(xsdInputStream, null);

Defining the SDO metadata from the WSDL/XSD can be skipped if you have the generated SDO classes and call SDOUtil.registerStaticTypes(TheGeneratedFactory.class) as part of the initialization of one of your components.

This is just a temporary hack to unblock the WS testing (and it should help in the Bigbank scenario as well). This hack breaks other test cases which do not use static types (the TomcatIntegrationTestCases) so a clean fix needs to be provided for this bug ASAP, as most of us are blocked by it.

ant elder added a comment - 25/Apr/06 07:07 PM
This hack only works for externalServices, not for entryPoints. Clients can call SDOUtil.registerStaticTypes before calling the externalService, but I can't see how to do that for entryPoints.

The Tuscany runtime makes available the WS entryPoint, a WS request comes in and the XML needs to be converted to Java objects before the SCA componet is invoked. As nothing has registerged the SDO factory the result is a DynamicDataObject instead of the Objects the component is expecting. All the Axis2 binding code has to go on is the service interface class, and that has been dynamically gen'd from the WSDL so its not even the SEI class the component is using or even in the same class loader.

This is also why the TomcatIntegrationTestCases are broken with this hack applied.

ant elder added a comment - 26/Apr/06 06:27 PM
This still does not work for me for WS entryPoints with complex types after the changes to support import.sdo. It does work for simple types, eg, Ricks account WS from BB, but the interop.service in the sandbox does not. Hopefully its just me doing something wrong, could someone else have a go and confirm if it works for them or not?




Jean-Sebastien Delfino added a comment - 27/Apr/06 03:14 PM
This is now fixed. I've added the necessary <import.sdo> statements to the sca.module files and was able to run the test cases successfully.