Hi everybody,
There is one mail thread
http://marc.info/?l=axis-dev&m=118399944531093&w=2that talks about
using WSDLSupplier that gives you the possibility to hook
your own WSDL on the fly. This is done implementing an interface
org.apache.axis2.dataretrieval.WSDLSupplier.
What I am currently trying to do is to test this feature. I implemented my
own WSDLSupplier, but not sure how to specify it. Looking into the above
mentioned thread we can read:
"I added a check in printWSDL() to see if there was a WSDLSupplier sitting
in the "WSDLSupplier" parameter of the AxisService. If so, it attempts to
call the WSDLSupplier to obtain the Definition object from there
dynamically. It then runs that WSDL through the usual
printDefinitionObject() API. This allows my custom service to plug in and
generate its own WSDL."
IMHO I should add a parameter into the services.xml file like:
<serviceGroup>
<service name="Test1">
<description>Web Service Test1</description>
<parameter name="WSDLSupplier">com.test.wsdlsupplier.MyWSDLSupplier
</parameter>
<messageReceivers>
<messageReceiver class="
org.apache.axis2.rpc.receivers.RPCMessageReceiver" mep="
http://www.w3.org/2004/08/wsdl/in-out"/>
</messageReceivers>
<operation name="echo"/>
</service>
</serviceGroup>
The problem is that into org.apache.axis2.description.AxisService method
public void printWSDL(OutputStream out, String requestIP) the check is:
WSDLSupplier supplier = (WSDLSupplier)getParameterValue("WSDLSupplier");
So I receive:
java.lang.ClassCastException: java.lang.String
org.apache.axis2.description.AxisService.printWSDL(AxisService.java
:1167)
...
which is something expected because getParameterValue("WSDLSupplier");
returns a String object, but not WSDLSupplier. So it is not possible to cast
String to WSDLSupplier.
Please, advise me how it should be done. I did not find anything that
explains this.
Thank you in advance!
Dobri