A patch is definitely something we'd consider, but we'd need to test it a bit 
to see what impact it may have on the JAX-WS TCK's and such.    It has a bunch 
of specific tests for the MEPS that a change such as this may run into.  

The best option MAY be to introduce a configuration flag or similar to allow 
the one-ways to return a fault.   Thus, the default and correct behavior would 
remain and the your behavior could be turned on if needed.


Dan


On Tuesday, May 31, 2011 4:49:58 AM ext2 wrote:
> Hi, Daniel:
> 
> sorry for reply too late; and thanks your help very much;
> 
> I have tried, and it does work as you have said;
> 
> 1) the one-way invocation can deal with 200 (success) response correctly
> and return the response soap xml ; 2) But it cannot deal with 500 (fault)
> response correctly, and cannot return the soap-fault response, and only
> throw a common run-time exception; At the end of the mail, I give some of
> the source code of CXF to illustrate why it couldn't;
> 
> 
> Beside, I haven't find mechanism that I could easy to use to extending CXF
> to support such a feature. Until now, the methods I have find is:
> 
> 1) rewrite a AbstractHTTPTransportFactory  to return a rewrited 
> HTTPConduite(which could deal with 500 response),  and configure it in a
> spirng-bus; But this way is not so easy to use (the user must config bus
> seperately, default-bus will not works)
> 
> 2) Just direct change the source code of CXF , and make it to work with 500
> response; But this will cause the CXF jar I am using is not compatible
> with the community version; So  I am wonderring  if CXF could accept a
> patch to make HTTPConduit to deal with 500 response work?.  If so , we
> needn't configure a seperate bus, and also I could keep compatible with
> CXF community version;
> 
> Anyway , I am a fresh man to CXF. Maybe there are other extension mechanism
> I haven't find which is easy to extend such a feature; If it exists,
> please let me know;
> 
> 
> Following is the source code, illustrate why existing CXF HTTPConduit
> cannot deal with 500 response
> 
> HTTPConduit.WrappedOutputStream.handleResponseInternal(){
>      if (isOneway(exchange)) {
> 
> //here: ChunkedUtil.getPartialResponse doesn't deal with 500 response,
> always return NULL inputstream( but we can modify it to support 500
> response) in = ChunkedUtil.getPartialResponse(connection, responseCode);
> if (in == null) {
> //so connection.getInputStream() is called, then a Exception will be raised
> (As only connection.getErrorStream() is allowed for 500 response)
> connection.getInputStream().close();
>                     return;
>                 }
>     }
> }
> 
> 
> ----- Original Message -----
> From: "Daniel Kulp" <[email protected]>
> To: <[email protected]>
> Cc: "ext2" <[email protected]>
> Sent: Saturday, May 28, 2011 2:37 AM
> Subject: Re: A Raw XML Client's MEP questions.
> 
> > On Friday, May 27, 2011 9:29:20 AM ext2 wrote:
> >> Thanks Glen Mazza:
> >> 
> >> It seems the Dispatch interface ask for choosing MEP (invokeOneway() /
> >> invoke()), but in  my situation , I doesn't know what's the MEP is.
> >> Because the only thing I know is just the xml data, and doesn't know
> >> anything about operation;
> > 
> > You may be able to do this with a couple of interceptors, but you'll need
> > to experiment a bit to find out.
> > 
> > First off, I'd experiment a bit with the invokeOneWay().   It may "just
> > work". If something goes wrong on the server side PRIOR to being able to
> > determine the MEP on the server side, a fault would get sent back. 
> > Thus, the client does wait there for the 200.   I'm not 100% sure what
> > happens on a 500 (fault) with the invokeOneWay.   It might "just work". 
> >  If not, you may be able to register an interceptor or similar that
> > would, on a fault, reset the message.getExchange().isOneWay() status to
> > false if an exception occurs. Possibly an "out" interceptor that on the
> > "handleFault" method would reset it.
> > 
> > Definitely some stuff to experiment with.    That said, if Axis2 is
> > setting up that kind of MEP in a WSDL1 document, even if it is just the
> > portType or similar, it's generating an invalid wsdl.
> > 
> > Dan
> > 
> >> > ----Original-----
> >> > Sender: Glen Mazza [mailto:[email protected]]
> >> > Date: 2011/5/27 20:38
> >> > Receiver: [email protected]
> >> > Subject: Re: A Raw XML Client's MEP questions.
> >> > 
> >> > For the client, JAX-WS Dispatch (example here:
> >> > http://www.jroller.com/gmazza/entry/calling_rpc_encoded_web_services
> >> > but google for more) will allow you access to the raw XML of which
> >> > you can do anything you want with.  JAX-WS Provider is the web
> >> > service provider counterpart to it.  That might be what you're
> >> > looking for.
> >> > 
> >> > Regards,
> >> > Glen
> >> > 
> >> > On 05/27/2011 08:03 AM, ext2 wrote:
> >> > > Hi:
> >> > > First , forgive my long story. I cannot using a short words to
> >> > > 
> >> > > describe my question clearly;
> >> > > 
> >> > >     Recently I want to use CXF as client to connecting an exists
> >> > >     system
> >> 
> >> which
> >> 
> >> > > already support some web-service like service;
> >> > > 
> >> > >    Here "web-service like" means: the service only use soap protocol
> >> > >    to
> >> > > 
> >> > > exchange  it's custom xml data. Although the service does supply
> >> > > WSDL,
> >> 
> >> but
> >> 
> >> > > the  WSDL only describe operations, and there are nothing about what
> >> > > xml schema is;
> >> > > 
> >> > >     The exists system is implemented using Axis2. I hate it, and do
> >> > >     not
> >> 
> >> want
> >> 
> >> > > to use Axis2 in my program, because of XML performance. I must
> >> > > transform standard xml to axiom(axis2's xml api), this is a big
> >> > > performance
> >> 
> >> bottle)
> >> 
> >> > > So I want to know how could I using CXF to implement the raw xml
> >> > > 
> >> > > client? That's to say it must full-fill following requirement:
> >> > > 1) the raw xml client just use with xml data as input and output
> >> > > 2) the program which call the raw-xml client can give body xml and
> >> > > 
> >> > > header xml as input, and wish the raw xml client to send the
> >> > > xml(body
> >> 
> >> and
> >> 
> >> > > header) by soap-protocol;
> >> > > 
> >> > > 3) the raw xml client cannot determine MEP of operation by the xml's
> >> > > 
> >> > > schema, it can only determine if response soap xml received ,  or
> >> > > just a http accept, or soap-fault  at run-time;
> >> > > 
> >> > > In a word, the raw-xml client is somewhat  like just working on soap
> >> > > 
> >> > > protocol level;
> >> > > 
> >> > > After checking the source code of CXF, I feel the 3) is most
> >> > > 
> >> > > difficult to implement, if I doesn't change the CXF's internal
> >> > > implementations, and just using CXF's build-in extending mechanis(
> >> > > for example: interceptors).
> >> > > 
> >> > > Does anyone has an suggestion about how could I extend CXF to
> >> > > 
> >> > > implement these requirement (especially requirement 3) ?
> >> > 
> >> > --
> >> > Glen Mazza
> >> > Software Engineer, Talend (http://www.talend.com)
> >> > blog: http://www.jroller.com/gmazza

-- 
Daniel Kulp
[email protected]
http://dankulp.com/blog
Talend - http://www.talend.com

Reply via email to