cxf-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Daniel Kulp (JIRA)" <j...@apache.org>
Subject [jira] Updated: (CXF-2978) CLONE -Return Type List gets null on client if an empty list is returned
Date Tue, 07 Sep 2010 19:38:36 GMT

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

Daniel Kulp updated CXF-2978:
-----------------------------

    Attachment: EmptyListExample-2.2.10.tar.gz


I've attached an updated version that sets the cxf version to 2.2.10 and provides a "run"
profile to run the sample via  "mvn -Prun".    The output is exactly as expected.   See:

http://cxf.547215.n5.nabble.com/CXF-2627-still-failign-in-2-2-9-td1247184.html#a1247184

The first case should return null as per spec.

I fixed the second case in the above sample. (without the fix, a WARNING would be printed
and null is returned)

The third case returns size 0 list.

> 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
>         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.


Mime
View raw message