geronimo-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Lin Sun <linsun....@gmail.com>
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 GreeterImpl.java:

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

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

Lin

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 <lasantha@opensource.lk> 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
>>>>> JAXWSUtils.java 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
the
>>>>>> 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
the
>>>>>> 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
to
>>>>>> 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
be
>>>>> 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
the
>>>>>>>> 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
geronimo
>>>>>>>> integration code.  I tried to use the tool and it did generate
the
>>>>>>>> targetnamespace correctly.
>>>>>>>>
>>>>>>>> [1]: http://marc.theaimsgroup.com/?l=axis-dev&m=117397929613538&w=2
>>>>>>>>
>>>>>>>> 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
regarding
>>>>>>>>>> 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
request
>>>>>>>>> for a
>>>>>>>>> wsdl, and not looking at the WebService annotation to
get the
>>>>>>>>> wsdl's
>>>>>>>>> location.  The code step through below shows the problem
clearly.
>>>>>>>>>
>>>>>>>>>
>>>>>>>>>> HTH.
>>>>>>>>>>
>>>>>>>>>> Lasantha
>>>>>>>>>>
>>>>>>>>>> Jeff Genender wrote:
>>>>>>>>>>> o.a.g.Axis2WebserviceContainer, line 99. A not-filled
in
>>>>> 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
called,
>>>>>>>>>>> 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="http://example.com/hello/xsd">
>>>>>>>>>>>>>>>> ...
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> I have a HelloWorld.java
that has this:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> package test.mypackage;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> import javax.jws.WebMethod;
>>>>>>>>>>>>>>>> import javax.jws.WebService;
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> @WebService(name="HelloWorld",
targetNamespace =
>>>>>>>>>>>>>>>> "http://example.org/hello/xsd")
>>>>>>>>>>>>>>>> public class HelloWorld {
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>     @WebMethod
>>>>>>>>>>>>>>>>     public String sayHello(String
me){
>>>>>>>>>>>>>>>>         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 "http://example.com/hello/xsd".
 I
>>>>>>>>>>>>>>>> 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
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>
>>>>>>
> 


Mime
View raw message