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 Gordon Gekko <di...@tiscalinet.it> on 2005/08/17 22:20:50 UTC

[axis2] in-only MEP

Hi!

I've a question about in-only message exchange pattern and exception.

I've written a client and a server that both manage in-only message 
exchange.  Now, when the server computation goes fine I get back a http 
packet with 202 (accepted) as response code and when something goes 
wrong an exception is raised in the server and I get back an http 
message with response code 500 (internal server error) and a soap fault 
message in the body.  But in the latter case an exception is not raised 
in the client so I cannot notice that something went wrong in the server.

I know that it is called "fire and forget" but I should not be aware 
that something went wrong in the server?  Or am I doing something wrong?

Thanks a lot for any reply!

Diego


Re: [axis2] in-only MEP

Posted by Anne Thomas Manes <at...@gmail.com>.
WSDL 1.1 does not support the Robust In-Only MEP. If you are using
WSDL 1.1 (pretty much required if you want to support interop), you
must catch the HTTP error.

Anne

On 8/18/05, Gordon Gekko <di...@tiscalinet.it> wrote:
> Hi Anne,
> 
> I'm using axis2 but with a wsdl written following the 1.1 specification.
>  The wsdl portType and binding are very simple:
> 
>  <wsdl:portType name="BankPortType">
>   <wsdl:operation name="accumulate">
>    <wsdl:input message="tns:accumulateRequestMessage" />
>   </wsdl:operation>
>  </wsdl:portType>
> 
>  <wsdl:binding name="BankBinding" type="tns:BankPortType">
>   <soap:binding transport="http://schemas.xmlsoap.org/soap/http"
> style="document" />
>   <wsdl:operation name="accumulate">
>    <soap:operation soapAction="accumulate" />
>    <wsdl:input>
>     <soap:body use="literal" />
>    </wsdl:input>
>   </wsdl:operation>
>  </wsdl:binding>
> 
> Then I ran the wsdl2java tool and generated the classes both for the
> client and the server.  I modified the message receiver so that it
> extends AbstractInMessageReceiver instead of
> AbstractInOutSyncMessageReceiver and the stub so that it uses the
> MessageSender API instead of Call.  This works fine except that it has,
> as you said, an in-only MEP behaviour instead of Robust in-only.
> 
> In the client I tried to set the field isExceptionToBeThrownOnSOAPFault
> of the MessageSender object instance to true, but it still doesn't throw
> an exception when it receives a soap fault.
> 
> How can I modify the code in order to have a robust in-only MEP behaviour?
> I've not looked into wsdl 2.0 do you think that it worth the effort?
> Maybe it has more expressive power so it's so the code that id generated
> from the wsdl conforms better to what you have in mind.
> 
> Thanks,
> 
> Diego
> 
> 
> Anne Thomas Manes wrote:
> > Are you using Axis1 or Axis2?
> >
> > If you are using Axis1, then you'll need to catch the HTTP 500 error
> > code. Your client won't actually receive the SOAP fault, because Axis
> > won't process any returned SOAP messages.
> >
> > If you're using Axis 2, along with SOAP 1.2 and WSDL 2.0, then you can
> > use the Robust In-Only MEP [1], which supports return of fault
> > messages.
> >
> > [1] http://www.w3.org/TR/2005/WD-wsdl20-adjuncts-20050803/#patterns
> >
> > Anne
> >
> > On 8/17/05, Gordon Gekko <di...@tiscalinet.it> wrote:
> >
> >>Hi!
> >>
> >>I've a question about in-only message exchange pattern and exception.
> >>
> >>I've written a client and a server that both manage in-only message
> >>exchange.  Now, when the server computation goes fine I get back a http
> >>packet with 202 (accepted) as response code and when something goes
> >>wrong an exception is raised in the server and I get back an http
> >>message with response code 500 (internal server error) and a soap fault
> >>message in the body.  But in the latter case an exception is not raised
> >>in the client so I cannot notice that something went wrong in the server.
> >>
> >>I know that it is called "fire and forget" but I should not be aware
> >>that something went wrong in the server?  Or am I doing something wrong?
> >>
> >>Thanks a lot for any reply!
> >>
> >>Diego
> >>
> >
> >>
> >
>

Re: [axis2] in-only MEP

Posted by Gordon Gekko <di...@tiscalinet.it>.
Hi Anne,

I'm using axis2 but with a wsdl written following the 1.1 specification. 
  The wsdl portType and binding are very simple:

  <wsdl:portType name="BankPortType">
   <wsdl:operation name="accumulate">
    <wsdl:input message="tns:accumulateRequestMessage" />
   </wsdl:operation>
  </wsdl:portType>

  <wsdl:binding name="BankBinding" type="tns:BankPortType">
   <soap:binding transport="http://schemas.xmlsoap.org/soap/http" 
style="document" />
   <wsdl:operation name="accumulate">
    <soap:operation soapAction="accumulate" />
    <wsdl:input>
     <soap:body use="literal" />
    </wsdl:input>
   </wsdl:operation>
  </wsdl:binding>

Then I ran the wsdl2java tool and generated the classes both for the 
client and the server.  I modified the message receiver so that it 
extends AbstractInMessageReceiver instead of 
AbstractInOutSyncMessageReceiver and the stub so that it uses the 
MessageSender API instead of Call.  This works fine except that it has, 
as you said, an in-only MEP behaviour instead of Robust in-only.

In the client I tried to set the field isExceptionToBeThrownOnSOAPFault 
of the MessageSender object instance to true, but it still doesn't throw 
an exception when it receives a soap fault.

How can I modify the code in order to have a robust in-only MEP behaviour?
I've not looked into wsdl 2.0 do you think that it worth the effort? 
Maybe it has more expressive power so it's so the code that id generated 
from the wsdl conforms better to what you have in mind.

Thanks,

Diego


Anne Thomas Manes wrote:
> Are you using Axis1 or Axis2?
> 
> If you are using Axis1, then you'll need to catch the HTTP 500 error
> code. Your client won't actually receive the SOAP fault, because Axis
> won't process any returned SOAP messages.
> 
> If you're using Axis 2, along with SOAP 1.2 and WSDL 2.0, then you can
> use the Robust In-Only MEP [1], which supports return of fault
> messages.
> 
> [1] http://www.w3.org/TR/2005/WD-wsdl20-adjuncts-20050803/#patterns
> 
> Anne
> 
> On 8/17/05, Gordon Gekko <di...@tiscalinet.it> wrote:
> 
>>Hi!
>>
>>I've a question about in-only message exchange pattern and exception.
>>
>>I've written a client and a server that both manage in-only message
>>exchange.  Now, when the server computation goes fine I get back a http
>>packet with 202 (accepted) as response code and when something goes
>>wrong an exception is raised in the server and I get back an http
>>message with response code 500 (internal server error) and a soap fault
>>message in the body.  But in the latter case an exception is not raised
>>in the client so I cannot notice that something went wrong in the server.
>>
>>I know that it is called "fire and forget" but I should not be aware
>>that something went wrong in the server?  Or am I doing something wrong?
>>
>>Thanks a lot for any reply!
>>
>>Diego
>>
> 
>>
> 

Re: [axis2] in-only MEP

Posted by Anne Thomas Manes <at...@gmail.com>.
Are you using Axis1 or Axis2?

If you are using Axis1, then you'll need to catch the HTTP 500 error
code. Your client won't actually receive the SOAP fault, because Axis
won't process any returned SOAP messages.

If you're using Axis 2, along with SOAP 1.2 and WSDL 2.0, then you can
use the Robust In-Only MEP [1], which supports return of fault
messages.

[1] http://www.w3.org/TR/2005/WD-wsdl20-adjuncts-20050803/#patterns

Anne

On 8/17/05, Gordon Gekko <di...@tiscalinet.it> wrote:
> Hi!
> 
> I've a question about in-only message exchange pattern and exception.
> 
> I've written a client and a server that both manage in-only message
> exchange.  Now, when the server computation goes fine I get back a http
> packet with 202 (accepted) as response code and when something goes
> wrong an exception is raised in the server and I get back an http
> message with response code 500 (internal server error) and a soap fault
> message in the body.  But in the latter case an exception is not raised
> in the client so I cannot notice that something went wrong in the server.
> 
> I know that it is called "fire and forget" but I should not be aware
> that something went wrong in the server?  Or am I doing something wrong?
> 
> Thanks a lot for any reply!
> 
> Diego
> 
>