axis-java-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dobri Kitipov" <kdobrik.ax...@googlemail.com>
Subject Re: Custom WSDL generation
Date Tue, 05 Feb 2008 09:56:22 GMT
Hi Saminda,
I am not sure I get everything right. So let's clarify it.

1) My understanding is that I should create a JIRA about WSDLSupplier
parameter, right? But I think this is a more or less feature than a bug? I
mean, 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"/> ?

We need to think more deeply which one is preferable. But anyway I can open
a JIRA like this.

Anyway the effect should be that in this case axis will know the type of the
artifact/parameter and will try to load it from the classpath.

2) I do not want to use "useOriginalWSDL", but dynamically generate and
provide the WSDL at server side based on some criteria. So my understanding
is that the mail thread
http://marc.info/?l=axis-dev&m=118399944531093&w=2considers exactly
this use case, providing the ability to hook an
implementation of WSDLSupplier  that should return the WSDL ? Am I wrong?
I will change the message receiver and have a look at the link you provided
to me.

Thank you in advance!

Dobri

On Feb 5, 2008 10:41 AM, Saminda Abeyruwan <samindaa@gmail.com> wrote:

> Hi Dobri,
>
> In deed, if the parameter is defined as prior, it would cause a class cast
> exception. This should be fixed. The intended used case for WSDLSupplier is
> IMHO not what you have identified. You'll be able to find a use case in [1].
>
>
> Since you are using org.apache.axis2.rpc.receivers.RPCMessageReceiver,
> this will generate the WSDL for your POJO. And if policy is applied, it will
> be correctly attached to the WSDL.
>
> If you have a pre-defined WSDL, please use the parameter
>
> <parameter name="useOrignalWSDL"> true </parameter>
>
>
> Where wsdl's endpoint should be named exactly as the service name.  In
> this case "Test1".
>
> Please do log a JIRA to prevent class cast exception.
>
> Thank you
>
> Saminda
>
> Reference:
>
> [1] .
> https://wso2.org/repos/wso2/trunk/commons/deployers/axis1deployer/src/main/java/a1deployer/
>
>
>
>
>
>
>
>
> On Feb 4, 2008 8:52 PM, Dobri Kitipov <kdobrik.axis2@googlemail.com>
> wrote:
>
> > 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="
> > 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
> >
> >
>
>
> --
> Saminda Abeyruwan
>
> Senior Software Engineer
> WSO2 Inc. - www.wso2.org

Mime
View raw message