axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From jba...@sasami.atomised.org (John Baker)
Subject Re: Dynamic Endpoints
Date Sat, 25 Jun 2005 17:27:12 GMT
The stub itself is being deployed. The deploy.wsdd file will have:

  <service name="Something" provider="java:RPC" style="rpc" use="encoded">
        <parameter name="wsdlTargetNamespace" value="jss:Something"/>
        <parameter name="wsdlServiceElement" value="SomethingService"/>
        <parameter name="wsdlServicePort" value="Something"/>
        <parameter name="className"
            value="com.blah.SomethingSoapBindingStub"/>

Note the last line. I don't want to write a wrapper class around the Stub, I
want to deploy it directly, and set the endpoint in another part of the web
app..




On Sat, Jun 25, 2005 at 01:17:56AM -0400, Jeff wrote:
> Although "the same stub may be deployed multiple times", each is a separate
> instance and each will be instantiated as part of some client code (running
> on server X but web service client code nonetheless). Presumably, the code
> doing the stub instantiation knows which endpoint to use and can simply set
> it with something like:
> 
>     locator.setMyServiceSoapEndpointAddress(strEndpointAddress);
> 
> I'm obviously missing something here but your scenario, as described thus
> far, suggests this as an obvious approach.
> 
> 
> Jeff
> 
> 
> ----- Original Message ----- 
> From: "John Baker" <jbaker@sasami.atomised.org>
> To: <axis-user@ws.apache.org>
> Sent: Saturday, June 25, 2005 7:21 AM
> Subject: Re: Dynamic Endpoints
> 
> 
> > Nope! I want the web application running on X to set it. I've wrapped Axis
> > in my own web application, and hence there will be various servlets/etc. I
> > want Mr. User to be able to go to a servlet and set the end points for a
> > bunch of services, hence it can only be done dynamically... and as the
> same
> > stub may be deployed multiple times, it can't be done via a static method.
> >
> > Thoughts?
> >
> > On Thu, Jun 23, 2005 at 11:19:07PM -0400, Jeff wrote:
> > > Well, not entirely, John!
> > >
> > > Do you want the client to set the endpoint of the target machine by
> calling
> > > an endpoint-setting method on X?
> > >
> > >
> > > Jeff
> > >
> > >
> > > ----- Original Message ----- 
> > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > To: <axis-user@ws.apache.org>
> > > Sent: Friday, June 24, 2005 6:21 AM
> > > Subject: Re: Dynamic Endpoints
> > >
> > >
> > > > I think the answer to my question is:
> > > >
> > > > <soap:service location="http://blah.com" />
> > > >
> > > > So I can define this in the wsdd, but I wish to set it at runtime. I
> am
> > > > doing the following:
> > > >
> > > > - Using wsdl2java to create Java stubs, with a deploy.wsdd,
> > > > - Altering the deploy.wsdd to deploy the Stub,
> > > > - Deploying to Axis server (we'll call this X),
> > > > - Calling X and hoping it will then make another WS call..
> > > >
> > > > I.e..
> > > >
> > > > My client <--> X <--> Target machine.
> > > >
> > > > This is fine if I want to set the location declaration in the
> deploy.wsdd,
> > > > but what I would like to do is set it at runtime. So the web
> application
> > > on
> > > > X will start, walk a set of services and set a location (not
> statically).
> > > >
> > > > Does this clarify things?
> > > >
> > > >
> > > > John
> > > >
> > > >
> > > > On Fri, Jun 24, 2005 at 10:43:28AM +0100, John Baker wrote:
> > > > > Ok.
> > > > >
> > > > > Can I start by asking, given this:
> > > > >
> > > > > <deployment name="test" xmlns="http://xml.apache.org/axis/wsdd/"
> > > > >     xmlns:java="http://xml.apache.org/axis/wsdd/providers/java">
> > > > >       <service name="Example" provider="java:RPC">
> > > > >         <parameter name="className" value="com.blah.Example"/>
> > > > >         <parameter name="allowedMethods" value="login logout
> getDate"/>
> > > > >         <parameter name="wsdlServicePort" value="Example"/>
> > > > >      </service>
> > > > > </deployment>
> > > > >
> > > > > Can you tell me how to add the XML declaration to set the endpoint?
> > > > >
> > > > >
> > > > > John
> > > > >
> > > > >
> > > > > On Thu, Jun 23, 2005 at 05:02:06PM -0400, Jeff wrote:
> > > > > > Sorry, John, my little brain need more input! Please given a
> > > comprehensive
> > > > > > explanation of exactly how you want you software to behave.
> > > > > >
> > > > > >
> > > > > >
> > > > > > ----- Original Message ----- 
> > > > > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > > > > To: <axis-user@ws.apache.org>
> > > > > > Sent: Friday, June 24, 2005 4:58 AM
> > > > > > Subject: Re: Dynamic Endpoints
> > > > > >
> > > > > >
> > > > > > > I am specifically talking about setting wsdd
> > > parameters/service-locators
> > > > > > > programatically. I.e I have a wsdd which defines a service,
and
> I
> > > want to
> > > > > > > alter the service-locator through some other random part
of a
> web
> > > app :)
> > > > > > >
> > > > > > > On Thu, Jun 23, 2005 at 04:43:35PM -0400, Jeff wrote:
> > > > > > > > It depends on how dynamic you want things to be. If
you are
> > > talking
> > > > > > about
> > > > > > > > server-side wsdd then you could just as well declare
> parameters in
> > > > > > web.xml
> > > > > > > > and retrieve values using the standard servlet API.
> > > > > > > >
> > > > > > > >
> > > > > > > > ----- Original Message ----- 
> > > > > > > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > > > > > > To: <axis-user@ws.apache.org>
> > > > > > > > Sent: Friday, June 24, 2005 4:38 AM
> > > > > > > > Subject: Re: Dynamic Endpoints
> > > > > > > >
> > > > > > > >
> > > > > > > > > Well you can specify a soap:locator in the wsdd
file. That's
> > > loaded
> > > > > > into
> > > > > > > > the
> > > > > > > > > internal Port instances. But how does one look
them up
> > > > > > programatically?
> > > > > > > > >
> > > > > > > > > On Thu, Jun 23, 2005 at 04:25:25PM -0400, Jeff
wrote:
> > > > > > > > > > Not too sure about 'stuff' either  :-)
> > > > > > > > > >
> > > > > > > > > > Each service has an endpoint which is, presumably,
better
> than
> > > a
> > > > > > name.
> > > > > > > > Where
> > > > > > > > > > do you anticipate getting the names/endpoints
from?
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > I just re-read your original posting, John.
> > > > > > > > > >
> > > > > > > > > > Suppose there are three computers, A, B
and C. Suppose too
> > > that A
> > > > > > runs
> > > > > > > > the
> > > > > > > > > > simple client that calls into the service
on B and that
> the
> > > service
> > > > > > on B
> > > > > > > > > > uses client-side code (stub) to call into
the service on
> C.
> > > > > > > > > >
> > > > > > > > > > Are you expecting client A to call service
B with
> > > setLocationURI()
> > > > > > to
> > > > > > > > set
> > > > > > > > > > the endpoint and then subsequently client
A calls into
> service
> > > B
> > > > > > which
> > > > > > > > > > results in service B using the pre-set endpoint
to call
> into
> > > service
> > > > > > C?
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > ----- Original Message ----- 
> > > > > > > > > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > > > > > > > > To: <axis-user@ws.apache.org>
> > > > > > > > > > Sent: Friday, June 24, 2005 4:20 AM
> > > > > > > > > > Subject: Re: Dynamic Endpoints
> > > > > > > > > >
> > > > > > > > > >
> > > > > > > > > > > Well I assume each Service has a name,
so looking it up
> by
> > > name
> > > > > > would
> > > > > > > > be
> > > > > > > > > > > nice. I assume that the deploy.wsdd
is parsed and
> 'stuff' is
> > > > > > created
> > > > > > > > > > > internally...
> > > > > > > > > > >
> > > > > > > > > > > On Thu, Jun 23, 2005 at 04:12:54PM
-0400, Jeff wrote:
> > > > > > > > > > > > Dunno about clean. Dunno about
looking up instances of
> a
> > > > > > service.
> > > > > > > > What
> > > > > > > > > > > > criteria are you using for choosing
between the
> different
> > > > > > service
> > > > > > > > > > instances?
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > ----- Original Message ----- 
> > > > > > > > > > > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > > > > > > > > > > To: <axis-user@ws.apache.org>
> > > > > > > > > > > > Sent: Friday, June 24, 2005 4:09
AM
> > > > > > > > > > > > Subject: Re: Dynamic Endpoints
> > > > > > > > > > > >
> > > > > > > > > > > >
> > > > > > > > > > > > > Yep. I appreciate I could
use a static method, but
> this
> > > > > > doesn't
> > > > > > > > seem
> > > > > > > > > > very
> > > > > > > > > > > > > 'clean'... And I'm quite
intrigued to how one looks
> up
> > > > > > instances
> > > > > > > > of a
> > > > > > > > > > > > > service (or rather, the factory
that creates them)
> > > through
> > > > > > Axis..
> > > > > > > > > > > > >
> > > > > > > > > > > > >
> > > > > > > > > > > > > John
> > > > > > > > > > > > >
> > > > > > > > > > > > > On Thu, Jun 23, 2005 at 04:09:20PM
-0400, Jeff
> wrote:
> > > > > > > > > > > > > > Do you mean two or three
different instances of
> the
> > > same
> > > > > > > > service?
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > ----- Original Message
----- 
> > > > > > > > > > > > > > From: "John Baker" <jbaker@sasami.atomised.org>
> > > > > > > > > > > > > > To: <axis-user@ws.apache.org>
> > > > > > > > > > > > > > Sent: Friday, June 24,
2005 4:06 AM
> > > > > > > > > > > > > > Subject: Re: Dynamic
Endpoints
> > > > > > > > > > > > > >
> > > > > > > > > > > > > >
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > That's one way.
But I may wish to deploy the
> same
> > > class on
> > > > > > two
> > > > > > > > or
> > > > > > > > > > > > three
> > > > > > > > > > > > > > > different services
and set some parameters
> > > differently,
> > > > > > hence
> > > > > > > > I'm
> > > > > > > > > > > > > > wondering
> > > > > > > > > > > > > > > how to look it
up by service/port ..?
> > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > On Thu, Jun 23,
2005 at 04:02:59PM -0400, Jeff
> > > wrote:
> > > > > > > > > > > > > > > > I cannot see
the problem! Just create a static
> > > method
> > > > > > for
> > > > > > > > your
> > > > > > > > > > stub
> > > > > > > > > > > > and
> > > > > > > > > > > > > > use
> > > > > > > > > > > > > > > > it to initialize
the endpoint.
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > Jeff
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > ----- Original
Message ----- 
> > > > > > > > > > > > > > > > From: "John
Baker"
> <jbaker@sasami.atomised.org>
> > > > > > > > > > > > > > > > To: <axis-user@ws.apache.org>
> > > > > > > > > > > > > > > > Sent: Friday,
June 24, 2005 3:19 AM
> > > > > > > > > > > > > > > > Subject: Re:
Dynamic Endpoints
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Quite,
but this isn't precisely what I
> meant.
> > > I'm
> > > > > > > > generating a
> > > > > > > > > > > > > > deploy.wsdd
> > > > > > > > > > > > > > > > > file
and deploying the Stub itself. So when
> Axis
> > > > > > creates
> > > > > > > > > > instances
> > > > > > > > > > > > of
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > > Stub,
the cachedEndpoint variable (inherited
> > > from
> > > > > > > > Stub.java)
> > > > > > > > > > is
> > > > > > > > > > > > null.
> > > > > > > > > > > > > > I'd
> > > > > > > > > > > > > > > > > like
to set this programatically from
> another
> > > part of
> > > > > > the
> > > > > > > > web
> > > > > > > > > > > > > > application
> > > > > > > > > > > > > > > > > (Axis
is integrated into my own webapp).
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > Thanks,
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > John
> > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > On Thu,
Jun 23, 2005 at 05:32:05AM -0400,
> Jeff
> > > wrote:
> > > > > > > > > > > > > > > > > >
For a service called MyService, i.e. your
> WSDL
> > > file
> > > > > > > > contains
> > > > > > > > > > > > > > > > <wsdl:service
> > > > > > > > > > > > > > > > > >
name="MyService">, source code generated
> by
> > > > > > WSDL2Java
> > > > > > > > will
> > > > > > > > > > > > contain
> > > > > > > > > > > > > > > > classes
> > > > > > > > > > > > > > > > > >
with these (or similar) names (amongst
> > > others):
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
    MyServiceLocator
> > > > > > > > > > > > > > > > > >
    MyServiceSoap
> > > > > > > > > > > > > > > > > >
    MyServiceSoapStub
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
You can then invoke myMethod() against the
> > > service
> > > > > > using
> > > > > > > > > > code
> > > > > > > > > > > > like:
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
    String strEndpointAddress = ...
> > > > > > > > > > > > > > > > > >
    MyServiceLocator locator = new
> > > > > > MyServiceLocator();
> > > > > > > > > > > > > > > > > >
> > > > > > > > > >
> locator.setMyServiceSoapEndpointAddress(strEndpointAddress);
> > > > > > > > > > > > > > > > > >
    MyServiceSoapStub stub =
> > > > > > > > > > > > > > > > > >
> > > > > > (MyServiceSoapStub)locator.getPort(MyServiceSoap.class);
> > > > > > > > > > > > > > > > > >
    stub.myMethod();
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
Jeff
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
----- Original Message ----- 
> > > > > > > > > > > > > > > > > >
From: "John Baker"
> > > <jbaker@sasami.atomised.org>
> > > > > > > > > > > > > > > > > >
To: <axis-user@ws.apache.org>
> > > > > > > > > > > > > > > > > >
Sent: Thursday, June 23, 2005 7:57 AM
> > > > > > > > > > > > > > > > > >
Subject: Dynamic Endpoints
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> > > > > > > > > > > > > > > > > >
> Hi,
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> I'm trying to simplify the configuration
> of
> > > a
> > > > > > > > pre-packaged
> > > > > > > > > > > > Axis
> > > > > > > > > > > > > > server
> > > > > > > > > > > > > > > > > >
which
> > > > > > > > > > > > > > > > > >
> already has a bunch of services
> deployed.
> > > I'd like
> > > > > > > > users
> > > > > > > > > > to be
> > > > > > > > > > > > > > easily
> > > > > > > > > > > > > > > > be
> > > > > > > > > > > > > > > > > >
> able to set the endpoint on services
> that
> > > were
> > > > > > > > generated
> > > > > > > > > > from
> > > > > > > > > > > > > > wsdl, so
> > > > > > > > > > > > > > > > I'm
> > > > > > > > > > > > > > > > > >
> using the Java stub as my deployed
> service.
> > > You
> > > > > > can
> > > > > > > > think
> > > > > > > > > > of
> > > > > > > > > > > > this
> > > > > > > > > > > > > > > > model as
> > > > > > > > > > > > > > > > > >
a
> > > > > > > > > > > > > > > > > >
> proxy, in a rather simple sense; it does
> > > nothing
> > > > > > more
> > > > > > > > than
> > > > > > > > > > > > call
> > > > > > > > > > > > > > the
> > > > > > > > > > > > > > > > same
> > > > > > > > > > > > > > > > > >
> service on another server.
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> I appreciate that it's possible to set
> an
> > > endpoint
> > > > > > for
> > > > > > > > a
> > > > > > > > > > > > service
> > > > > > > > > > > > > > > > through a
> > > > > > > > > > > > > > > > > >
> deploy.wsdd file. However I would like
> to do
> > > this
> > > > > > > > > > dynamically
> > > > > > > > > > > > and
> > > > > > > > > > > > > > am
> > > > > > > > > > > > > > > > > >
> wondering how I would do this? I think I
> > > need to
> > > > > > set
> > > > > > > > the
> > > > > > > > > > > > parameter
> > > > > > > > > > > > > > > > > >
> dynamically so everytime an instance of
> a
> > > service
> > > > > > is
> > > > > > > > > > created,
> > > > > > > > > > > > an
> > > > > > > > > > > > > > > > endpoint
> > > > > > > > > > > > > > > > > >
is
> > > > > > > > > > > > > > > > > >
> set.
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> I've got something like this:
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> org.apache.axis.client.Service service =
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > >
> > > org.apache.axis.client.ServiceFactory.getService("MyService");
> > > > > > > > > > > > > > > > > >
>   Iterator pi = service.getPorts();
> > > > > > > > > > > > > > > > > >
>   javax.wsdl.Port port;
> > > > > > > > > > > > > > > > > >
>   while (pi.hasNext())
> > > > > > > > > > > > > > > > > >
>   {
> > > > > > > > > > > > > > > > > >
>     port = (javax.wsdl.Port)pi.next();
> > > > > > > > > > > > > > > > > >
>     port.addExtensibilityElement(new
> > > > > > > > > > > > > > > > > >
> > > SOAPAddressImpl("http://localhost:9090/hello"));
> > > > > > > > > > > > > > > > > >
> }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> But I suspect it would have to be a
> little
> > > more
> > > > > > > > advanced
> > > > > > > > > > than
> > > > > > > > > > > > my
> > > > > > > > > > > > > > > > simple
> > > > > > > > > > > > > > > > > >
> example :)
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> I'd also need to write my own SOAPImpl:
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> protected class SOAPAddressImpl
> implements
> > > > > > > > > > > > > > > > > >
javax.wsdl.extensions.soap.SOAPAddress
> > > > > > > > > > > > > > > > > >
> {
> > > > > > > > > > > > > > > > > >
>   private QName elementType;
> > > > > > > > > > > > > > > > > >
>   private Boolean required;
> > > > > > > > > > > > > > > > > >
>   private String uri;
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public SOAPAddressImpl(String uri)
> > > > > > > > > > > > > > > > > >
>   { this.uri = uri; }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public void setElementTpe(QName
> > > elementType)
> > > > > > > > > > > > > > > > > >
>   { this.elementType = elementType; }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public QName getElementType()
> > > > > > > > > > > > > > > > > >
>   { return (elementType); }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public void setRequired(Boolean
> required)
> > > > > > > > > > > > > > > > > >
>   { this.required = required; }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public Boolean getRequired()
> > > > > > > > > > > > > > > > > >
>   { return (required); }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public void setLocationURI(String uri)
> > > > > > > > > > > > > > > > > >
>   { this.uri = uri; }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>   public String getLocationURI()
> > > > > > > > > > > > > > > > > >
>   { return (uri); }
> > > > > > > > > > > > > > > > > >
> }
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> But I'm not sure what the elementType of
> > > required
> > > > > > flag
> > > > > > > > > > would
> > > > > > > > > > > > > > require?
> > > > > > > > > > > > > > > > > >
Having
> > > > > > > > > > > > > > > > > >
> read the Axis source, I don't think they
> are
> > > used
> > > > > > by
> > > > > > > > the
> > > > > > > > > > > > > > > > client.Service
> > > > > > > > > > > > > > > > > >
class anyway.
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> Any thoughts/pointers?
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> Thanks,
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
>
> > > > > > > > > > > > > > > > > >
> John Baker

Mime
View raw message