[ https://issues.apache.org/jira/browse/CXF-2978?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Daniel Kulp resolved CXF-2978. ------------------------------ Fix Version/s: Invalid Resolution: Not A Problem Working per spec. > 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, 2.2.7, 2.2.9, 2.2.10 > Environment: JSE 1.5 on Win XP > Reporter: Staffan Forsell > Assignee: Daniel Kulp > Priority: Critical > Fix For: Invalid > > Attachments: EmptyListExample-2.2.10.tar.gz > > > 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.