On 8/30/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote: > > ant elder wrote: > > On 8/30/07, Jean-Sebastien Delfino <[EMAIL PROTECTED]> wrote: > > > >> ant elder wrote: > >> > >>> I've not yet been able to find any good way to reliably work out the > >>> complete service URL in all environments. What i think maybe the best > >>> approach is to add a getBaseURI method to the Tuscany ServletHost > >>> > >> interface > >> > >>> so that can be used by bindings. So then it would be down to each > >>> ServletHost impl to set this correctly rather than the Axis2 binding > to > >>> work it out. So for example for WebappServletHost it would be the > webapp > >>> > >> url > >> > >>> like, http://localhost:8080/helloworld-ws-service-webapp, for the war > >>> > >> distro > >> > >>> http://localhost:8080/tuscany, for Geronimo http://localhost:8080 etc. > >>> > >>> Does something like this sound ok or does anyone have any better > ideas? > >>> > >>> ...ant > >>> > >>> > >>> > >> I'm not sure which scenario you have in mind for this, so here are the > >> two use cases I can think of: > >> > >> (1) A binding was configured with a URI like localhost:8080 but will > >> need to tell the world (in generated WSDL, in service endpoint > >> references etc.) the actual endpoint address at which it can be > reached, > >> 192.168.1.1:8080 or myhost:8080 for example > >> > >> (2) A binding was configured with a URI, but we are not in a position > to > >> provide the service at that exact same URI, because we are running in a > >> Webapp deployed at a different URI for example. I don't really like > this > >> use case as I think there's issues with this approach and that we > should > >> configure the Web container from the SCA metadata, not the other way > >> around, but I guess we have to live with that for now :) Anyway, in > >> that case as well we need to figure the effective URI of the particular > >> service to put it in service endpoint references for example. > >> > >> For both scenarios, I'd suggest methods like this: > >> > >> ServletHost.getRequestURI(String mapping) -> giving you the complete > URI > >> that people will have to send requests to > >> or > >> ServletHost.getServletPath(String mapping) -> giving you the actual URI > >> at which the particular servlet is available > >> > >> Both methods are modeled after the Servlet API interface, and will give > >> you what you need (assuming I correctly guessed the scenarios you're > >> after) in a simpler way than a getBaseURI() method which would still > >> require the binding to combine that base URI with the rest of the URI > >> that it knows about. > >> > > > > > > There's also a 3rd case where the binding uses a default or relative uri > > which the runtime can honour and things like ?wsdl still need to be able > to > > advertise the actual endpoint. Anyway from those three cases it seems > like a > > way to get his from the ServletHost is valid thing to have. > > > > > Yes > > > >From the perspective of whats the simplest way to code this for the ws > > binding as-is now i suspect a method that returns a complete url from a > > mapping may not be so easy to use with the current Axis2 code. > > Can you point me to piece of code that will use that URL and pass it to > Axis2?
Its spread about a bit but see o.a.t.s.binding.ws.axis2.TuscanyListingAgent.setContextRoot. Axis2 works out the host and port and constructs the url from that, the ConfigurationContext context root and service path plus the service name. ...ant