I'm trying to figure out how to implement a service (actually, a bunch of services) and I'd like to hear (informed) opinions from the list on two questions.
I'm attempting to expose the reporting portion of an XML-based ERP system via web services. The ERP system has a mechanism that permits users to build reports. I'd like to expose every report as a web service. Some of the reports take parameters, others don't. (Since my system is XML-based I've already created a message service that takes XML in and returns XML. I don't want to use that as the basis for the reports because it requires knowing XML and knowing the system's schema.) I'd rather each report was exposed as an operation, so a developer (or tool) could look at the WSDL and invoke the operations they wished, passing the necessary parms and understanding what was returned. So question #1: What's the best way to generate the WSDL? I know I can create a file w/ the WSDL and reference it via the wsdlFile attribute, but I'd like to create it dynamically when someone asks for it since the user reports can be changed. Can I do it by implementing a QSHandler for the ?wsdl query? I also don't want to create Java classes for all of the complexTypes (Invoice, Customer, Vendor, Employee, etc) because there are many of them and they also can change. What I'd like to do is build the report request directly from the SOAPElements in the request, run the report, and then generate the SOAPElements in the response. This is what org.apache.axis.providers.RPCProvider does (by invoking the method referenced in the <service> tag). Is the best approach to simply implement my own Provider, basing it on RPCProvider? Or is there a better approach? Being a lazy programmer, I want to write as little code as possible and leverage as much of Axis as possible. Thanks for any thoughts.