# Webservice RuntimeModelerException?



## magic_halli (14. Nov 2008)

Hi,

ich habe in Eclipse einen ganz einfachen Webservice geschrieben.
Der Server:

```
public class MyServer {
  
  public static void main(String[] args) {
    MyWebService myService = new MyWebService();
    Endpoint.publish("http://localhost:8080/MyWebService", myService);
    System.out.println("WebService-Server gestartet!\n");
  }

}
```

Der WebService ansich:

```
@WebService
@SOAPBinding(style=Style.RPC)
public class MyWebService {

  @WebMethod
  public long addValues(int val1, int val2){
    return val1 + val2;
  }

  @WebMethod
  public String createArtikel(String sArtikelBezeichnung) throws Exception{
    String sArtikelNr;
    AfpsHttpConnector connector = new AfpsHttpConnector("192.168.1.36", 
                                                    "8080",
                                                    "Username", 
                                                    "Pass");

    DataObjectContainer paraCon = connector.createParameterContainer();
    DataObjectContainer artikelCon = paraCon.createSubContainer("Artikel");
    artikelCon.addString("Bezeichnung", sArtikelBezeichnung);

    DataObjectContainer artikelKonstrCon = artikelCon.createSubContainer("ArtikelKonstruktion");
    artikelKonstrCon.addString("ZeichnungNr", "1a");
    // Aufruf des serverseitigen Connectors
    DataObjectContainer resCon = connector.doRequest("Artikel", "createArtikel", paraCon);
    // Artikelnr auslesen
    sArtikelNr = resCon.getSubContainer("Artikel").getString("Nr");
    return sArtikelNr;
  }

}
```

Der Client:

```
public class MyClient {

  public MyClient() {
    // Verbindung zum WebService aufbauen (generierte Service-Klasse)
    MyWebServiceService service = new MyWebServiceService();
    // (generiertes) Interface MyWebService
    MyWebService logic = service.getMyWebServicePort();
    
    long lStartTime = System.currentTimeMillis();
    System.out.println("Summe=" + logic.addValues(1000, 650) +"\n");
    System.out.println("Artikel mit Artikelnr: " + logic.createArtikel("TESTARTIKEL") + " erfolgreich erstellt.\n");
    long lEndTime = System.currentTimeMillis();
    System.out.println("Zeitdifferenz: " + (lEndTime-lStartTime) + "ms");
  }
  
  public static void main(String[] args) {
    new MyClient();
  }

}
```

MyServer und MyWebService sind zusammen in einem Projekt und MyClient ist in einem zweiten Projekt in Eclipse.
Ich habe natürlich auch die Service-Klassen aus der WSDL-Datei per Console generiert:

```
wsimport -p de.webservice.client -keep [url]http://localhost:8080/MyWebService?wsdl[/url]
```

Kurzum, alles funktioniert prima, solange ich NICHT in MyWebService die Methode createArtikel(..) implementiere!!! Wenn ich diese Methode komplett auskommentiere, kann ich den Server starten, die WSDL im Browser anzeigen und auch MyClient ausführen (bekomme dann hier das Additionsergebnis und die benötigte Zeit angezeigt).
Wenn ich jedoch die Methode createArtikel(..) in MyWebService drin hab und erstmal nur den Server (MyServer) starten will, bekomme ich die Fehlermeldung:

```
Exception in thread "main" com.sun.xml.internal.ws.model.RuntimeModelerException: runtime modeler error: Wrapper class de.webservice.service.jaxws.ExceptionBean is not found. Have you run APT to generate them?
	at com.sun.xml.internal.ws.model.RuntimeModeler.getClass(Unknown Source)
	at com.sun.xml.internal.ws.model.RuntimeModeler.processExceptions(Unknown Source)
	at com.sun.xml.internal.ws.model.RuntimeModeler.processRpcMethod(Unknown Source)
	at com.sun.xml.internal.ws.model.RuntimeModeler.processMethod(Unknown Source)
	at com.sun.xml.internal.ws.model.RuntimeModeler.processClass(Unknown Source)
	at com.sun.xml.internal.ws.model.RuntimeModeler.buildRuntimeModel(Unknown Source)
	at com.sun.xml.internal.ws.server.EndpointFactory.createSEIModel(Unknown Source)
	at com.sun.xml.internal.ws.server.EndpointFactory.createEndpoint(Unknown Source)
	at com.sun.xml.internal.ws.api.server.WSEndpoint.create(Unknown Source)
	at com.sun.xml.internal.ws.api.server.WSEndpoint.create(Unknown Source)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.createEndpoint(Unknown Source)
	at com.sun.xml.internal.ws.transport.http.server.EndpointImpl.publish(Unknown Source)
	at com.sun.xml.internal.ws.spi.ProviderImpl.createAndPublishEndpoint(Unknown Source)
	at javax.xml.ws.Endpoint.publish(Unknown Source)
	at de.webservice.server.MyServer.main(MyServer.java:36)
```
In MyWebService musste ich natürlich noch eine Library einbinden, die mir die Klassen/Methoden für meine createArtikel-Methode bereitstellt. Aber daran sollte es doch wohl nicht liegen, oder?

Ich weiß nicht, wie ich diesen Fehler wegbekomme!  :cry: 
Könnt ihr mir helfen?!

Danke und Gruß


----------



## magic_halli (14. Nov 2008)

Idee: Muß ich vielleicht irgendein spezielles Pakage einbinden?


----------



## Guest (14. Nov 2008)

Der Fehler liegt daran, wenn im WebService (hier MyWebService-Klasse) in einer WebService-Methode eine Exception-Behandlung vorgenommen wird!
Wenn ich in meine addValues()-Methode im WebService eine 'throws Exception' hinzufüge, kommt auch diese Fehlermeldung!

Mh, wie mache ich dann bitteschön ein Exception-Handling in einem WebService?

Danke und Gruß


----------



## magic_halli (17. Nov 2008)

gelöst:

Die Fehlermeldung lag daran, dass in der WebService-Methode eine die Exception mittels 'throws' abgefangen wurde.
Das ganze ohne throws und in ein try-catch verpackt... und es geht.


----------



## Gast (16. Jan 2009)

Hallo,
ich habe ebenfalls dieses Problem.
Habe eine WebService Methode, die ein Exception werfen soll.
Die Entfernung des throws ist also nicht wirklich die Lösung des Problems sondern nur eine Vermeidung. 
Weiß irgendjmd. wie man das mit Exceptions zum laufen bekommt?
Bin über jeden Hinweis dankbar.
Mit freundlichen Grüßen
Simon


----------



## capsaicin (26. Feb 2009)

Hallo,

ich habe das gleiche Problem und kann auf die Exceptions nicht verzichten. Hasst Du das problem lösen können?


----------

