cxf-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Dan Diephouse" <...@envoisolutions.com>
Subject Re: Identification of Partial Responses
Date Wed, 10 Jan 2007 23:02:18 GMT
I did some research into seeing who supports partial responses and systinet
was the only one I found. Artix may as well, but I don't think Microsoft or
Axis does (I couldn't find any info on the later, so I could be wrong
there).

I did some tests with Systinet and here is what their "partial response"
looks like:

HTTP/1.0 200 OK
Date: Wed, 10 Jan 2007 22:35:46 GMT
Connection: close
Server: Systinet Server for Java/6.5.4 (Java/1.5.0_10; Windows Vista/6.0;
build SSJ-6.5.4-20060829-1824)
SOAPAction: "
http://schemas.xmlsoap.org/ws/2005/02/rm/SequenceAcknowledgement"
Content-Type: text/xml; charset=UTF-8

<?xml version="1.0" encoding="UTF-8"?>
<e:Envelope xmlns:wsrm="http://schemas.xmlsoap.org/ws/2005/02/rm" xmlns:e="
http://schemas.xmlsoap.org/soap/envelope/">
 <e:Header>
  <wsrm:SequenceAcknowledgement e:mustUnderstand="1">

<wsrm:Identifier>req:e9bfc950-a0fa-11db-961c-e9bf7b31961c</wsrm:Identifier>
    <wsrm:AcknowledgementRange Upper="1" Lower="1"/>
  </wsrm:SequenceAcknowledgement>
 </e:Header>
 <e:Body/>
</e:Envelope>

A couple thoughts. First, there is no 202, so I don't think we should be
using that as a trigger. And there obviously isn't an action, so that is
right out. It doesn't have a RelatesTo. Oddly enough it has a SOAPAction -
which seems absolutely silly to me given the fact that we're already using
RM and RM has a dependency on WS-A.

Here's how I'd like to propose watching for the partial response. I think
the RM layer should add its own listener for the message instead of letting
the Client handle it. So in the RM code we would have:

if (isOneWay && conduit.isAsync()) {
 conduit.setMessageObserver(new PartialResponseObserver());
}

The PartialResponseObserver would then be responsible for setting up a
message chain which parsed the partial responses. We might need an
additional check in there to see if the conduit is synchronous, as I'm not
sure that it would work with anything that does two way async, but I think
the idea is sound. This could be done by exposing an isAsync() method on the
transport. HTTP would return true. Most others would return false.

I could be mistaken but this has the following advantages:

   1. No isPartialResponse in the client
   2. No isPartialResponse in the HTTPConduit
   3. It works a lot more robustly as it doesn't depend on whether or not
   the HTTP status code is 202 is used and doesn't depend on the message being
   empty without a relatesTo header.

Thoughts?

- Dan

On 1/9/07, Dan Diephouse <dan@envoisolutions.com> wrote:
>
> So there aren't any distinguishing characteristics of a partial response?
> Are partial responses documented anywhere?
>
> Also, what other vendors are doing partial response?
>
> On 1/9/07, Andrea Smyth <andrea.smyth@iona.com> wrote:
> >
> > Dan Diephouse wrote:
> >
> > > Quick question regarding #2 - Do other RM implementations include a
> > > RelatesTo header in partial responses?
> > >
> > > Also, could we determine if its a partial response by checking to see
> > > if the
> > > Action is a SequenceAcknowledgement?
> >
> > No, partial responses do not have the action set.
> > A message with action SequenceAcknowledgement indicates that the
> > underlying message is a oneway, and was issued by an RMSource
> > out-of-band (e.g. when a timer signals as opposed to when the client
> > makes an invocation/the server sends a response). It also has an empty
> > body (info is carried in the SequenceAcknowledgement header).
> > When SequenceAcknowledgemens are piggybacked on an application message (
> >
> > in case of anonymous AcksTo on  partial responses, in case of acksTo==
> > replyTo on full responses), the action is that of the underlying
> > application message (null in case of partial responses).
> >
> > Andrea.
> >
> > >
> > > - Dan
> > >
> > > On 1/9/07, Glynn, Eoghan <eoghan.glynn@iona.com> wrote:
> > >
> > >>
> > >>
> > >> OK, back to the drawing board on this one :(
> > >>
> > >> A quick google on this question suggests that, notwithstanding some
> > >> confusion, an empty SOAP body is actually kosher in certain
> > >> circumstances ... see for example [1].
> > >>
> > >> So off the top of my head, I think we'd have to do something like the
> > >> following to make the partial/full response distinction more
> > >> bullet-proof:
> > >>
> > >> 1. Stop sending the wsa:RelatesTo in the partial response (this is
> > >> potentially misleading in any case)
> > >> 2. Set something like a Message.IS_RESPONSE property to false in the
> > >> WS-A layer if the wsa:RelatesTo header is not present
> > >> 3. Replace the ClientImpl.isPartialResponse() logic with
> > >> Boolean.FALSE.equals(inMessage.get(Message.IS_RESPONSE))
> > >>
> > >> Checking via Boolean.FALSE.equals() would ensure that the ClientImpl
> > >> logic would be valid even if WS-A layer was absent (in which case the
> >
> > >> IS_RESPONSE property would be null, but we can assume that a partial
> > >> response would never be received, as this may only occur if WS-A
> > headers
> > >> were present in the corresponding request).
> > >>
> > >> Cheers,
> > >> Eoghan
> > >>
> > >> [1]
> > >> http://lists.jboss.org/pipermail/jbossws-issues/2006-October/000022.html
> >
> > >>
> > >>
> > >> > -----Original Message-----
> > >> > From: Andrea Smyth [mailto:andrea.smyth@iona.com]
> > >> > Sent: 09 January 2007 09:58
> > >> > To: cxf-dev@incubator.apache.org
> > >> > Subject: Identification of Partial Responses
> > >> >
> > >> > Further to the dicussions on the
> > >> > "JaxwsInterceptorRemoverInterceptor and RM" subject on the
> > >> > different ways to identify a partial response I came accross
> > >> > an example of application messages with empty soap bodies.
> > >> > This is in the
> > >> > org.apache.cxf.systest.basicDOCBare.DOCBareClientServerTest
> > >> > system test, where the response to the putLastTradedPrice
> > >> > invocation is a soap message with an empty body.
> > >> > Addressing is not involved.
> > >> > First off, is the empty ssoap body OK and to be expected?
> > >> > Secondly, if it is, what should I expect if this
> > >> > client-server setup uses addressing and non-anonymous
> > >> > ReplyTo? It seems we can distinguish the partial response
> > >> > from the real response not by checking for an empty body
> > >> > (regardless if this results in empty of no list content in the
> > >> > message) but need to look also at the addressing headers ...
> > >> > Any ideas?
> > >> >
> > >> > Andrea.
> > >> >
> > >>
> > >
> > >
> > >
> >
> >
>
>
> --
> Dan Diephouse
> Envoi Solutions
> http://envoisolutions.com | http://netzooid.com/blog
>



-- 
Dan Diephouse
Envoi Solutions
http://envoisolutions.com | http://netzooid.com/blog

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message