As with many things concerning Web Services, there are
vociferous arguments for and
against WSDL (even before
WSDL 2.0 poured oil on the fires). One of the main arguments against
WSDL is the verbosity and complexity of what's involved in writing a WSDL for a service. However, the
Relax-WS project is attempting to provide a solution there. As the project page so aptly puts it:
WSDL is a key technology for SOA, and yet creating and editing these files is about as much fun as straightening all the noodles in a bowl of spaghetti with a pair of tweezers.
They idea is to extend
Relax-NG Compact Syntax by adding support for services, ports, operations and messages. The project aims to encourage developers to think about the WSDL from the start, as part of the service contract and not as an after thought:
The programmer begins with a WSDL file, and as part of the build generates the service interface that is then implemented by one or more classes. The challenge here lies in creating the WSDL!
So for instance a relatively simple service could be defined as:
#
# This is "hello world" in relax-ws.
#
service Hello {
port {
operation SayHello {
in {
element name {xsd:string}
}
out {
element message {xsd:string}
}
}
}
}
And Relax-WS would then generate the associated WSDL automatically. But does this really help isolate the developer from WSDL? It it sufficient to silence some of the
WSDL critics? As one of the comments on
James Strachan's blog states:
Definitely cool, but doesn't this suffer from the same shortcomings it claims to fix: "code-driven development........is fast for development, but can easily result in platform-specific features sneaking in, which renders the interface unusable for cross-platform clients."
Don't get me wrong, I despise WSDLs, but I would think auto-generating a WSDL from Java or a relaxng snytax would both result in "unusable cross-platform clients."