You are viewing a plain text version of this content. The canonical link for it is here.
Posted to java-user@axis.apache.org by Peter McEvoy <pe...@excite.com> on 2005/12/16 15:51:22 UTC

Exception not thrown when server not available using OneWay messages

Hi there,
I have a client that sends OneWay messags to a server - this works fine.  However, when the server is not available (down/not listening for HTTP), my client code does not get an exception.  Granted, the Axis code _does_ seem to get an exception (java.net.ConnectException), but this does not seem to be re-thrown, so my client code does not know that the async call has actually failed.  

I've looked in the archive, and there are some messages about server side exceptions during async calls, and I agree that the client should not know about them - however server unavailable is at a lower level, and the client probably _should_ know about these.

As there something I am missing?

My client code looks like:

		try{
			service.setEndpointAddress("PingServiceAsyncBinding", "http://localhost:9998/PingServiceAsync.asmx");
		} catch (Exception e){
			log.error("Exception setting service endpoint", e);
		}

		try {
			PingServiceAsyncBinding binding = service.getPingServiceAsyncBinding();

			log.debug("Sending Ping message...");
			binding.pingAsync();

			log.debug("Done.");
		} catch (Exception e){
			log.error("Exception during PingAsync", e);
		}

Is there a property I need to set on the locator in order to be notified about exceptions?

Sincerely
Pete



Re: Exception not thrown when server not available using OneWay messages

Posted by iksrazal <ik...@gmail.com>.
First, Axis2 One Way _does_ throw exceptions in its current state: 

http://issues.apache.org/jira/browse/AXIS2-304

Basically I get a socket timeout on long requests. 

AFAIK, there are two types of in-only. Robust in-only - which I believe is the 
current implementation - and fire-and-forget - the latter AFAIK yet to be 
implemented in axis2. 

Furthermore, I have seen the 'server is not available, yet no exception' issue 
in the current robust-only implementation. I haven't read the spec entirely, 
but .net behavior may indicate that there should be compatibilty. 

My suggestion is to verify that the wsdl 2.0 spec does indeed indicate that 
robust in-only should throw when the server is down - that seems to be what 
you want. If so and there are no further comments, I suggest filing a JIRA. 

HTH,
iksrazal

Em Sábado 17 Dezembro 2005 15:15, o Peter McEvoy escreveu:
> Hmmm.  This does not seem very satsifactory.  I fully agree that *server
> code* exceptions should not be propagated back to the client once a HTTP
> 202 is received, but anything up to that should generate an exception.  If
> I want to implement reliable messaging on top of the axis library (ala
> WS-ReliableMessaging), how on earth can I detect transport level problems,
> such as a in a disconnected "smart" client and implement retries etc?
>
> However, if you do not accept this argument then I would point out that
> OneWay is declared within server-side WSDL, so it seems that the WSDL2Java
> utility does not generate client code that uses a "request/response MEP" as
> you suggest.  (I am an application developer and really don't want to
> concern myself with writing transport level, or even SOAP level code, and
> hence why I use the WSDL2Java utility).
>
> As a side point, .Net generated one-way proxies at least report transport
> level problems that are nothing to do with SOAP
>
> For what it's worth,
>
> Pete
>
>   _____
>
> From: Anne Thomas Manes [mailto:atmanes@gmail.com]
> Sent: 16 December 2005 20:05
> To: axis-user@ws.apache.org; peter_mcevoy@excite.com
> Subject: Re: Exception not thrown when server not available using OneWay
> messages
>
>
> One-way messages do not return exceptions under any circumstances. If you
> require a notice that a message can't be delivered, then you should use a
> request/response MEP.
>
> Anne
>
>
> On 12/16/05, Peter McEvoy <pe...@excite.com> wrote:
>
>
> Hi there,
> I have a client that sends OneWay messags to a server - this works fine.
> However, when the server is not available (down/not listening for HTTP), my
> client code does not get an exception.  Granted, the Axis code _does_ seem
> to get an exception (java.net.ConnectException), but this does not seem to
> be re-thrown, so my client code does not know that the async call has
> actually failed.
>
> I've looked in the archive, and there are some messages about server side
> exceptions during async calls, and I agree that the client should not know
> about them - however server unavailable is at a lower level, and the client
> probably _should_ know about these.
>
> As there something I am missing?
>
> My client code looks like:
>
>                 try{
>                         service.setEndpointAddress
> ("PingServiceAsyncBinding", "http://localhost:9998/PingServiceAsync.asmx")
> <http://localhost:9998/PingServiceAsync.asmx> ;
>                 } catch (Exception e){
>                         log.error("Exception setting service endpoint", e);
>                 }
>
>                 try {
>                         PingServiceAsyncBinding binding =
> service.getPingServiceAsyncBinding();
>
>                         log.debug("Sending Ping message...");
>                         binding.pingAsync();
>
>                         log.debug("Done.");
>                 } catch (Exception e){
>                         log.error("Exception during PingAsync", e);
>                 }
>
> Is there a property I need to set on the locator in order to be notified
> about exceptions?
>
> Sincerely
> Pete

RE: Exception not thrown when server not available using OneWay messages

Posted by Peter McEvoy <pe...@excite.com>.
Hmmm.  This does not seem very satsifactory.  I fully agree that *server
code* exceptions should not be propagated back to the client once a HTTP 202
is received, but anything up to that should generate an exception.  If I
want to implement reliable messaging on top of the axis library (ala
WS-ReliableMessaging), how on earth can I detect transport level problems,
such as a in a disconnected "smart" client and implement retries etc?  
 
However, if you do not accept this argument then I would point out that
OneWay is declared within server-side WSDL, so it seems that the WSDL2Java
utility does not generate client code that uses a "request/response MEP" as
you suggest.  (I am an application developer and really don't want to
concern myself with writing transport level, or even SOAP level code, and
hence why I use the WSDL2Java utility).
 
As a side point, .Net generated one-way proxies at least report transport
level problems that are nothing to do with SOAP
 
For what it's worth,
 
Pete

  _____  

From: Anne Thomas Manes [mailto:atmanes@gmail.com] 
Sent: 16 December 2005 20:05
To: axis-user@ws.apache.org; peter_mcevoy@excite.com
Subject: Re: Exception not thrown when server not available using OneWay
messages


One-way messages do not return exceptions under any circumstances. If you
require a notice that a message can't be delivered, then you should use a
request/response MEP.

Anne


On 12/16/05, Peter McEvoy <pe...@excite.com> wrote: 


Hi there,
I have a client that sends OneWay messags to a server - this works fine.
However, when the server is not available (down/not listening for HTTP), my
client code does not get an exception.  Granted, the Axis code _does_ seem
to get an exception (java.net.ConnectException), but this does not seem to
be re-thrown, so my client code does not know that the async call has
actually failed.

I've looked in the archive, and there are some messages about server side
exceptions during async calls, and I agree that the client should not know
about them - however server unavailable is at a lower level, and the client
probably _should_ know about these.

As there something I am missing?

My client code looks like:

                try{
                        service.setEndpointAddress
("PingServiceAsyncBinding", "http://localhost:9998/PingServiceAsync.asmx")
<http://localhost:9998/PingServiceAsync.asmx> ;
                } catch (Exception e){
                        log.error("Exception setting service endpoint", e);
                }

                try {
                        PingServiceAsyncBinding binding =
service.getPingServiceAsyncBinding();

                        log.debug("Sending Ping message...");
                        binding.pingAsync();

                        log.debug("Done.");
                } catch (Exception e){
                        log.error("Exception during PingAsync", e);
                }

Is there a property I need to set on the locator in order to be notified
about exceptions?

Sincerely
Pete






Re: Exception not thrown when server not available using OneWay messages

Posted by Anne Thomas Manes <at...@gmail.com>.
One-way messages do not return exceptions under any circumstances. If you
require a notice that a message can't be delivered, then you should use a
request/response MEP.

Anne

On 12/16/05, Peter McEvoy <pe...@excite.com> wrote:
>
>
> Hi there,
> I have a client that sends OneWay messags to a server - this works
> fine.  However, when the server is not available (down/not listening for
> HTTP), my client code does not get an exception.  Granted, the Axis code
> _does_ seem to get an exception (java.net.ConnectException), but this does
> not seem to be re-thrown, so my client code does not know that the async
> call has actually failed.
>
> I've looked in the archive, and there are some messages about server side
> exceptions during async calls, and I agree that the client should not know
> about them - however server unavailable is at a lower level, and the client
> probably _should_ know about these.
>
> As there something I am missing?
>
> My client code looks like:
>
>                 try{
>                         service.setEndpointAddress("PingServiceAsyncBinding",
> "http://localhost:9998/PingServiceAsync.asmx");
>                 } catch (Exception e){
>                         log.error("Exception setting service endpoint",
> e);
>                 }
>
>                 try {
>                         PingServiceAsyncBinding binding =
> service.getPingServiceAsyncBinding();
>
>                         log.debug("Sending Ping message...");
>                         binding.pingAsync();
>
>                         log.debug("Done.");
>                 } catch (Exception e){
>                         log.error("Exception during PingAsync", e);
>                 }
>
> Is there a property I need to set on the locator in order to be notified
> about exceptions?
>
> Sincerely
> Pete
>
>
>