# JAX-WS Probleme mit @WebParam und @WebResult



## dunichquatsche (24. Mai 2011)

Hallo, ich hoffe, dass mir hier jemand helfen kann. 

Ich bin gerade dabei einen WebService zu schreiben. Hierfür nutze ich MyEclipse und möchte aus einer Klasse heraus den WebService mit JAX-WS generieren lassen. Ich habe also eine Klasse, die ein Interface implementiert und in dem Interface sind die entsprechenden Annotationen drin. Das funktioniert soweit auch. Mit meinem TestClient, den ich in PHP geschrieben habe bekomme ich auch die 
gewünschten Ergebnisse.  

Nun werdet Ihr Euch sicherlich fragen "Wat willer denn noch?". Ich möchte gerne die Parameter, die ich an den WebService übergebe benennen. Also 


```
@WebService(name="MyWebServices") 
public class MyWebServices 
{ 
  @WebMethod 
  public String hello( @WebParam( name="name" )String name ) 
  { 
    return "Hello " + name + "!"; 
  }
```

in der Java-Klasse, die generiert wird steht aber weiterhin 


```
@XmlElement(name = "arg0", namespace = "")
    private String arg0;
```

Es muss doch möglich sein, dass ich mit der Annotation den Namen selbst bestimmen kann oder verstehe ich da etwas völlig falsch ( in "Java ist auch eine Insel" existiert ein derartiges Beispiel). 

Achso, mit XFire funktioniert das übrigens... 

Bei 
	
	
	
	





```
@WebResult
```
 habe ich dasselbe Problem. Standardmäßig wird eine Variable 
	
	
	
	





```
return
```
 zurückgegeben, aber ich möchte gern den Namen selbst bestimmen können, 
da ich sonst Änderungen an einem Client vornehmen muss.

Ich hoffe, Ihr könnt mir einen Tipp geben. 

Vielen Dank!


----------



## musiKk (24. Mai 2011)

Bei return weiß ich nicht, aber das mit den benannten Parametern sollte eigentlich funktionieren. Sicher, dass der Service auch richtig aktualisiert wurde?


----------



## dunichquatsche (24. Mai 2011)

Hallo musiKk, 

also erstmal cool, dass Du antwortest.  

Das Projekt habe ich komplett gelöscht, neu erstellt und auf dem Tomcat deployt. Der PHP - Client lädt sich die WSDL dynamisch über die URL und der soap_cache in der php.ini ist deaktiviert

Ich prüf's aber nachher nochmal nach. 

Danke für Deinen Hinweis!


----------



## fax (25. Mai 2011)

Falls es nicht klappt, kannst du das hier mal noch probieren:
JAX-WS RI 2.2.1 -- WSDL Customization

Könnte aber gut sein, dass sich das (auch) nur auf die Namen im erzeugten WSDL bezieht.


----------



## dunichquatsche (25. Mai 2011)

Also erstmal vielen Dank Euch beiden für Eure Unterstützung! 

Nach langem Suchen und verzweifeltem Debuggen von JAX-WS ist mir dabei etwas aufgefallen. 

Der Hinweis mit dem Caching geht schonmal 50% in die richtige Richtung. 

Das Problem ist, dass der Wizard (MyEclipse 8.6), der den Webservice generiert die Annotierungen @WebResult und @WebParam in der Implemetierungsklasse und dem Service - Interface ignoriert. 

Als Ergebnis der Generierung erhält man eine Delegate - Klasse. Wenn ich dieses Delegate entsprechend meinen Vorstellungen annotiere, dann funktioniert das auch. Das Problem ist nur, dass das annotierte Delegate beim neu generieren wieder überschrieben wird. Das heisst, ich muss erst das Delegate sichern, den Webservice erzeugen, damit die entsprechenden Artefakte wie Response - Objekte erzeugt werden und danach wieder mein ursprüngliches Delegate wieder in des Projekt einfügen und danach erst auf dem Server deployen. :autsch:

Wenn man nicht so vorgeht, dann erhält man die folgende Exception !! 


```
javax.xml.ws.WebServiceException: class >DeineKlasse> do not have a property of the name arg0
```

Ob das der Weisheit letzter Schluß sein soll möchte ich nicht beurteilen.    

Ich schau mir jetzt mal CXF an oder versuche das von Hand mit wsgen hinzubekommen. 


Vielen Dank nochmal!


----------

