Thanks Daniel.  
You are right. 
Thank you very much.
Now I can deal with it by a custom spring-bus. and hoping CXF could support 
such feature in future;

----- Original Message ----- 
From: "Daniel Kulp" <dk...@apache.org>
To: <users@cxf.apache.org>
Cc: "ext2" <x...@tongtech.com>
Sent: Wednesday, June 01, 2011 2:48 AM
Subject: Re: A Raw XML Client's MEP questions.


> 
> 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" <dk...@apache.org>
>> To: <users@cxf.apache.org>
>> Cc: "ext2" <x...@tongtech.com>
>> 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:gma...@talend.com]
>> >> > Date: 2011/5/27 20:38
>> >> > Receiver: users@cxf.apache.org
>> >> > 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
> dk...@apache.org
> http://dankulp.com/blog
> Talend - http://www.talend.com
> 
>

Reply via email to