axis-java-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Glen Daniels <gdani...@macromedia.com>
Subject RE: Using Axis without deployment (totally dynamic)
Date Tue, 08 Jan 2002 17:51:40 GMT
Hi Thomas!
 
Comments inline:

-----Original Message-----
From: Thomas Börkel 
Sent: Freitag, 28. Dezember 2001 16:29
To: Axis Mailinglist
Subject: Using Axis without deployment (totally dynamic)



HI! 

I'd like to use Axis in the following way: 

- no deployment files (.wsdd) AT ALL  

Definitely doable.

 
- my own transport  

Yup.

 
- my own dispatcher (with my own security)   

 What exactly do you mean by this - your own transport listener (replace AxisServlet)?

 
- dynamic WSDL generation  

Yup. 

What I already know: 
- how to generate WSDL dynamically as file 
- how to DEPLOY my own dispatcher 
- how to implement my own transport (nice file transport example in alpha3!) 

Now, the question is: 
Can Axis work without ANY deployment files in my case? 

To test my own dispatcher, I already created some "dummy" deployment with a dummy class and
dummy method because my dispatcher should work totally dynamic, without having to deploy each
and every class and method first. But that seems to me like a hack. Is there another way to
create a dispatcher that does not need each and every class and method to be deployed?

If working without deployment of my dispatcher is not possible, at least how can I tell Axis
from where to load the .wsdd files? 

Hm - again, I'm not sure exactly what you mean by "dispatcher", but I think some of what you
want is pretty easy, so I'll describe it and then you can let us know if this is good enough.

First of all, Axis gets its deployment info from a ConfigurationProvider.   The default one
is org.apache.axis.configuration.FileProvider, which reads a WSDD file and deploys it into
the engine.  There is also an "XMLStringProvider" in that package, which accepts a WSDD deployment
in String form without touching the filesystem.  We use this class to hardcode configurations
for some of our tests - check out test.wsdd.* for examples.  So that's one option.  Another
option is to simply write your own ConfigurationProvider and have it directly deploy things
into the engine using AxisEngine.deployService(), etc.

So how do you ensure a particular ConfigurationProvider is the one that gets used in creating
an AxisEngine (either a client or a server)?  There are a few ways.  If you're on the client
side of things, you need to pass your desired ConfigurationProvider to the Service (org.apache.axis.client.Service)
object, either in the constructor or by calling service.setConfigProvider() - note that this
won't have any effect after the Service has already been initialized and used.  

On the server, you can see how things work by looking at the AxisServlet.  We get an AxisServerFactory
(which will usually be org.apache.axis.server.DefaultAxisServerFactory), and then we can either
pass in a ConfigurationProvider, or rely on the default initialization to get us one.  Default
initialization will check a system property ("axis.configProviderClass") for a classname,
and use one of those if it finds one - otherwise it uses a FileProvider pointing to the default
config file location.  See DefaultAxisServerFactory.java for details.

Alternately, you can just create an AxisServer with the NullProvider, which provides no configuration
to the engine at all.  Then you can dynamically deploy things using the engine APIs.

So, does this help you at all?

Thanks! 

Regards and happy new year, 
Thomas 


Mime
View raw message