Toon posts:

[java] Webservices met JAX-WS

Pagina: 1
Acties:

Acties:
  • 0 Henk 'm!

Verwijderd

Topicstarter
Ik probeer attributen op te slaan van client A op de server, daarna wil ik deze uit kunnen lezen met client B.

Dit probeer ik doormiddel van set en get methodes zoals hieronder:

Server (web application):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
package Server;

import javax.jws.WebMethod;
import javax.jws.WebService;

@WebService
public class Person {
    
    static String name;
    
    @WebMethod
    public void setPerson(String name){
        this.name = name;
    }
    
    @WebMethod
    public String getPerson(){
        return name;
    }
}


Client A (java application):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
package Client;

import javax.xml.ws.WebServiceRef;
public class MyPerson {
@WebServiceRef(wsdlLocation = "http://localhost:8080/MatchServer/PersonService?wsdl")

    public static void main(String[] args) {
 
        try { 
           server.PersonService service = new server.PersonService();
           server.Person port = service.getPersonPort();
           port.setPerson("Bert");
        } catch (Exception ex) {
           // TODO handle custom exceptions here
        }
    }
}


Client B (java application):
Java:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
package Client;

import javax.xml.ws.WebServiceRef;
public class MyPerson {
@WebServiceRef(wsdlLocation = "http://localhost:8080/MatchServer/PersonService?wsdl")

    public static void main(String[] args) {
 
        try { 
           server.PersonService service = new server.PersonService();
           server.Person port = service.getPersonPort();
           java.lang.String result = port.getPerson();
           System.out.println("Result = "+result);
        } catch (Exception ex) {
           // TODO handle custom exceptions here
        }
    }
}


Dit werkt uiteraard niet... getPerson() en setPerson("") kunnen niet gevonden worden.

Ben ik totaal verkeerd bezig of zit ik nog een beetje in de goede richting?

Acties:
  • 0 Henk 'm!

  • kw4h
  • Registratie: Februari 2008
  • Laatst online: 22-09 09:00
Ik heb heel kort even zitten googlen, en in de java documentatie van WebMethod annotation (http://java.sun.com/javas.../javax/jws/WebMethod.html) staat het volgende:
The associated method must be public and its parameters return value, and exceptions must follow the rules defined in JAX-RPC 1.1, section 5.
De documentatie heb ik hier gevonden: https://cds.sun.com/is-bi...rel-oth-JSpec@CDS-CDS_JCP

Er staat onder andere in dat je klasse een 'public default constructor' moet hebben. Jouw klasse heeft dat niet. Misschien is dat het probleem?
Verder ben ik helemaal niet bekend met JAX-RPC dus ik zou echt niet weten wat er fout zou kunnen zijn.

Acties:
  • 0 Henk 'm!

  • Macros
  • Registratie: Februari 2000
  • Laatst online: 15-05 16:29

Macros

I'm watching...

Je kan het in de J2EE manual op de Sun site nalezen, maar ik zal het even kort uit mijn hoofd probereren op te sommen.
Je WebService annotation zorgt ervoor dat je J2EE Container, dus je Glassfish, of je JBoss er een webservice van maakt. In het geval van JBoss moet je vaak nog een nieuwere webservice implementatie in zetten, Glassfish is wat nieuwer, dus die zal het meteen goed doen. Anyway, je container of een tooltje maakt een wsdl document van je WebService, dit is een xml document die clients kunnen gebruiken om de webservice aan te roepen. In JBoss wordt hij automatisch gegenereerd en kan je de wsdl downloaden door naar localhost:8080/webservice?wdsl te gaan. De exacte url moet je zelf even opzoeken.
In eclipse heb je een webservice client (of in een plugin van Eclipse) waar je dat bestand in kan gooien en dan kan je de methodes ervan aanroepen. Met een toolje (wsclient) (zit bij je container vaak) kan je een java client genereren van de wsdl.
Die java files kan je dan in je project importeren, en aanroepen.

Side note: in de wsdl zit de url van de webservice ingebakken, maar die kan je overriden.
Side note 2: de wsdl kan je ook van je java genereren met een aparte tooltje, dan kan je de java client genereren zonder container, handiger voor je ant build scripts.

"Beauty is the ultimate defence against complexity." David Gelernter