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

Reply via email to