I've been trying to figure out how to approach an integration framework based on Web Services (SOAP+WSDL+UDDI) and I'd appreciate your comments on what I've come up with.
The context is basically a corporation with a few centralized systems and a lot of heterogeneous local systems. The local systems need to communicate with the central systems and vice versa. Basically the starting point is that the local systems can speak XML but the message formats are different in almost all locations.
Now, to my idea.
I thought about creating a Broker which would accept very abstract requests along the lines of:
...where <thiscanbeanything is the message/syntax used by the local system and complies to the XML schema "SomeLocalRequestFormat". The <Response> element in turn defines the XML schema in which the response message is expected to be returned. The point here is that the client does not need to worry about message transformations -- "Here, take this and give me back the result as MySpecificSchema"...
The Broker receiving these heterogeneous messages would do the following:
1) Lookup a TransformationService from UDDI based on "source schema" and "target schema" and perform the translation (giving the <thiscanbeanything> element as input and receiving the "canonical" version of the message, understood by the centralized system.
2) Call the centralized service ("CentralizedServiceNumber123") by handing out the transformed version of the original message.
3) Receive response from centralized service and transform back into "local" format.
4) Return the response to the local system, the original requestor.
Does this seem solid so far?
My doubts include the following:
- How do I pass "any kind of" XML structure as a parameter to the Broker?
- What does the WSDL include for that part?
- What's the signature for the Java class's method (String or Element)?
- Can I still generate the WSDL automatically even though the input and output parameters are so abstract?
- How can I call the target service's specific without knowing what the input parameter really contains (the transformed message)?
- Can I call the target service with unknown input using WSIF to download the WSDL just-in-time (avoiding static compilation)?
All help is highly appreciated.