[ 
https://issues.apache.org/jira/browse/CXF-5942?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Bence Takács updated CXF-5942:
------------------------------

    Description: 
It is not clear which are the use cases when one can use asynchronous client 
calls. The possible use cases would be:
- server-side implemented callback transport
- server-side implemented polling transport
- client-side only callback using non-blocking IO

However http.asyncclient supports all of them, I see no sign of CXF supporting 
the last one. Is there a way of calling a server this way?

Using the configuration below I tried to call a WS this way, but CXF is always 
looking for async binding on the server side (javax.xml.ws.WebServiceException: 
Could not find wsdl:binding operation info for web method 
getDataFromWebService_Async). 

Client configuration:
{quote}
<jaxws:client id="client"
    serviceClass="my.sample.SampleWebService"
    address="http://localhost:8080/sample-ws-cxf/SampleWebService";>
    <jaxws:properties>
        <entry key="javax.xml.ws.client.connectionTimeout" value="10" />
        <entry key="javax.xml.ws.client.receiveTimeout" value="11000" />
        <entry key="org.apache.cxf.transport.http.async.usePolicy" 
value="ALWAYS" />
        <entry key="org.apache.cxf.transport.http.async.ioThreadCount" 
value="2" /> 
    </jaxws:properties>
</jaxws:client>
{quote}

code:
{quote}{noformat}
client.getDataFromWebService_Async("" + id.getAndIncrement(), new 
AsyncHandler<Person>() {
    @Override
    public void handleResponse(Response<Person> resp) {
        Person person;
        try {
            person = resp.get();
            log.info(person.getName() + " | " + person.getAge() + " | " +
                person.getDescription());
            Assert.assertNotNull(person);
            Assert.assertNotNull(person.getName());
        } catch (InterruptedException | ExecutionException e) {
            log.error("EXCEPTION WHILE PROCESSING RESPONSE CALLBACK");
        e.printStackTrace();
        }
    }
});
{noformat}{quote}

If I log out the conduit, it tells that it is: 
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit ( 
log.info(ClientProxy.getClient(client).getConduit().getClass().getName()); )

I'm using cxf 3.0.1, and httpasyncclient version 4.0.1 with spring 3.2.2.RELEASE

  was:
It is not clear which are the use cases when one can use asynchronous client 
calls. The possible use cases would be:
- server-side implemented callback transport
- server-side implemented polling transport
- client-side only callback using non-blocking IO

However http.asyncclient supports all of them, I see no sign of CXF supporting 
the last one. Is there a way of calling a server this way?

Using the configuration below I tried to call a WS this way, but CXF is always 
looking for async binding on the server side (javax.xml.ws.WebServiceException: 
Could not find wsdl:binding operation info for web method 
getDataFromWebService_Async). 

Client configuration:
{quote}
<jaxws:client id="client"
    serviceClass="my.sample.SampleWebService"
    address="http://localhost:8080/sample-ws-cxf/SampleWebService";>
    <jaxws:properties>
        <entry key="javax.xml.ws.client.connectionTimeout" value="10" />
        <entry key="javax.xml.ws.client.receiveTimeout" value="11000" />
        <entry key="org.apache.cxf.transport.http.async.usePolicy" 
value="ALWAYS" />
        <entry key="org.apache.cxf.transport.http.async.ioThreadCount" 
value="2" /> 
    </jaxws:properties>
</jaxws:client>
{quote}

code:
{quote}{noformat}
client.getDataFromWebService_Async("" + id.getAndIncrement(), new 
AsyncHandler<Person>() {
    @Override
    public void handleResponse(Response<Person> resp) {
        Person person;
        try {
            person = resp.get();
            log.info(person.getName() + " | " + person.getAge() + " | " +
                person.getDescription());
            Assert.assertNotNull(person);
            Assert.assertNotNull(person.getName());
        } catch (InterruptedException | ExecutionException e) {
            log.error("EXCEPTION WHILE PROCESSING RESPONSE CALLBACK");
        e.printStackTrace();
        }
    }
});
{noformat}{quote}

If I log out the conduit, it tells that it is: 
org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit 
(log.info(ClientProxy.getClient(client).getConduit().getClass().getName());)

I'm using cxf 3.0.1, and httpasyncclient version 4.0.1 with spring 3.2.2.RELEASE


> Non-blocking WS call with CXF
> -----------------------------
>
>                 Key: CXF-5942
>                 URL: https://issues.apache.org/jira/browse/CXF-5942
>             Project: CXF
>          Issue Type: Wish
>          Components: Transports
>    Affects Versions: 3.0.0-milestone1
>            Reporter: Bence Takács
>            Priority: Minor
>              Labels: non-blocking
>
> It is not clear which are the use cases when one can use asynchronous client 
> calls. The possible use cases would be:
> - server-side implemented callback transport
> - server-side implemented polling transport
> - client-side only callback using non-blocking IO
> However http.asyncclient supports all of them, I see no sign of CXF 
> supporting the last one. Is there a way of calling a server this way?
> Using the configuration below I tried to call a WS this way, but CXF is 
> always looking for async binding on the server side 
> (javax.xml.ws.WebServiceException: Could not find wsdl:binding operation info 
> for web method getDataFromWebService_Async). 
> Client configuration:
> {quote}
> <jaxws:client id="client"
>     serviceClass="my.sample.SampleWebService"
>     address="http://localhost:8080/sample-ws-cxf/SampleWebService";>
>     <jaxws:properties>
>         <entry key="javax.xml.ws.client.connectionTimeout" value="10" />
>         <entry key="javax.xml.ws.client.receiveTimeout" value="11000" />
>         <entry key="org.apache.cxf.transport.http.async.usePolicy" 
> value="ALWAYS" />
>         <entry key="org.apache.cxf.transport.http.async.ioThreadCount" 
> value="2" /> 
>     </jaxws:properties>
> </jaxws:client>
> {quote}
> code:
> {quote}{noformat}
> client.getDataFromWebService_Async("" + id.getAndIncrement(), new 
> AsyncHandler<Person>() {
>     @Override
>     public void handleResponse(Response<Person> resp) {
>         Person person;
>         try {
>             person = resp.get();
>             log.info(person.getName() + " | " + person.getAge() + " | " +
>                 person.getDescription());
>             Assert.assertNotNull(person);
>             Assert.assertNotNull(person.getName());
>         } catch (InterruptedException | ExecutionException e) {
>             log.error("EXCEPTION WHILE PROCESSING RESPONSE CALLBACK");
>         e.printStackTrace();
>         }
>     }
> });
> {noformat}{quote}
> If I log out the conduit, it tells that it is: 
> org.apache.cxf.transport.http.asyncclient.AsyncHTTPConduit ( 
> log.info(ClientProxy.getClient(client).getConduit().getClass().getName()); )
> I'm using cxf 3.0.1, and httpasyncclient version 4.0.1 with spring 
> 3.2.2.RELEASE



--
This message was sent by Atlassian JIRA
(v6.2#6252)

Reply via email to