CLONE -Return Type List gets null on client if an empty list is returned ------------------------------------------------------------------------
Key: CXF-2978 URL: https://issues.apache.org/jira/browse/CXF-2978 Project: CXF Issue Type: Bug Components: JAXB Databinding Affects Versions: 2.1.8 Environment: JSE 1.5 on Win XP Reporter: Staffan Assignee: Daniel Kulp Priority: Critical Fix For: 2.2.7 If you have a function that returns an empty list the result will be null on client. Even If add a Responsewrapper to the interface it doesn't work. If have attached a little test project / program: Interface: @WebService(targetNamespace = "http://cxf.apache.org/demo/CustomerService/1/", name = "CustomerService") @SOAPBinding(style = SOAPBinding.Style.DOCUMENT, use = SOAPBinding.Use.LITERAL) public interface CustomerService { @WebMethod(action = "findCustomer", operationName = "findCustomer") public @WebResult(name = "customerList") List<Customer> findCustomer(); @WebMethod(action = "findCustomer2", operationName = "findCustomer2") @ResponseWrapper(className="demo.service.CustomerListResponse") public @WebResult(name = "customerList") List<Customer> findCustomer2(); } The Implementation: @WebService(name = "CustomerService", serviceName = "CustomerService", targetNamespace = "http://cxf.apache.org/demo/CustomerService/1/", endpointInterface = "demo.service.CustomerService") public class CustomerServiceImpl implements CustomerService { public List<Customer> findCustomer() { // very stupid method return new ArrayList<Customer>(); } public List<Customer> findCustomer2() { // another very stupid method return new ArrayList<Customer>(); } } And this is the main programm: public static void main(String args[]) throws Exception { new Server(); System.out.println("Server ready..."); // Now Call the Service JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean(); factory.getInInterceptors().add(new LoggingInInterceptor()); factory.getOutInterceptors().add(new LoggingOutInterceptor()); factory.setServiceClass(CustomerService.class); factory.setAddress("http://localhost:9000/CustomerService"); CustomerService client = (CustomerService) factory.create(); System.out.println("call findCustomer()"); List<Customer> result = client.findCustomer(); if (result != null) System.out.println("Listsize: " + result.size()); else System.out.println("List is null: " + result); System.out.println("call findCustomer2()"); result = client.findCustomer2(); if (result != null) System.out.println("Listsize: " + result.size()); else System.out.println("List is null: " + result); System.out.println("Server exiting"); System.exit(0); } This will print the following output: Server ready... call findCustomer() 20.01.2010 07:49:45 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose INFO: Outbound Message --------------------------- ID: 1 Address: http://localhost:9000/CustomerService Encoding: UTF-8 Content-Type: text/xml Headers: {SOAPAction=["findCustomer"], Accept=[*/*]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:findCustomer xmlns:ns2="http://cxf.apache.org/demo/CustomerService/1/"/></soap:Body></soap:Envelope> -------------------------------------- 20.01.2010 07:49:45 org.apache.cxf.interceptor.LoggingInInterceptor logging INFO: Inbound Message ---------------------------- ID: 1 Encoding: UTF-8 Content-Type: text/xml; charset=utf-8 Headers: {Content-Length=[194], Server=[Jetty(6.1.21)], content-type=[text/xml; charset=utf-8]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:findCustomerResponse xmlns:ns2="http://cxf.apache.org/demo/CustomerService/1/"/></soap:Body></soap:Envelope> -------------------------------------- List is null: null call findCustomer2() 20.01.2010 07:49:45 org.apache.cxf.interceptor.LoggingOutInterceptor$LoggingCallback onClose INFO: Outbound Message --------------------------- ID: 2 Address: http://localhost:9000/CustomerService Encoding: UTF-8 Content-Type: text/xml Headers: {SOAPAction=["findCustomer2"], Accept=[*/*]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:findCustomer2 xmlns:ns2="http://cxf.apache.org/demo/CustomerService/1/"/></soap:Body></soap:Envelope> -------------------------------------- 20.01.2010 07:49:45 org.apache.cxf.interceptor.LoggingInInterceptor logging INFO: Inbound Message ---------------------------- ID: 2 Encoding: UTF-8 Content-Type: text/xml; charset=utf-8 Headers: {Content-Length=[300], Server=[Jetty(6.1.21)], content-type=[text/xml; charset=utf-8]} Payload: <soap:Envelope xmlns:soap="http://schemas.xmlsoap.org/soap/envelope/"><soap:Body><ns2:findCustomer2Response xmlns:ns2="http://cxf.apache.org/demo/CustomerService/1/"><return xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:nil="true"/></ns2:findCustomer2Response></soap:Body></soap:Envelope> -------------------------------------- List is null: null Server exiting -- This message is automatically generated by JIRA. - You can reply to this email to add a comment to the issue online.