On Nov 7, 2012, at 9:36 PM, viola lu <[email protected]> wrote: > https://issues.apache.org/jira/browse/CXF-4611 > > Can somebody help review it? I already build it against cxf trunk, no > failure. Thanks in advance!
I just committed it. I kept the changes to the tests as they were fine. I changed the stuff in the JAXWSMethodInvoker to use the MessageUtils.getContextualBoolean call directly which can return the true/false that we want as the default if the property isn't set. A little cleaner. HOWEVER, this exposed another pretty bug. With the change, one of the jms system tests then hung. When a provider uses a continuation to suspend the request, one common way to handle it is to return a null. This caused the exchange to flip to a one-way and no response ever sent. I had to update the if statement to also check to make sure the interceptor chain wasn't suspended. Dan > > On Thu, Nov 1, 2012 at 2:04 PM, viola lu <[email protected]> wrote: > >> Okay, i can open a jira and provide a fix if no objection. >> >> >> On Thu, Nov 1, 2012 at 6:58 AM, Aki Yoshida <[email protected]> wrote: >> >>> Okay. >>> In that case, maybe we could change the default to true in trunk now >>> and run the TCK tests with that code to see if there is some issue. >>> If there is no issue, we can put the change in 2.7.1. In this way, we >>> won't forget about it. If this change is to be made, I think the >>> earlier, the better. >>> >>> regards, aki >>> >>> 2012/10/31 Glen Mazza <[email protected]>: >>>> Unsure of how much a spec issue this actually is, but I would say >>> adherence >>>> to the spec (whether or not trapped by the TCK) is more important than >>>> backwards compatibility, to avoid competitors claiming that we're not >>> really >>>> spec-compliant. Perhaps this change can be made in CXF 2.8.0. >>>> >>>> Glen >>>> >>>> >>>> On 10/30/2012 10:24 PM, viola lu wrote: >>>>> >>>>> But from spec, it should be. And if i run the application on axis2, it >>>>> returns 202 http code directly. >>>>> >>>>> On Fri, Oct 26, 2012 at 4:48 PM, Aki Yoshida <[email protected]> >>> wrote: >>>>> >>>>>> 2012/10/26 viola lu <[email protected]>: >>>>>>> >>>>>>> I saw changes in jira https://issues.apache.org/jira/browse/CXF-4182 >>> , >>>>>> >>>>>> and i >>>>>>> >>>>>>> tried this property, it worked. But from >>>>>>> Jaxws spec 5.1.1 Invocation >>>>>>> A Provider based service instance’s invoke method is called for each >>>>>>> message received for the service. >>>>>>> When an invoke method returns null, it is considered that no response >>>>>> >>>>>> needs >>>>>>> >>>>>>> to be sent by service >>>>>>> >>>>>>> i think it's better to automatically switch to oneway and return 202 >>> as >>>>>> >>>>>> Aki >>>>>>> >>>>>>> Yoshida mentioned . I can update JAXWSMethodInvoker to make this >>> happen. >>>>>>> Your comments? >>>>>> >>>>>> Hi Viola, >>>>>> >>>>>> We could have chosen the default value to be true and made this >>>>>> behavior automatically enabled. But we were concerned about changing >>>>>> the existing behavior and hence, opted for introducing an endpoint >>>>>> option to explicitly enable this behavior. I don't know if there is >>>>>> really a need to change its default value now unless Jaxws TCK or >>>>>> something really requires this change. >>>>>> >>>>>> Regards, aki >>>>>> >>>>>> >>>>>>> On Fri, Oct 26, 2012 at 10:06 AM, viola lu <[email protected]> >>> wrote: >>>>>>> >>>>>>>> i am using cxf 2.6.2, does it support >>>>>> >>>>>> jaxws.provider.interpretNullAsOneway >>>>>>>> >>>>>>>> property? >>>>>>>> >>>>>>>> >>>>>>>> On Thu, Oct 25, 2012 at 9:20 PM, Andrei Shakirin < >>> [email protected] >>>>>>> >>>>>>> wrote: >>>>>>>>> >>>>>>>>> In earlier CXF versions is possible to specify it explicitly via >>>>>> >>>>>> endpoint >>>>>>>>> >>>>>>>>> property "jaxws.provider.interpretNullAsOneway": >>>>>>>>> >>>>>>>>> <bean id="BooleanTrue" class="java.lang.Boolean"> >>>>>>>>> <constructor-arg index="0" value="true"/> >>>>>>>>> </bean> >>>>>>>>> >>>>>>>>> <jaxws:endpoint xmlns:customer=" >>>>>>>>> http://customerservice.example.com/" >>>>>>>>> id="CustomerServiceHTTP" address=" >>>>>>>>> http://xxx.yyy.com/service/customservice" >>>>>>>>> >>>>>>>>> >>> implementor="com.example.customerservice.server.CustomerServiceImpl"> >>>>>>>>> <jaxws:properties> >>>>>>>>> <entry >>>>>>>>> key="jaxws.provider.interpretNullAsOneway" value-ref="BooleanTrue" >>> /> >>>>>>>>> </jaxws:properties> >>>>>>>>> </jaxws:endpoint> >>>>>>>>> >>>>>>>>> Andrei. >>>>>>>>> >>>>>>>>> -----Original Message----- >>>>>>>>> From: Aki Yoshida [mailto:[email protected]] >>>>>>>>> Sent: Donnerstag, 25. Oktober 2012 14:54 >>>>>>>>> To: [email protected] >>>>>>>>> Cc: [email protected] >>>>>>>>> Subject: Re: Get a null pointer if provider returns null response >>> in >>>>>>>>> payload message mode. >>>>>>>>> >>>>>>>>> hi, >>>>>>>>> Which version of CXF are you using? >>>>>>>>> I thought it should automatically switch to a pseudo oneway mode >>> and >>>>>>>>> return an empty http 202 response and this should be handled witout >>>>>>>>> throwing an NPE. >>>>>>>>> regards, aki >>>>>>>>> p.s. moved this to users@cxf >>>>>>>>> >>>>>>>>> >>>>>>>>> 2012/10/25 viola lu <[email protected]>: >>>>>>>>>> >>>>>>>>>> Hi, Dev: >>>>>>>>>> >>>>>>>>>> I wrote a sample DOMSource payload provider as below: >>>>>>>>>> >>>>>>>>>> @WebServiceProvider() >>>>>>>>>> public class GreeterDOMSourcePayloadProvider implements >>>>>>>>>> Provider<DOMSource> { >>>>>>>>>> >>>>>>>>>> public GreeterDOMSourcePayloadProvider() { >>>>>>>>>> //Complete >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> public DOMSource invoke(DOMSource request) { >>>>>>>>>> DOMSource response = new DOMSource(); >>>>>>>>>> return null; >>>>>>>>>> } >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> and run client against it: >>>>>>>>>> >>>>>>>>>> QName serviceName3 = new >>>>>>>>>> QName("http://apache.org/hello_world_soap_http", >>>>>>>>>> "SOAPService3"); >>>>>>>>>> QName portName3 = new >>>>>>>>>> QName("http://apache.org/hello_world_soap_http", >>>>>>>>>> "SoapPort3"); >>>>>>>>>> >>>>>>>>>> SOAPService3 service3 = new SOAPService3(wsdlURL, >>>>>> >>>>>> serviceName3); >>>>>>>>>> >>>>>>>>>> InputStream is3 = >>>>>>>>>> Client.class.getResourceAsStream("GreetMeDocLiteralReq3.xml"); >>>>>>>>>> if (is3 == null) { >>>>>>>>>> System.err.println("Failed to create input stream >>> from >>>>>> >>>>>> file >>>>>>>>> >>>>>>>>> " >>>>>>>>>> >>>>>>>>>> + "GreetMeDocLiteralReq3.xml, >>> please >>>>>>>>> >>>>>>>>> check"); >>>>>>>>>> >>>>>>>>>> System.exit(-1); >>>>>>>>>> } >>>>>>>>>> >>>>>>>>>> SOAPMessage soapReq3 = >>>>>>>>>> MessageFactory.newInstance().createMessage(null, is3); >>>>>>>>>> DOMSource domReqPayload = new >>>>>>>>>> DOMSource(soapReq3.getSOAPBody().extractContentAsDocument()); >>>>>>>>>> >>>>>>>>>> Dispatch<DOMSource> dispDOMSrcPayload = >>>>>>>>>> service3.createDispatch(portName3, >>>>>>>>>> >>>>>>>>>> DOMSource.class, Mode.PAYLOAD); >>>>>>>>>> System.out.println("Invoking server through Dispatch >>>>>> >>>>>> interface >>>>>>>>>> >>>>>>>>>> using DOMSource in PAYLOAD Mode"); >>>>>>>>>> DOMSource domRespPayload = >>>>>>>>>> dispDOMSrcPayload.invoke(domReqPayload); >>>>>>>>>> >>>>>>>>>> >>>>>>>>>> but got an null pointer exception in BareOutputInterceptor. >>>>>>>>>> >>>>>>>>>> CXF doesn't support null return response in payload mode? I tried >>> it >>>>>>>>>> in message mode, it returns an empty >>> <soap-env:body></soap-env:body>, >>>>>>>>>> but not in payload mode. >>>>>>>>>> >>>>>>>>>> I think it should keep same in both mode. Is this a defect of cxf? >>>>>>>>>> >>>>>>>>>> You can reproduce it by reusing cxf sample : >>> jaxws_dispatch_provider >>>>>>>>>> >>>>>>>>>> Appreciate your comments. >>>>>>>>>> -- >>>>>>>>>> viola >>>>>>>>>> >>>>>>>>>> Apache Geronimo >>>>>>>> >>>>>>>> >>>>>>>> >>>>>>>> -- >>>>>>>> viola >>>>>>>> >>>>>>>> Apache Geronimo >>>>>>>> >>>>>>>> >>>>>>> >>>>>>> -- >>>>>>> viola >>>>>>> >>>>>>> Apache Geronimo >>>>> >>>>> >>>>> >>>> >>>> >>>> -- >>>> Glen Mazza >>>> Talend Community Coders - coders.talend.com >>>> blog: www.jroller.com/gmazza >>>> >>> >> >> >> >> -- >> viola >> >> Apache Geronimo >> >> > > > -- > viola > > Apache Geronimo -- Daniel Kulp [email protected] - http://dankulp.com/blog Talend Community Coder - http://coders.talend.com
