You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@cxf.apache.org by Oliver Wulff <ow...@talend.com> on 2011/06/18 08:42:58 UTC

Fully qualified endpoint address at startup time

Hi there

Does there exist a way to figure out the fully qualified endpoint address for an http based endpoint at startup time independent of the underlying container (servlet, osgi, jetty)?

The following way works for an incoming request but I'm looking for a way during startup:

HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
if (req != null) {
... = req.getRequestUrl();
}


Thanks
Oli

Re: AW: Fully qualified endpoint address at startup time

Posted by Sergey Beryozkin <sb...@gmail.com>.
Hi Oli

On Wed, Jun 22, 2011 at 8:18 AM, Oliver Wulff <ow...@talend.com> wrote:
> Thanks for clarification. Is this different when deploying to OSGi/Karaf? I think you can use either Jetty or the OSGi http service. Are we able to get this information at startup in this case?
>

I guess it can be more predictable when bundles are not deployed as
web-bundles, that is, when HTTP Service is used to assign a default
context such as /services as configured at startup, so knowing this
context, preconfigured port number and the endpoint address can give
an absolute URI; however what Dan said would apply again when
web-bundle containing web.xml are deployed.

Probably only in case of CXFJAXRsNonSpringServlet, with root resources
having constructors accepting ServletContext, one can get  servlet
specific info at the init time; similarly with CXFNonSpringServlet
overriding init(), etc...

Cheers, Sergey

> Thanks
> Oli
>
> ________________________________________
> Von: Daniel Kulp [dkulp@apache.org]
> Gesendet: Mittwoch, 22. Juni 2011 05:18
> An: users@cxf.apache.org
> Cc: Oliver Wulff
> Betreff: Re: AW: Fully qualified endpoint address at startup time
>
> Oliver,
>
> On Tuesday, June 21, 2011 7:51:43 PM Oliver Wulff wrote:
>> I was thinking that it must be possible to figure this out at startup time.
>> I remember that I read that there was some refactoring regarding the
>> different http transports which would simplify the way to get this
>> information.
>
> No, Willem is right.   There isn't anything in the Servlet context or config
> that would allow you to get that information.    It's partially because a
> single servlet can be bound to multiple locations and different ports and
> such.    Thus, it's only during the invoke that you can determine how the
> client contacted the servlet.
>
>
> Dan
>
>
>
>> I think it's error prone to configure it in the spring config if everything
>> is already configured in tomcat server.xml and the web app name (servlet
>> context name).
>>
>> Thanks
>> Oli
>>
>> ________________________________________
>> Von: Willem Jiang [willem.jiang@gmail.com]
>> Gesendet: Montag, 20. Juni 2011 12:03
>> An: users@cxf.apache.org
>> Betreff: Re: Fully qualified endpoint address at startup time
>>
>> It's hard to know what the exactly the services address is when you
>> start the the endpoint in the servlet or osgi container.
>> The address will be changed if your war or servlet configure is changed.
>>
>> If you already know the physical address, you may consider to use
>> publishedEndpointUrl property to set the address which will be used in
>> the WSDL that is generate dynamically from CXF.
>>
>> <jaxws:endpoint id="myEndpoint" address="MyServicePort"
>> serviceClass="org.apache.hello_world_soap_http.GreeterImpl" >
>>    <jaxws:properties>
>>      <!-- Set the publishedEndpointUrl which could override the service
>> address from generated WSDL as you want -->
>>      <entry key="publishedEndpointUrl"
>> value="http://www.simple.com/services/test" />
>>     </jaxws:properties>
>> </jaxws:cxfEndpoint>
>>
>> On 6/18/11 2:42 PM, Oliver Wulff wrote:
>> > Hi there
>> >
>> > Does there exist a way to figure out the fully qualified endpoint
>> > address for an http based endpoint at startup time independent of the
>> > underlying container (servlet, osgi, jetty)?
>> >
>> > The following way works for an incoming request but I'm looking for a
>> > way during startup:
>> >
>> > HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
>> > if (req != null) {
>> > ... = req.getRequestUrl();
>> > }
>> >
>> >
>> > Thanks
>> > Oli
>>
>> --
>> Willem
>> ----------------------------------
>> FuseSource
>> Web: http://www.fusesource.com
>> Blog:    http://willemjiang.blogspot.com (English)
>>           http://jnn.javaeye.com (Chinese)
>> Twitter: willemjiang
>> Weibo: willemjiang
> --
> Daniel Kulp
> dkulp@apache.org
> http://dankulp.com/blog
> Talend - http://www.talend.com



-- 
Sergey Beryozkin

Application Integration Division of Talend
http://sberyozkin.blogspot.com

AW: AW: Fully qualified endpoint address at startup time

Posted by Oliver Wulff <ow...@talend.com>.
Thanks for clarification. Is this different when deploying to OSGi/Karaf? I think you can use either Jetty or the OSGi http service. Are we able to get this information at startup in this case?

Thanks
Oli

________________________________________
Von: Daniel Kulp [dkulp@apache.org]
Gesendet: Mittwoch, 22. Juni 2011 05:18
An: users@cxf.apache.org
Cc: Oliver Wulff
Betreff: Re: AW: Fully qualified endpoint address at startup time

Oliver,

On Tuesday, June 21, 2011 7:51:43 PM Oliver Wulff wrote:
> I was thinking that it must be possible to figure this out at startup time.
> I remember that I read that there was some refactoring regarding the
> different http transports which would simplify the way to get this
> information.

No, Willem is right.   There isn't anything in the Servlet context or config
that would allow you to get that information.    It's partially because a
single servlet can be bound to multiple locations and different ports and
such.    Thus, it's only during the invoke that you can determine how the
client contacted the servlet.


Dan



> I think it's error prone to configure it in the spring config if everything
> is already configured in tomcat server.xml and the web app name (servlet
> context name).
>
> Thanks
> Oli
>
> ________________________________________
> Von: Willem Jiang [willem.jiang@gmail.com]
> Gesendet: Montag, 20. Juni 2011 12:03
> An: users@cxf.apache.org
> Betreff: Re: Fully qualified endpoint address at startup time
>
> It's hard to know what the exactly the services address is when you
> start the the endpoint in the servlet or osgi container.
> The address will be changed if your war or servlet configure is changed.
>
> If you already know the physical address, you may consider to use
> publishedEndpointUrl property to set the address which will be used in
> the WSDL that is generate dynamically from CXF.
>
> <jaxws:endpoint id="myEndpoint" address="MyServicePort"
> serviceClass="org.apache.hello_world_soap_http.GreeterImpl" >
>    <jaxws:properties>
>      <!-- Set the publishedEndpointUrl which could override the service
> address from generated WSDL as you want -->
>      <entry key="publishedEndpointUrl"
> value="http://www.simple.com/services/test" />
>     </jaxws:properties>
> </jaxws:cxfEndpoint>
>
> On 6/18/11 2:42 PM, Oliver Wulff wrote:
> > Hi there
> >
> > Does there exist a way to figure out the fully qualified endpoint
> > address for an http based endpoint at startup time independent of the
> > underlying container (servlet, osgi, jetty)?
> >
> > The following way works for an incoming request but I'm looking for a
> > way during startup:
> >
> > HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
> > if (req != null) {
> > ... = req.getRequestUrl();
> > }
> >
> >
> > Thanks
> > Oli
>
> --
> Willem
> ----------------------------------
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>           http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
> Weibo: willemjiang
--
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

Re: AW: Fully qualified endpoint address at startup time

Posted by Daniel Kulp <dk...@apache.org>.
Oliver,

On Tuesday, June 21, 2011 7:51:43 PM Oliver Wulff wrote:
> I was thinking that it must be possible to figure this out at startup time.
> I remember that I read that there was some refactoring regarding the
> different http transports which would simplify the way to get this
> information.

No, Willem is right.   There isn't anything in the Servlet context or config 
that would allow you to get that information.    It's partially because a 
single servlet can be bound to multiple locations and different ports and 
such.    Thus, it's only during the invoke that you can determine how the 
client contacted the servlet.


Dan



> I think it's error prone to configure it in the spring config if everything
> is already configured in tomcat server.xml and the web app name (servlet
> context name).
>
> Thanks
> Oli
> 
> ________________________________________
> Von: Willem Jiang [willem.jiang@gmail.com]
> Gesendet: Montag, 20. Juni 2011 12:03
> An: users@cxf.apache.org
> Betreff: Re: Fully qualified endpoint address at startup time
> 
> It's hard to know what the exactly the services address is when you
> start the the endpoint in the servlet or osgi container.
> The address will be changed if your war or servlet configure is changed.
> 
> If you already know the physical address, you may consider to use
> publishedEndpointUrl property to set the address which will be used in
> the WSDL that is generate dynamically from CXF.
> 
> <jaxws:endpoint id="myEndpoint" address="MyServicePort"
> serviceClass="org.apache.hello_world_soap_http.GreeterImpl" >
>    <jaxws:properties>
>      <!-- Set the publishedEndpointUrl which could override the service
> address from generated WSDL as you want -->
>      <entry key="publishedEndpointUrl"
> value="http://www.simple.com/services/test" />
>     </jaxws:properties>
> </jaxws:cxfEndpoint>
> 
> On 6/18/11 2:42 PM, Oliver Wulff wrote:
> > Hi there
> > 
> > Does there exist a way to figure out the fully qualified endpoint
> > address for an http based endpoint at startup time independent of the
> > underlying container (servlet, osgi, jetty)?
> > 
> > The following way works for an incoming request but I'm looking for a
> > way during startup:
> > 
> > HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
> > if (req != null) {
> > ... = req.getRequestUrl();
> > }
> > 
> > 
> > Thanks
> > Oli
> 
> --
> Willem
> ----------------------------------
> FuseSource
> Web: http://www.fusesource.com
> Blog:    http://willemjiang.blogspot.com (English)
>           http://jnn.javaeye.com (Chinese)
> Twitter: willemjiang
> Weibo: willemjiang
-- 
Daniel Kulp
dkulp@apache.org
http://dankulp.com/blog
Talend - http://www.talend.com

AW: Fully qualified endpoint address at startup time

Posted by Oliver Wulff <ow...@talend.com>.
Hi Willem

I was thinking that it must be possible to figure this out at startup time. I remember that I read that there was some refactoring regarding the different http transports which would simplify the way to get this information.

I think it's error prone to configure it in the spring config if everything is already configured in tomcat server.xml and the web app name (servlet context name).

Thanks
Oli

________________________________________
Von: Willem Jiang [willem.jiang@gmail.com]
Gesendet: Montag, 20. Juni 2011 12:03
An: users@cxf.apache.org
Betreff: Re: Fully qualified endpoint address at startup time

It's hard to know what the exactly the services address is when you
start the the endpoint in the servlet or osgi container.
The address will be changed if your war or servlet configure is changed.

If you already know the physical address, you may consider to use
publishedEndpointUrl property to set the address which will be used in
the WSDL that is generate dynamically from CXF.

<jaxws:endpoint id="myEndpoint" address="MyServicePort"
serviceClass="org.apache.hello_world_soap_http.GreeterImpl" >
   <jaxws:properties>
     <!-- Set the publishedEndpointUrl which could override the service
address from generated WSDL as you want -->
     <entry key="publishedEndpointUrl"
value="http://www.simple.com/services/test" />
    </jaxws:properties>
</jaxws:cxfEndpoint>


On 6/18/11 2:42 PM, Oliver Wulff wrote:
> Hi there
>
> Does there exist a way to figure out the fully qualified endpoint address for an http based endpoint at startup time independent of the underlying container (servlet, osgi, jetty)?
>
> The following way works for an incoming request but I'm looking for a way during startup:
>
> HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
> if (req != null) {
> ... = req.getRequestUrl();
> }
>
>
> Thanks
> Oli
>


--
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang

Re: Fully qualified endpoint address at startup time

Posted by Willem Jiang <wi...@gmail.com>.
It's hard to know what the exactly the services address is when you 
start the the endpoint in the servlet or osgi container.
The address will be changed if your war or servlet configure is changed.

If you already know the physical address, you may consider to use 
publishedEndpointUrl property to set the address which will be used in 
the WSDL that is generate dynamically from CXF.

<jaxws:endpoint id="myEndpoint" address="MyServicePort" 
serviceClass="org.apache.hello_world_soap_http.GreeterImpl" >
   <jaxws:properties>
     <!-- Set the publishedEndpointUrl which could override the service 
address from generated WSDL as you want -->
     <entry key="publishedEndpointUrl" 
value="http://www.simple.com/services/test" />
    </jaxws:properties>
</jaxws:cxfEndpoint>


On 6/18/11 2:42 PM, Oliver Wulff wrote:
> Hi there
>
> Does there exist a way to figure out the fully qualified endpoint address for an http based endpoint at startup time independent of the underlying container (servlet, osgi, jetty)?
>
> The following way works for an incoming request but I'm looking for a way during startup:
>
> HttpServletRequest req = (HttpServletRequest)msg.get("HTTP.REQUEST")
> if (req != null) {
> ... = req.getRequestUrl();
> }
>
>
> Thanks
> Oli
>


-- 
Willem
----------------------------------
FuseSource
Web: http://www.fusesource.com
Blog:    http://willemjiang.blogspot.com (English)
          http://jnn.javaeye.com (Chinese)
Twitter: willemjiang
Weibo: willemjiang