WSDLSupplier configuration and/or check is not proper/obvious
-------------------------------------------------------------

                 Key: AXIS2-3492
                 URL: https://issues.apache.org/jira/browse/AXIS2-3492
             Project: Axis 2.0 (Axis2)
          Issue Type: Bug
          Components: kernel
            Reporter: Dobri Kitipov


Hi everybody,
There is one mail thread http://marc.info/?l=axis-dev&m=118399944531093&w=2 
that 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="xxxxx" 
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.
AFAIK when you add a parameter to services/axis2.xml it is supposed to be 
retrieved as String. May be there is a need of an additional new attribute like 
"type". E.g.:

<parameter name="WSDLSupplier " 
type="class">com.test.wsdlsupplier.MyWSDLSupplier</parameter>

or for example something like specifing the deployer into axis2.xml:
<deployer extension=".class" directory="pojo" 
class="org.apache.axis2.deployment.POJODeployer"/>

or in our case

<WSDLSupplier class="com.test.wsdlsupplier.MyWSDLSupplier"/> ?

May be more close to this is the way "ServiceClass" parameter is treated by 
Axis. It finally loads it using a ClassLoader.
We need to think more deeply which one is preferable. 
I was advised to open the JIRA 
(http://www.mail-archive.com/axis-dev@ws.apache.org/msg39772.html).

Best regards, Dobri

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to