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

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

Als Response bekomme ich (fast das was ich will):
XML Code:
  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?
 
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:
  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:
  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:
  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:
  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:
  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:
  1. @SchemaValidation()

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

Zurück   Java-Forum.org > >

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...
Webservice definieren und andere Webservice aufrufen
Webservice definieren und andere Webservice aufrufen: Hi Leute, ich arbeite mich gerade in die...
Webservice, ArrayList übergeben
Webservice, ArrayList übergeben: Hi, ich teste gerade die Programmierung von...
Von WebService auf anderen WebService zugreifen?
Von WebService auf anderen WebService zugreifen?: Hi, ich habe ein Problem: Und zwar habe ich...


Sie betrachten gerade wie ArrayList an Webservice geben?


Powered by vBulletin® Version 3.8.7 (Deutsch)
Copyright ©2000 - 2014, vBulletin Solutions, Inc.