Java-Forum.org  

Zurück   Java-Forum.org > Enterprise Java > SOA

SOA: wie ArrayList an Webservice geben?

Webservices, JAX-WS, BPEL

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 15.02.2012, 19:16   #1
Lenzen
 
wie ArrayList an Webservice geben? - Standard wie ArrayList an Webservice geben?

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

Java Code: Quelltext in neuem Fenster öffnen
  1. import java.util.ArrayList;
  2.  
  3. import javax.jws.WebMethod;
  4. import javax.jws.WebService;
  5. import javax.jws.soap.SOAPBinding;
  6. /**
  7.  * Web Service End-point implementation class
  8.  */
  9.    
  10. @WebService(name = "TEST_name", serviceName = "TEST_serviceName")
  11.  
  12. public class Hello {
  13.    // Constructor
  14.    public void Hello() {}
  15.    
  16.    @WebMethod
  17.    public String sayHello(String name) {
  18.       return "Hello, " + name + ".";
  19.    }
  20.    
  21.    @WebMethod
  22.    public int addNumbers(int number1, int number2) {
  23.       return number1 + number2;
  24.    }
  25.    
  26.    @WebMethod
  27.    public double divideNumbers(int dividend, int divisor)
  28.          throws Exception {
  29.       if (divisor == 0) {
  30.          throw new Exception("Divisor cannot be zero!");
  31.       }
  32.       return (double)dividend/divisor;
  33.    }
  34.    
  35.    @WebMethod
  36.     public ArrayList<Object> testArrayList() {
  37.         ArrayList<Object> results = new ArrayList<Object>();
  38.         int title = 1;
  39.         String description = "Description";
  40.         double d = 44.66;      
  41.         long l = 66;
  42.         String st = "Stringtest";
  43.         results.add(title);
  44.         results.add(description);
  45.         results.add(d);
  46.         results.add(l);
  47.         results.add(st);
  48.         return results;
  49.     }
  50. }

Request:
XML Code: Quelltext in neuem Fenster öffnen
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://Webservice2/">
  2.    <soapenv:Header/>
  3.    <soapenv:Body>
  4.       <web:testArrayList/>
  5.    </soapenv:Body>
  6. </soapenv:Envelope>

Response
XML Code: Quelltext in neuem Fenster öffnen
  1. <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  2.    <S:Body>
  3.       <ns2:testArrayListResponse xmlns:ns2="http://Webservice2/">
  4.          <return/>
  5.       </ns2:testArrayListResponse>
  6.    </S:Body>
  7. </S:Envelope>

Nun habe ich folgende Zeile auskommentiert:
Java Code: Quelltext in neuem Fenster öffnen

Als Response bekomme ich (fast das was ich will):
XML Code: Quelltext in neuem Fenster öffnen
  1. <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  2.    <S:Body>
  3.       <ns2:testArrayListResponse xmlns:ns2="http://Webservice2/">
  4.          <return xsi:type="xs:int" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">1</return>
  5.          <return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">Description</return>
  6.          <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>
  7.          <return xsi:type="xs:long" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">66</return>
  8.          <return xsi:type="xs:string" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:xs="http://www.w3.org/2001/XMLSchema">Stringtest</return>
  9.       </ns2:testArrayListResponse>
  10.    </S:Body>
  11. </S:Envelope>

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?
 

 
Anzeige
 

AW: wie ArrayList an Webservice geben?



 
Alt 21.02.2012, 14:42   #2
Lenzen
Themenstarter
 
wie ArrayList an Webservice geben? - Standard AW: wie ArrayList an Webservice geben?

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 Code: Quelltext in neuem Fenster öffnen
  1. package test;
  2.  
  3. import java.util.ArrayList;
  4. import java.util.Collection;
  5.  
  6. import javax.jws.WebMethod;
  7. import javax.jws.WebResult;
  8. import javax.jws.WebService;
  9. import javax.jws.soap.SOAPBinding;
  10. /**
  11.  * Web Service End-point implementation class
  12.  */
  13.    
  14. @WebService(name = "TEST_name", serviceName = "TEST_serviceName")
  15. //@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)
  16.  
  17. public class Hello {
  18.    // Constructor
  19.    public void Hello() {}
  20.    
  21.    @WebMethod
  22.    public String sayHello(String name) {
  23.       return "Hello, " + name + ".";
  24.    }
  25.    
  26.    @WebMethod
  27.    public int addNumbers(int number1, int number2) {
  28.       return number1 + number2;
  29.    }
  30.    
  31.    @WebMethod
  32.    public double divideNumbers(int dividend, int divisor)
  33.          throws Exception {
  34.       if (divisor == 0) {
  35.          throw new Exception("Divisor cannot be zero!");
  36.       }
  37.       return (double)dividend/divisor;
  38.    }
  39.    
  40.    @WebMethod
  41.    public ArrayList<Param> testArrayList(ArrayList<Param> results) {    
  42.        /**     
  43.        Param p = new Param();      
  44.        int title = 222;
  45.        String description = "Description2";
  46.        double d = 22.22;      
  47.        long l = 222222;
  48.        String st = "Stringtest2";
  49.        
  50.        p.setTitle(title);
  51.        p.setDescription(description);
  52.        p.setD(d);
  53.        p.setL(l);
  54.        p.setSt(st);
  55.        
  56.        results.add(p);
  57.        **/
  58.        
  59.        return results;
  60.    }
  61.    
  62.     @WebResult(name = "parameter")
  63.     public Collection<Param> getCollection(Collection<Param> param) {  
  64.            /** 
  65.            Param p = new Param();      
  66.            int title = 222;
  67.            String description = "Description2";
  68.            double d = 22.22;      
  69.            long l = 222222;
  70.            String st = "Stringtest2";
  71.            
  72.            p.setTitle(title);
  73.            p.setDescription(description);
  74.            p.setD(d);
  75.            p.setL(l);
  76.            p.setSt(st);
  77.            
  78.            param.add(p);
  79.            **/
  80.         return param;
  81.     }  
  82. }

Jetzt die dazugehörige Bean:
Java Code: Quelltext in neuem Fenster öffnen
  1. package test;
  2.  
  3. import javax.jws.WebService;
  4.  
  5. public class Param{
  6.    
  7.     int title;
  8.     String description;
  9.     double d;      
  10.     long l;
  11.     String st;
  12.  
  13.     public Param() {
  14.         // empty constructor
  15.     }
  16.  
  17.     public Param(int title, String description, double d, long l, String st) {
  18.         this.title = title;
  19.         this.description = description;
  20.         this.d = d;
  21.         this.l = l;
  22.         this.st = st;
  23.     }
  24.  
  25.     public int getTitle(){return title;}
  26.     public void setTitle(int title){this.title = title;}
  27.    
  28.     public String getDescription(){return description;}
  29.     public void setDescription(String description){this.description = description;}
  30.  
  31.     public double getD(){return d;}
  32.     public void setD(double d){this.d = d;}
  33.  
  34.     public long getL(){return l;}
  35.     public void setL(long l){this.l = l;}
  36.  
  37.     public String getSt(){return st;}
  38.     public void setSt(String st){this.st = st;}
  39. }

... und die Startklasse:
Java Code: Quelltext in neuem Fenster öffnen
  1. package test;
  2.  
  3. import javax.xml.ws.Endpoint;
  4.  
  5.  
  6. public class Server {
  7.  
  8.     public static void main (String args[]) {
  9.         Hello server = new Hello();    
  10.         Endpoint.publish("http://localhost:8080/Server", server);
  11.     }
  12. }

und der Request:
XML Code: Quelltext in neuem Fenster öffnen
  1. <soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:test="http://test/">
  2.    <soapenv:Header/>
  3.    <soapenv:Body>
  4.       <test:testArrayList>
  5.          <arg0>
  6.             <d>12</d>          
  7.             <description>Description</description>
  8.             <l>66</l>          
  9.             <st>Stringtest</st>
  10.             <title>1</title>
  11.          </arg0>
  12.       </test:testArrayList>
  13.    </soapenv:Body>
  14. </soapenv:Envelope>

und die Response:
XML Code: Quelltext in neuem Fenster öffnen
  1. <S:Envelope xmlns:S="http://schemas.xmlsoap.org/soap/envelope/">
  2.    <S:Body>
  3.       <ns2:testArrayListResponse xmlns:ns2="http://test/">
  4.          <return>
  5.             <d>12.0</d>
  6.             <description>Description</description>
  7.             <l>66</l>
  8.             <st>Stringtest</st>
  9.             <title>1</title>
  10.          </return>
  11.       </ns2:testArrayListResponse>
  12.    </S:Body>
  13. </S:Envelope>
 
Alt 23.02.2012, 15:29   #3
waldek87
 
wie ArrayList an Webservice geben? - Standard AW: wie ArrayList an Webservice geben?

Probier es mal mit dem List anstatt ArrayList als Rückgabetyp
 
Alt 04.04.2012, 21:28   #4
Frank04
 
wie ArrayList an Webservice geben? - Standard AW: wie ArrayList an Webservice geben?

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 Code: Quelltext in neuem Fenster öffnen
  1. @SchemaValidation()

Auf einer Tomcat7 und einer Websphere 6.1 Implementierung funktioniert die Listenübergabe.
 
Antwort    

Zurück   Java-Forum.org > Enterprise Java > SOA

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen: wie ArrayList an Webservice geben?

ArrayList via WebService übertragen
ArrayList via WebService übertragen: Hallo zusammen, für eine Anwendung wollen wir auf eine Datenbank zugreifen. Der Zugriff auf die Datenbank soll als Webservice via RPC zur Verfügung stehen. Unsere Idee war die Ergebnisse aus...
Webservice definieren und andere Webservice aufrufen
Webservice definieren und andere Webservice aufrufen: Hi Leute, ich arbeite mich gerade in die Webservice Thematik aus Java heraus ein und habe anhand eines Tutorials einen Webservice geschrieben der addieren kann. Gibt es eine Möglichkeit die...
Webservice, ArrayList übergeben
Webservice, ArrayList übergeben: Hi, ich teste gerade die Programmierung von Webservices unter Java 1.6. Die übergabe von irgendwelchen Objekten eigener Klassen klappt wunderbar. Leider bekomme ich aber, wenn ich...
Von WebService auf anderen WebService zugreifen?
Von WebService auf anderen WebService zugreifen?: Hi, ich habe ein Problem: Und zwar habe ich einen WebService, welcher für seinen Dienst auf 2 andere WebServices zugreifen muss. Ich benutze Axis2 in Tomcat. Prinzipiell ja nicht so schwer...




Sie betrachten gerade wie ArrayList an Webservice geben?