geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lin Sun <>
Subject Re: Questions for Axis2 folks re: JAXWS
Date Sat, 17 Mar 2007 02:49:21 GMT
I too messed around a bit and submitted patch in G2977.  I didn't quite 
get your note about serviceRef overrides tho (assuming your serviceRef 
means WebserviceRef).   My understanding is that WebserviceRef is for 
clients, we are trying to address a server side issue where a .wsdl file 
is provided but there is no reference to the .wsdl file in 
webservices.xml.   Instead, the location of the wsdl file is specified 
in the WebService or WebServiceProvider annotation.   I was able to test 
this by adding the wsdlLocation below to

@WebService(serviceName = "SOAPService",
             portName = "SoapPort",
             wsdlLocation = "WEB-INF/wsdl/greeter_control.wsdl",
             endpointInterface = "org.apache.greeter_control.Greeter",
             targetNamespace = "")

and making sure that wsdl-file is not set in webservices.xml in 
jaxws-war project.


Jeff Genender wrote:
> I did some messing around with this, and it will definitely be a much
> bigger job.  I allowed it to find the wsdl by setting the location.
> This worked, but unfortunately it sent the WSDL verbatim without doing
> the specific ServiceRef overrides.  So this is deeper in the Axis2
> container I believe.
> Jeff
> Lin Sun wrote:
>> Hi, thanks everyone for their input!  I really like this list - it is
>> very friendly! :-)
>> Jeff, I'd be happy to do it... a bit booked today but I should be able
>> to come up with a patch soon to handle the 2nd case where wsdlLocation
>> is specified in webservice annotation.
>> As for the first case (when wsdl file doesn't exist), my understanding
>> is that Axis2 doesn't have such a tool with JAX-WS features.  This is a
>> big feature, not just a bug.:-(   The Java2WSDL tool is the only tool
>> that I am aware of in Axis2 and it doesn't do annotation.    That's the
>> only reason why I propose to use the wsgen tool provided by sun.
>> Lin
>> Jeff Genender wrote:
>>> Yup...filling in the PortInfo map with some of the WebService annotation
>>> info (minimally the wsdl location) should get us past this issue.
>>> If Lin doesn't do it I may give it a SWAG this morning.
>>> Jeff
>>> Jarek Gawor wrote:
>>>> If Axis2 has a tool to generate WSDL from Java code (with annotations)
>>>> then we should definitely used that. Hopefully, it also has good
>>>> programmatic API so that we can call it at runtime (or at deployment
>>>> time) and generate the WSDL dynamically to a file or a byte array or
>>>> whatever. In G we would just check if the @WebService annotation has
>>>> wsdlLocation attribute set (there is a bit of logic to that) and call
>>>> that tool only if it is not. I don't think we should do anything more
>>>> then that in G. That is, I don't think we should write any code in G
>>>> to generate WSDL from Java code.
>>>> Jarek
>>>> On 3/15/07, Lasantha Ranaweera <> wrote:
>>>>> Hi Lin,
>>>>> I checked your email in the Axis2 dev list and I am also not sure
>>>>> whether this is a bug or a missing feature in the Axis2 (since I didn't
>>>>> go through the problem deep). If this is a bug we might able to help
>>>>> Axis2 source code too (as I did couple of times with my patches) ;-)
>>>>> Make sure to cross link issues in JIRA in such situation. Otherwise as
>>>>> Jeff mentioned we might need to implement in the G side if the Axis2
>>>>> doesn't have any plans of support the feature soon.
>>>>> Regarding your last part of reading annotations have a look at
>>>>> file comes in a org.apache.geronimo.jaxws package, I
>>>>> think it has a way of reading such annotations (line 86).
>>>>> Thanks,
>>>>> Lasantha
>>>>> Lin Sun wrote:
>>>>>> Hi Jeff,
>>>>>> Yes I totally agree that the tool needs to be for axis2 only and
>>>>>> handled during deployment time!  Basically, during deployment of
>>>>>> module, we'll invoke the tool on the fly and generate the .wsdl file
>>>>>> for the user, and set the PortInfo's wsdlLocation property.  Then
>>>>>> code will be executed as if the .wsdl is provided by the user, which
>>>>>> we know works right now.   I was just trying to run the tool
>>>>>> stand-alone first to make sure it is good for our need.:-)  I'll
>>>>>> investigate if there is any license issue.
>>>>>> Also, this doesn't cover the second scenario, when .wsdl file is
>>>>>> provided  but the location of the .wsdl file is specified in
>>>>>> annotation but not in webservices.xml.   In this case, we 'll need
>>>>>> figure out the location of the .wsdl file from annotation (not sure
>>>>>> how to do that yet) and set the PortInfo's wsdlLocation property.
>>>>>> Thanks,
>>>>>> Lin
>>>>>> Jeff Genender wrote:
>>>>>>> I think this is supposed to happen on deployment, not from a
>>>>>>> tool.  If
>>>>>>> Axis is not going to handle this, then this code will need to
>>>>> written
>>>>>>> in the Axis2 deployer for Geronimo.  Currently CXF does handle
>>>>>>> Webservice annotations, so this type of deployment code would
be an
>>>>>>> Axis2 only necessity.  I think the PortInfo objects will need
to be
>>>>>>> filled out before handing off to Axis2.
>>>>>>> Jeff
>>>>>>> Lin Sun wrote:
>>>>>>>> Hi Jeff/Lasantha,
>>>>>>>> I just posted this prob on axis2-dev list [1].   Currently
>>>>>>>> Java2WSDL
>>>>>>>> tool which is what is being used to generate the targetnamespace
>>>>>>>> doesn't
>>>>>>>> seem to handle any of the annotation stuff... not sure if
it will
>>>>> ever
>>>>>>>> handle.:-(
>>>>>>>> An alternative is to use the sun's wsgen tool provided by
>>>>>>>> jaxws-tools.jar to generate the wsdl file from Java in the
>>>>>>>> integration code.  I tried to use the tool and it did generate
>>>>>>>> targetnamespace correctly.
>>>>>>>> [1]:
>>>>>>>> Lin
>>>>>>>> Jeff Genender wrote:
>>>>>>>>> Lasantha Ranaweera wrote:
>>>>>>>>>> Not exactly sure whether I am getting your problem
exactly or not
>>>>>>>>>> :-( .
>>>>>>>>>> Line 99 decides whether application archive contains
WSDL file
>>>>> or not
>>>>>>>>>> (according to Axis2 builder). If it is there we are
going to fill
>>>>>>>>>> WSDL
>>>>>>>>>> information from G side. Otherwise it will be handed
over to Axis2
>>>>>>>>>> side
>>>>>>>>>> (services with annotations). So looking at your problem
>>>>>>>>>> annotations what I say is it should be handled by
Axis2 (all the
>>>>>>>>>> validation & execution stuff). The annotation
processing will be
>>>>>>>>>> handled
>>>>>>>>>> as a web service receives SOAP requests. Starting
point for JAXWS
>>>>>>>>>> based
>>>>>>>>>> SOAP messages is receive() method of JAXWSMessageReciever.
>>>>>>>>> The problem is, Axis2 is generating a wsdl upon the client
>>>>>>>>> for a
>>>>>>>>> wsdl, and not looking at the WebService annotation to
get the
>>>>>>>>> wsdl's
>>>>>>>>> location.  The code step through below shows the problem
>>>>>>>>>> HTH.
>>>>>>>>>> Lasantha
>>>>>>>>>> Jeff Genender wrote:
>>>>>>>>>>> o.a.g.Axis2WebserviceContainer, line 99. A not-filled
>>>>> PortInfo is
>>>>>>>>>>> passed in since G is not processing a WebService
annotation, and
>>>>>>>>>>> thus an
>>>>>>>>>>> AxisService.create is called on line 104.
>>>>>>>>>>> When Axis2WebserviceContainer.getWsdl() is ultimately
>>>>>>>>>>> doService2() is called (line 212), then to processGetRequest
>>>>>>>>>>> (line
>>>>>>>>>>> 398),
>>>>>>>>>>> leading us to line 435 where the PortInfo is
checked as to
>>>>> whether a
>>>>>>>>>>> wsdl file has been passed in or not.  If it has,
it spits out the
>>>>>>>>>>> wsdl.
>>>>>>>>>>>  If it has not, then the AxisService.printWsdl()
is called and
>>>>> that
>>>>>>>>>>> call
>>>>>>>>>>> spits out a generated wsdl.
>>>>>>>>>>> The crux here is that the PortInfo object does
not have all of
>>>>>>>>>>> the info
>>>>>>>>>>> filled in such as seiClass, wsdl file, etc. 
That stuff would
>>>>>>>>>>> have been
>>>>>>>>>>> gotten from examining the WebService annotation.
>>>>>>>>>>> The question is, where does that examination
or, should that
>>>>>>>>>>> examination, take place? Geronimo or Axis2?
>>>>>>>>>>> Jeff
>>>>>>>>>>> Lasantha Ranaweera wrote:
>>>>>>>>>>>> Jeff,
>>>>>>>>>>>> Sorry for a late reply due to my time stamp
difference and don't
>>>>>>>>>>>> know
>>>>>>>>>>>> exactly you have solved this problem right
now or not. Anyway
>>>>> here
>>>>>>>>>>>> is my
>>>>>>>>>>>> comment.
>>>>>>>>>>>> Since you haven't given me exact source code
I won't be able to
>>>>>>>>>>>> point
>>>>>>>>>>>> you in to the exact source code in the Axis2.
May be remote
>>>>>>>>>>>> debugging
>>>>>>>>>>>> ...  ;-) .
>>>>>>>>>>>> Thanks,
>>>>>>>>>>>> Lasantha
>>>>>>>>>>>> Jeff Genender wrote:
>>>>>>>>>>>>> Ok...
>>>>>>>>>>>>> I am pretty certain at this stage that
the WebService
>>>>>>>>>>>>> annotation
>>>>>>>>>>>>> is not
>>>>>>>>>>>>> getting processed.  Can you point me
to the code that handles
>>>>>>>>>>>>> this in
>>>>>>>>>>>>> Axis2?
>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>> Jeff
>>>>>>>>>>>>> Jeff Genender wrote:
>>>>>>>>>>>>>> Thanks...this is very helpful.
>>>>>>>>>>>>>> Then by this, looking at the PortInfo,
it appears as though
>>>>> it is
>>>>>>>>>>>>>> not
>>>>>>>>>>>>>> stuffing in the WSDL file, which
tells me it's a G thang ;-)
>>>>>>>>>>>>>> Jeff
>>>>>>>>>>>>>> Lasantha Ranaweera wrote:
>>>>>>>>>>>>>>> Hi Jeff,
>>>>>>>>>>>>>>> To my understanding if we have
given a WSDL in an archive it
>>>>>>>>>>>>>>> should get
>>>>>>>>>>>>>>> the priority than the information
in the annotations.
>>>>>>>>>>>>>>> In Axis2 integration there are
two parts of implementation
>>>>> with
>>>>>>>>>>>>>>> one for
>>>>>>>>>>>>>>> with WSDL which is mainly handling
by G side while with
>>>>>>>>>>>>>>> annotations
>>>>>>>>>>>>>>> from
>>>>>>>>>>>>>>> Axis2. For me it is something
missing in G side.
>>>>>>>>>>>>>>> Somebody in the list please correct
me  if I am wrong here .
>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>> Lasantha
>>>>>>>>>>>>>>> Jeff Genender wrote:
>>>>>>>>>>>>>>>> Hi,
>>>>>>>>>>>>>>>> I have noticed when I deploy
a war file (with a WSDL), I
>>>>> have a
>>>>>>>>>>>>>>>> certain
>>>>>>>>>>>>>>>> target name specified both
in the WSDL and in the code that
>>>>>>>>>>>>>>>> uses a
>>>>>>>>>>>>>>>> WebService annotation.
>>>>>>>>>>>>>>>> However, when I go retrieve
the WSDL, I notice the target
>>>>> name
>>>>>>>>>>>>>>>> seems to
>>>>>>>>>>>>>>>> be munged according to the
package name (backwards) of the
>>>>> code
>>>>>>>>>>>>>>>> that
>>>>>>>>>>>>>>>> contains the WebService annotation.
>>>>>>>>>>>>>>>> Example...
>>>>>>>>>>>>>>>> I have include a WSDL called
Hello.wsdl that is in the war
>>>>> file
>>>>>>>>>>>>>>>> in the
>>>>>>>>>>>>>>>> web-inf/wsdl directory and
starts with:
>>>>>>>>>>>>>>>> <wsdl:definitions
>>>>>>>>>>>>>>>> targetNamespace="">
>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>> I have a
that has this:
>>>>>>>>>>>>>>>> package test.mypackage;
>>>>>>>>>>>>>>>> import javax.jws.WebMethod;
>>>>>>>>>>>>>>>> import javax.jws.WebService;
>>>>>>>>>>>>>>>> @WebService(name="HelloWorld",
targetNamespace =
>>>>>>>>>>>>>>>> "")
>>>>>>>>>>>>>>>> public class HelloWorld {
>>>>>>>>>>>>>>>>     @WebMethod
>>>>>>>>>>>>>>>>     public String sayHello(String
>>>>>>>>>>>>>>>>         return "Hello "+me;
>>>>>>>>>>>>>>>>     }
>>>>>>>>>>>>>>>> }
>>>>>>>>>>>>>>>> However, when I request the
wsdl...I get something like
>>>>>>>>>>>>>>>> this:
>>>>>>>>>>>>>>>> <wsdl:definitions
>>>>> targetNamespace="http://mypackage.test/xsd">
>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>> Notice the targetnamespace
was munged and changed from it's
>>>>>>>>>>>>>>>> originally
>>>>>>>>>>>>>>>> declared namespace of "".
>>>>>>>>>>>>>>>> want the
>>>>>>>>>>>>>>>> one
>>>>>>>>>>>>>>>> that is both declared in
the included wsdl (or the one
>>>>> declared
>>>>>>>>>>>>>>>> in the
>>>>>>>>>>>>>>>> annotation).
>>>>>>>>>>>>>>>> Is this a facet of Axis2
or is Geronimo not passing a proper
>>>>>>>>>>>>>>>> PortInfo
>>>>>>>>>>>>>>>> object with the necessary
stuff filled in?
>>>>>>>>>>>>>>>> Any light on this subject
would be greatly appreciated ;-)
>>>>>>>>>>>>>>>> Thanks,
>>>>>>>>>>>>>>>> Jeff

View raw message