Did you receive my previous mail?
I did not receive any answer nor the mail was accessible on the web.
Sorry if I'm continuing to submit the problem, but I have no idea if
there are alternatives to this behavior.
Thanks again
Leonardo Campanale ha scritto:
Hello everyone.
I found that if I intentionally throw an AxisFault in my handler. after
the processing of addressing headers, the calls chain really stops and
the pivot is not called at all.
But the AxisServlet obviously considers the event as a fault and
returns a page error (code 500 SC_INTERNAL_SERVER_ERROR) to the
calling client. In this response page I'm able to substitute the
error message with the desired message, coming from the called
service, but I'm not able to change the http headers (unless I rewrite
part of AxisServlet dopost).
So my real concern is about the way to intercept the path toward the
server, and avoid the call to the real pivot, or, in other terms, to
substitute the real pivot with my handler (that manages the addressing
headers)
Thanks again
Leonardo Campanale.
Davanum Srinivas ha scritto:
Ian,
there are several tests in axis test harness for testing these
scenarios and several test cases in jaxrpc tck as well. so we should
be all set...IF you see a problem scenario, can you please refine the
axis tests? (test\wsdl\jaxrpchandler**) and open a bug report? I feel
all the cases are covered though i don't remember exactly the
implementation detail off the top of my head.
-- dims
On Mon, 14 Mar 2005 18:44:26 -0500, Ian Springer <[EMAIL PROTECTED]> wrote:
Davanum Srinivas wrote:
see HandlerChainImpl
-- dims
Dims,
I did see that class. However, looking at JAXRPCHandler, it basically
always creates a HandlerChainImpl that contains only a single handler,
the one specified via the className option in the wsdd. Also,
JAXRPCHandler#invoke() ignores the return values of handleRequest() and
handleResponse(), and JAXRPCHandler#onFault() ignores the return value
of handleFault(). So it looks to me like if one of my JAX-RPC Handler's
handle*() methods returns false, HandlerChainImpl will also return
false, but JAXRPCHandler never propogates this to the rest of the Axis
handler chain. So the request will still get passed through any other
Axis handlers, including other JAX-RPC handlers, that are configured in
the wsdd. Or am I missing something?
Ian
--- Ian Springer <[EMAIL PROTECTED]> wrote:
Leonardo Campanale wrote:
Finally I was able to write a class (handler) able to intercept the
call and reroute the message to a final destination.
To do this I wrote the handleRequest where I had to call the service
through the To field of the ws-a headers and I had to save the
response in some way (in a map)
On the return path toward the client I had to intercept the response
message (handleResponse) and I substituted the message with the saved
value.
What happens now is that in my handleRequest I forward the message to
the desided address, but the call continues also to be sent to the
TargetEndpointAddress specified in the client call. As a consequence
of this behavior sometimes this second call fails (for example bacause
of different signatures between the desired service and the endpoint
service ). To face this scenario I had to override also the
handleFault method in my handler.
So the problem is now that, on the handleRequest, it would be better
to stop the message path on the server and use this handler as a
pivot, in order to avoid that the original service is called.
How is it possible?
JAX-RPC says that handleRequest() can return false to short-circuit
further processing of the handler chain, as well as prevent dispatching
to the target endpoint - see section 12.2.2 of the JAX-RPC 1.1 spec.
Unfortunately, looking at org.apache.axis.handlers.JAXRPCHandler, it
doesn't look to me as if Axis complies with this part of the spec.
Ian
Davanum Srinivas - http://webservices.apache.org/~dims/
|