Hi!

I tried something like this about a year ago - it's tricky. I'll try to
explain what I did using your terminology.

In my case as well, the client would invoke a method on MyService, but I
wanted the same method to be forwarded to CommonService. What I found out
quickly was that unless MyService is deployed, Axis will fail immediately
saying "No such method/service".

My next bright idea was to do on-demand deployment. Here, when the user
first invokes MyService.method(), I would intercept the call in a handler,
check if MyService was deployed, and if it wasn't, I would generate the WSDD
for MyService and deploy it. Then, I would forward the call to the
newly-deployed MyService, which then forwarded to CommonService.

This approach worked partially. I was able to intercept the call correctly,
detect whether or not MyService was deployed and generate the WSDD. In the
WSDD I made sure to mention that the service class was MyServiceImpl.java. I
wrote MyServiceImpl.java to have all of the methods that were there in
CommonServiceImpl.java, but the implementations didn't do much. For every
MyServiceImpl.method(), I simply forwarded the call to
CommonServiceImpl.method(), perhaps after adding a parameter or two.

However, where I got stuck was trying to convince Axis that MyService had
been deployed. I tried many things including shoving responses into the
return, but it would fail. My understanding from this experience is that
when your client invokes MyService.method(), Axis constructs the handler
chain before actually invoking any handlers. The first time your client
invokes MyService.method(), MyService has NOT been deployed, therefore it
doesn't appear in the handler chain. At that point, no matter what you do,
the call is doomed to fail. Of course, I would proceed and deploy MyService,
but it would be useless - the call would always fail.

However, the second call to any of MyService's methods would work because
this time around Axis was able to find MyService and insert it into the
handler chain. All subsequent calls would also succeed. As a result, we had
to explain to our clients to ignore the failure on the first method
invocation and try again. What we did was provide a dummy method in
MyService whose main job was to make the on-demand deployment happen. The
results/failures of the dummy method were ignored.

All of this was with Axis 1.1 - things may have changed in 1.2. Also,
perhaps others have better ideas but a year ago I couldn't get much help on
this issue so I just tried whatever I thought was reasonable.

Hope that helps!

Anand

On Tue, 14 Sep 2004 [EMAIL PROTECTED] wrote:

:  I want to call a WS called for example MyService but MyService isn't
: deployed in Axis (or anywhere else). Instead I want other WS to be
: called, for example CommonService (wchich is deployed of course) and a
: file MyService.txt to be passed as an argument for CommonService. I
: thought that I might write a handler to be processed in global chain that
: substitutes MyService with CommonService and adds argument (path to
: MyService.txt) but that does not change anything. What am I doing wrong?

Reply via email to