# Apache CXF, JAX-WS Problem bei Arrays - einfacher Server



## downandout (27. Okt 2011)

Wie überträgt man vom Server in die Klasse Client die Arrays bzw. Listen?

Wenn ich im Server dann das Array, das übertragen werden müsste, abfrage kommen immer Exceptions.
int lässt sich aber übertragen...

Bei:
System.out.println("Products: " + client.getCustomerProducts(0)[0]);
(Klasse Client - einzelner Datensatz dient nur zum Test)
Passiert:
Exception in thread "main" javax.xml.ws.soap.SOAPFaultException: Fault occurred while processing.
at org.apache.cxf.jaxws.JaxWsClientProxy.invoke(JaxWsClientProxy.java:146)
at $Proxy32.getcustomers(Unknown Source)
at demo.hw.server.Client.main(Client.java:21)
Caused by: org.apache.cxf.binding.soap.SoapFault: Fault occurred while processing.
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.unmarshalFault(Soap11FaultInInterceptor.java:75)
at org.apache.cxf.binding.soap.interceptor.Soap11FaultInInterceptor.handleMessage(Soap11FaultInInterceptor.java:46)
usw.




Server

```
package demo.hw.server;

import javax.jws.WebService;
import javax.xml.ws.Endpoint;

import at.ac.univie.swa.ist.customers.CustomerClient;


@WebService(endpointInterface = "demo.hw.server.InterfaceS",
            serviceName = "InterfaceS")
public class Server implements InterfaceS {

    CustomerClient neu = new CustomerClient();


    public int[] getcustomers(){
    	
     //getCustomers liefert eine Liste von Customers, von denen dann einzelne Attribute ausgegeben werden
     int[] ids=null;
    	 for(int i = 0; i<neu.getCustomers().getCostumer().size();i++)
        	  ids[i]=(neu.getCustomers().getCostumer().get(i).getId());
    return ids;
    }
    
    public String[] getCustomerProducts(int customerid){
    	String[] orders = null;

    	for(int y = 0; y < neu.getCustomers().getCostumer().get(customerid).getOrder().size();y++)
    		orders[y]=(neu.getCustomers().getCostumer().get(customerid).getOrder().get(y).getProduct());
    	
    	return orders;
    	
    }
    public int getCustomerNumOfOrders(int customerid){
    	int zaehler=0;
    	for(int y = 0; y < neu.getCustomers().getCostumer().get(customerid).getOrder().size();y++)
    		zaehler++;
    	return zaehler;
    }

    public static void main(String args[]){
    	System.out.println("Starting Server");
    	Server implementor = new Server();
    	String address = "http://localhost:9000/Server";
    	Endpoint.publish(address, implementor);
    }

}
```


```
package demo.hw.server;

import org.apache.cxf.interceptor.LoggingInInterceptor;
import org.apache.cxf.interceptor.LoggingOutInterceptor;
import org.apache.cxf.jaxws.JaxWsProxyFactoryBean;

public class Client {

	
	
	public static void main(String args[]){
		
		JaxWsProxyFactoryBean factory = new JaxWsProxyFactoryBean();
		factory.getInInterceptors().add(new LoggingInInterceptor());
		factory.getOutInterceptors().add(new LoggingOutInterceptor());
		factory.setServiceClass(InterfaceS.class);
		factory.setAddress("http://localhost:9000/Server");
		InterfaceS client = (InterfaceS) factory.create();
		
		System.out.println("Number of Orders: " + client.getCustomerNumOfOrders(0));
		
               // ----Fehler-------
		-->//System.out.println("Number of Orders: " + client.getCustomerProducts(0)[0]);
		
		
		
		
		System.exit(0); 
		
	}
	
	
}
```

Interface

```
package demo.hw.server;

import javax.jws.WebService;


@WebService
public interface InterfaceS {

    int getCustomerNumOfOrders(int customerid);
    String[] getCustomerProducts(int customerid);
    int[] getcustomers();


}
```

Her wer eine Ahnung warum, ich mit dem Client keine Arrays übertragen kann?


----------



## musiKk (27. Okt 2011)

Du initialisierst Deine Array-Variablen mit [c]null[/c] und versuchst dann, Elemente zu belegen. Das geht nicht.


```
String[] orders = new String[gewünschteLängeDesArrays];
```


----------



## downandout (27. Okt 2011)

woow danke!!

ahh endlich den blöden Fehle gefunden!

Danke fürs durchschauen ))


----------

