wie ArrayList an Webservice geben?

Lenzen

Aktives Mitglied
Ich versuch schon eine Ewigkeit eine ArrayList mit einem Webservice aufzurufen.
Mein Versuch:

Java:
import java.util.ArrayList;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
 * Web Service End-point implementation class
 */
   
@WebService(name = "TEST_name", serviceName = "TEST_serviceName")
@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)

public class Hello {
   // Constructor
   public void Hello() {}
   
   @WebMethod
   public String sayHello(String name) {
      return "Hello, " + name + ".";
   }
   
   @WebMethod
   public int addNumbers(int number1, int number2) {
      return number1 + number2;
   }
   
   @WebMethod
   public double divideNumbers(int dividend, int divisor)
         throws Exception {
      if (divisor == 0) {
         throw new Exception("Divisor cannot be zero!");
      }
      return (double)dividend/divisor;
   }
   
   @WebMethod
	public ArrayList<Object> testArrayList() {
		ArrayList<Object> results = new ArrayList<Object>();
		int title = 1;
		String description = "Description";
		double d = 44.66;		
		long l = 66;
		String st = "Stringtest";
		results.add(title);
		results.add(description);
		results.add(d);
		results.add(l);
		results.add(st);
		return results;	
	}
}

Request:
[XML]
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://Webservice2/">
<soapenv:Header/>
<soapenv:Body>
<web:testArrayList/>
</soapenv:Body>
</soapenv:Envelope>
[/XML]

Response
[XML]
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:testArrayListResponse xmlns:ns2="http://Webservice2/">
<return/>
</ns2:testArrayListResponse>
</S:Body>
</S:Envelope>
[/XML]

Nun habe ich folgende Zeile auskommentiert:
Java:
@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)

Als Response bekomme ich (fast das was ich will):
[XML]
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:testArrayListResponse xmlns:ns2="http://Webservice2/">
<return xsi:type="xs:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">1</return>
<return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">Description</return>
<return xsi:type="xs:double" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">44.66</return>
<return xsi:type="xs:long" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">66</return>
<return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">Stringtest</return>
</ns2:testArrayListResponse>
</S:Body>
</S:Envelope>
[/XML]

und einen Validerungsfehler:
Invalid xsi:type qname: 'xs:int'
Invalid xsi:type qname: 'xs:string'
Invalid xsi:type qname: 'xs:double'
Invalid xsi:type qname: 'xs:long'
Invalid xsi:type qname: 'xs:string'


Was mache ich falsch?
 

Lenzen

Aktives Mitglied
Mittlerweile denke ich, dass man komplexe Datentypen nicht an einen Webservice geben kann. Über eine Bean klappt das. Vielleicht hat ja noch jemand eine Idee?

Meine komplette Lösung bisher:
Java:
package test;

import java.util.ArrayList;
import java.util.Collection;

import javax.jws.WebMethod;
import javax.jws.WebResult;
import javax.jws.WebService;
import javax.jws.soap.SOAPBinding;
/**
 * Web Service End-point implementation class
 */
   
@WebService(name = "TEST_name", serviceName = "TEST_serviceName")
//@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)
 
public class Hello {
   // Constructor
   public void Hello() {}
   
   @WebMethod
   public String sayHello(String name) {
      return "Hello, " + name + ".";
   }
   
   @WebMethod
   public int addNumbers(int number1, int number2) {
      return number1 + number2;
   }
   
   @WebMethod
   public double divideNumbers(int dividend, int divisor)
         throws Exception {
      if (divisor == 0) {
         throw new Exception("Divisor cannot be zero!");
      }
      return (double)dividend/divisor;
   }
   
   @WebMethod
   public ArrayList<Param> testArrayList(ArrayList<Param> results) {     
	   /**	   
	   Param p = new Param();	   
       int title = 222;
       String description = "Description2";
       double d = 22.22;       
       long l = 222222;
       String st = "Stringtest2";
       
       p.setTitle(title);
       p.setDescription(description);
       p.setD(d);
       p.setL(l);
       p.setSt(st);
       
       results.add(p);
       **/
	   
       return results; 
   }
   
	@WebResult(name = "parameter")
	public Collection<Param> getCollection(Collection<Param> param) {	
		   /**	
		   Param p = new Param();	   
	       int title = 222;
	       String description = "Description2";
	       double d = 22.22;       
	       long l = 222222;
	       String st = "Stringtest2";
	       
	       p.setTitle(title);
	       p.setDescription(description);
	       p.setD(d);
	       p.setL(l);
	       p.setSt(st);
	       
	       param.add(p);
	       **/
		return param;
	}	
}

Jetzt die dazugehörige Bean:
Java:
package test;

import javax.jws.WebService;

@WebService
public class Param{
	
    int title;
    String description;
    double d;       
    long l;
    String st;

	public Param() {
		// empty constructor
	}

	public Param(int title, String description, double d, long l, String st) {
		this.title = title;
		this.description = description;
		this.d = d;
		this.l = l;
		this.st = st;
	}

	public int getTitle(){return title;}
	public void setTitle(int title){this.title = title;}
	
	public String getDescription(){return description;}
	public void setDescription(String description){this.description = description;}

	public double getD(){return d;}
	public void setD(double d){this.d = d;}

	public long getL(){return l;}
	public void setL(long l){this.l = l;}

	public String getSt(){return st;}
	public void setSt(String st){this.st = st;}
}

... und die Startklasse:
Java:
package test;

import javax.xml.ws.Endpoint;


public class Server {

	public static void main (String args[]) {
		Hello server = new Hello();		
		Endpoint.publish("http://localhost:8080/Server", server);
	}
}

und der Request:
[XML]
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test/">
<soapenv:Header/>
<soapenv:Body>
<test:testArrayList>
<arg0>
<d>12</d>
<description>Description</description>
<l>66</l>
<st>Stringtest</st>
<title>1</title>
</arg0>
</test:testArrayList>
</soapenv:Body>
</soapenv:Envelope>
[/XML]

und die Response:
[XML]
<S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
<S:Body>
<ns2:testArrayListResponse xmlns:ns2="http://test/">
<return>
<d>12.0</d>
<description>Description</description>
<l>66</l>
<st>Stringtest</st>
<title>1</title>
</return>
</ns2:testArrayListResponse>
</S:Body>
</S:Envelope>
[/XML]
 

Frank04

Mitglied
Eine ArrayList wird bei der Übertragung automatisch zur List. Der Client muss auch die erhaltenen Daten in eine List speichern.

Hast Du die Validation der Nachrichten an?

Java:
@WebService  
@SchemaValidation()

Auf einer Tomcat7 und einer Websphere 6.1 Implementierung funktioniert die Listenübergabe.
 
Zuletzt bearbeitet:
Ähnliche Java Themen
  Titel Forum Antworten Datum
N WebService Ausgabe einer ArrayList SOA 2
T Error beim Versuch, einen Webservice zu kontaktieren SOA 4
J SOA WebService JAX-WS Java-Klasse per wsimport generieren lassen SOA 3
K Webservice: 4 counts of IllegalAnnotationExceptions SOA 0
D Zertifikat Authentifizierung am Webservice SOA 0
P JBOSS 7 und Restful Webservice SOA 1
N Web Services Client aus externen WebService erstellen SOA 4
I SOAP Webservice Methoden und Parameter auslesen SOA 3
F [WebService] Array von eigenen Objekten SOA 0
P SOAP Webservice mit HTTP Basic Authentifizierung SOA 1
M JAVA Webservice Währungsrechner DRINGEND Hilfe SOA 1
A Up-/ Download von Dateien zu WebService SOA 6
D WebService Technik - Aufwand Änderung des Application Server SOA 3
R Webservice Timeout Konfiguration SOA 3
D SOAP Webservice (SAP) SOA 3
MQue WebService Versionierung SOA 9
L [AXIS2] OutOfMemory Exception bei Übertragung von größerer Datei via Webservice SOA 3
A Funktion mit Map als WebService SOA 4
T Webservice serviceName im Handler ermitteln SOA 3
N Webservice Einbinden wsdl SOA 7
M Edit und Remove über Webservice SOA 3
F Client Problem gegen Webservice SOA 3
P Java Webservice mit JWS Bindingnamen customizen SOA 4
B Webservice Config / SoapStub: Best Practice SOA 3
S Objektübertragung Fehler über Webservice SOA 10
E Webservice durch Java ansprechen SOA 7
L Webservice HTTPS Netbeans SOA 2
G NullPointerException bei Parameterübergabe an Webservice mittels kSoap2 SOA 2
M Webservice per URL ansprechen SOA 14
M Webservice Client erstellen und XML Request senden SOA 3
T Verwendung von Eclipse Projekten im Axis2 Webservice SOA 8
S Webservice als "CronJob" SOA 4
M Webservice (JaxWS) extern verfügbar machen SOA 5
M Welches WebService Framework ist denn das beste FRAMEWORK? SOA 5
D Webservice fürs Internet sichtbar machen SOA 2
W WebService aus einer HTML-Seite SOA 9
T WebService innerhalb von Seam-Projekt, komplexe Datentypen SOA 6
N JAX-WS WebService und Tomcat 7 SOA 11
E Trennung von Daten und WebService und Wiederverwendung der Daten SOA 2
D Sicherheit bei REST-Webservice SOA 19
G WebService, was darf der Client alles sehen SOA 19
M Nutzen des Webservice AWSECommerceService SOA 1
S AXIS2 Webservice: Umgang mit komplexen Datentypen SOA 5
G Webservice Contract first SOA 8
G WebService -> ServletFilter SOA 2
G WebService Concurrency SOA 19
M Fehler beim Veröffentlichen eines Webservice SOA 6
G WebService Types SOA 7
G OpenLigaDB Webservice Client SOA 4
G WebService WSDL SOA 3
A PHP WebService aus Java aufrufen SOA 2
R Proxy WebService erstellen SOA 3
G JPA/ Webservice: Passwort Feld einer Klasse fürs Lesen "verschleiern" SOA 10
G WebService mit wsdl erstellen SOA 4
P WebService SOA 6
H Webservice: BindingProvider SOA 6
D WebService DB abfrage SOA 4
mabe83 EJB Klassen für Webservice nutzen SOA 2
S Webservice-Client-Klasse gibt immer null zurück SOA 3
G WebService mit komplexen Objekten SOA 5
C Problem mit Java Webservice - SOAPBinding.Style - Wrapper class fehlt SOA 1
T Rest Webservice der 2 verschiedene XML Objekte(JaxB) entgegennimmt SOA 10
S Webservice, Vererbung und Netbeans SOA 3
E Lesen der kompletten SOAP als WebService Provider/Server SOA 4
T WebService Authentifizierung SOA 11
mabe83 Suche Hilfe zum Thema Webservice + EJB SOA 3
T WebService erstellen SOA 28
T Krankes Vorhaben: Von VB auf Java Webservice SOA 10
M Webservice RuntimeModelerException? SOA 5
G Webservice mit Java aufrufen SOA 2
G WebService: mehrere methoden mit demselben Namen SOA 4
T einfacher Webservice SOA 3
G Webservice im JBoss: runtime modeler error SOA 3
V webservice von aussen (webbrowser) ansprechen SOA 2
V Webservice, allgemeine Fragen SOA 9
G Alfresco - WebDav oder WebService SOA 2
0 Webservice nutzen (rpc/enc style) SOA 2
R XML verschicken mit Webservice Server Client SOA 2
R Webservice aufrufen mit SOAP Style.DOCUMENT ? SOA 5
G Webservice zugreifen SOA 6
G Deploy Apache CXF WebService mit Eclipse SOA 2
G Webservice mit JSON SOA 8
T Webservice über Tomcat loggen SOA 5
thE_29 WebService - JAXBElement - richtige Klasse? SOA 2
L Probleme mit komplexen Datentypen in einen Webservice SOA 2
O brauche hilfe bei java/webservice geschichte SOA 29
M Webservice/ Axis/ Bea Weblogic Server 8.1 SOA 12
E Webservice konfigurieren SOA 2
Y Webservice erstellen SOA 4
F Tutorial zu WebService mit JBoss, Eclipse und Jax-ws? SOA 3
C Webservice im Unternehmen SOA 4
L webservice frage (eclipse/wtp, wsdl) SOA 12
U Webservice mit Axis, Hello World Beispiel SOA 2
J Frage zu Webservice SOA 3
L WebService TestClient Problem SOA 2

Ähnliche Java Themen

Neue Themen


Oben