java-forum.org - Java programmieren aus Leidenschaft
Java 6 Einstieg und professioneller Einsatz
Alter Preis: 34,90 EUR
Jetzt: 0,00 EUR

zzgl. Versandkosten

Zurück   java-forum.org - Java programmieren aus Leidenschaft > Enterprise Java > SOA

SOA Webservices, JAX-WS, BPEL

Antwort    
Themen-Optionen Thema durchsuchen Ansicht
Alt 15.02.2012, 19:16   #1 (permalink)
Benutzer
int
 
Registriert seit: 26.11.2006
Fachbeiträge: 56
Abgegebene Danke: 2
Erhielt 0 Danke für 0 Beiträge
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:web="http://Webservice2/">
   <soapenv:Header/>
   <soapenv:Body>
      <web:testArrayList/>
   </soapenv:Body>
</soapenv:Envelope>

Response
XML Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
<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>

Nun habe ich folgende Zeile auskommentiert:
Java Code: Quelltext in neuem Fenster öffnen
1
@SOAPBinding(style=SOAPBinding.Style.RPC, use=SOAPBinding.Use.LITERAL)

Als Response bekomme ich (fast das was ich will):
XML Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
<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>

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 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 21.02.2012, 14:42   #2 (permalink)
Benutzer
int
Themenstarter
 
Registriert seit: 26.11.2006
Fachbeiträge: 56
Abgegebene Danke: 2
Erhielt 0 Danke für 0 Beiträge
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
6
7
8
9
10
11
12
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 Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<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>

und die Response:
XML Code: Quelltext in neuem Fenster öffnen
1
2
3
4
5
6
7
8
9
10
11
12
13
<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>
Lenzen ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 23.02.2012, 15:29   #3 (permalink)
Benutzer
int
 
Registriert seit: 13.03.2008
Fachbeiträge: 36
Abgegebene Danke: 2
Erhielt 2 Danke für 2 Beiträge
Probier es mal mit dem List anstatt ArrayList als Rückgabetyp
waldek87 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Alt 04.04.2012, 21:28   #4 (permalink)
Neuer Benutzer
Bit
 
Registriert seit: 02.04.2012
Fachbeiträge: 5
Abgegebene Danke: 0
Erhielt 0 Danke für 0 Beiträge
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
2
@WebService  
@SchemaValidation()

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

Geändert von Frank04 (04.04.2012 um 21:32 Uhr)
Frank04 ist offline  
Bei Google nach dem markiertem Wort suchen Bei Wikipedia nach dem markiertem Wort suchen Im Forum nach dem markiertem Wort suchen
Mit Zitat antworten
Antwort    

Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

Ähnliche Themen
Thema Autor Forum Antworten Letzter Beitrag
ArrayList nach Datenbankeintrag aktualisieren Ollek Java Basics - Anfänger-Themen 4 12.05.2011 14:18
ArrayList via WebService übertragen HFT Netzwerkprogrammierung 3 04.04.2011 13:01
Probleme mit ArrayList noobie Java Basics - Anfänger-Themen 9 28.03.2009 15:07
Webservice, ArrayList übergeben Capasso Netzwerkprogrammierung 3 21.05.2008 22:21
Java- ArrayList überschreibt Werte eigenständig! Hilfe Java Basics - Anfänger-Themen 4 18.10.2006 21:44


Lesezeichen

Forumregeln
Es ist Ihnen erlaubt, neue Themen zu verfassen.
Es ist Ihnen erlaubt, auf Beiträge zu antworten.
Es ist Ihnen nicht erlaubt, Anhänge hochzuladen.
Es ist Ihnen nicht erlaubt, Ihre Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are aus
Pingbacks are aus
Refbacks are aus


Alle Zeitangaben in WEZ +1. Es ist jetzt 17:43 Uhr.


Powered by vBulletin® Version 3.8.6 (Deutsch)
Copyright ©2000 - 2013, Jelsoft Enterprises Ltd.
Search Engine Friendly URLs by vBSEO 3.3.2
Thanks for Smilies by smilies.4-user.de