# Wie kann ich meine WSDL Datei kommentieren?



## JayGabriel (24. Jan 2012)

Hallo an alle, 
ich hoffe, ihr könnt mir bei meinem verzwickten Problem helfen.

Ich benutze JAX_WS, um einen WebService zugänglich zu machen und habe ihn mittels der "TOP-DOWN" Methode implementiert. Also XSD und WSDL erstellt und daraus dann meine WS Dateien generieren lassen. Dann eine IMPL Klasse erstellt, die auf die ServiceKlasse zugreift und alle angegebenen Funktionen implementiert. Das funktioniert auch wunderbar und ohne Probleme.

Nun wollte ich, da der WS in Entwicklung ist und einige Einstellungen sich immer wieder mal ändern, an wichtigen Stellen Kommentare einfügen. Das klappt ebenfalls, jedoch nur soweit, dass diese Kommentare in meinen eigenen generierten Klassen auftauchen, nicht aber mehr im WSDL File, welches meinen veröffentlichten WebService repräsentiert. Und auch nicht mehr im generierten TestClient.

So sieht es über einer generierten TypKlasse von mir aus (hier taucht noch alles richtig auf):

```
/**
 * ProductCode = "productcode"
 * SubscriptionCode = "subscriptioncode"
 * PaymentCode = "paymentcode"
 * InvoiceCode = "invoicecode"
 * PriceCode = "pricecode"
 * DeliveryCode = "deliverycode"
 * ScheduleCode = "schedulecode"
 * VariantCode = "variantcode"
 * AddDeliveryCode = "adddeliverycode"					
 * CountryCode = "countrycode"
 * 
 * <p>Java class for Basic complex type.
 * 
 * <p>The following schema fragment specifies the expected content contained within this class.
 * 
 * <pre>
 * &lt;complexType name="Basic">
 *   &lt;complexContent>
 *     &lt;restriction base="{http://www.w3.org/2001/XMLSchema}anyType">
 *       &lt;sequence>
 *         &lt;element name="type" type="{http://www.w3.org/2001/XMLSchema}string" minOccurs="0"/>
 *         &lt;element name="content" type="{http://de/WebAbo/Types}Basiccontent" maxOccurs="unbounded" minOccurs="0"/>
 *       &lt;/sequence>
 *     &lt;/restriction>
 *   &lt;/complexContent>
 * &lt;/complexType>
 * </pre>
 * 
 * 
 */
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Basic", propOrder = {
    "type",
    "content"
})
public class Basic {

[...]
```

Wie schaffe ich, dass die wenigen Kommentare mitgeliefert werden? Gibt es dafür eine extra Annotation, die ich nur noch nicht gefunden habe?

in meiner XSD Datei sieht es so aus:
[XML]
<complexType name="Basic">
  <annotation>
    <documentation>ProductCode = "productcode"
      SubscriptionCode = "subscriptioncode"
      PaymentCode = "paymentcode"
      InvoiceCode = "invoicecode"
      PriceCode = "pricecode"
      DeliveryCode = "deliverycode"
      ScheduleCode = "schedulecode"
      VariantCode = "variantcode"
      AddDeliveryCode = "adddeliverycode"					
      CountryCode = "countrycode"
    </documentation>
  </annotation>
  <sequence>
    <element name="type" type="string" maxOccurs="1" minOccurs="0"></element>
    <element name="content" type="tns:Basiccontent"
    	maxOccurs="unbounded" minOccurs="0">
    </element>
  </sequence>
</complexType>
[/XML]

Auch in meiner selbst geschrieben WSDL Datei steht es:
[XML]
<wsdlperation name="getConfig">
  <wsdl:documentation>ProductCode = &quot;productcode&quot;
    SubscriptionCode = &quot;subscriptioncode&quot;
    PaymentCode = &quot;paymentcode&quot;
    InvoiceCode = &quot;invoicecode&quot;
    PriceCode = &quot;pricecode&quot;
    DeliveryCode = &quot;deliverycode&quot;
    ScheduleCode = &quot;schedulecode&quot;
    VariantCode = &quot;variantcode&quot;
    AddDeliveryCode = &quot;adddeliverycode&quot;					
    CountryCode = &quot;countrycode&quot;
  </wsdl:documentation>
  <wsdl:input message="tns:getConfigRequest"/>
  <wsdlutput message="tns:getConfigResponse"/>
</wsdlperation>
[/XML]

Und in der generierten Service Klasse, taucht es ebenfalls auf:

```
/**
     * ProductCode = "productcode"
     * SubscriptionCode = "subscriptioncode"
     * PaymentCode = "paymentcode"
     * InvoiceCode = "invoicecode"
     * PriceCode = "pricecode"
     * DeliveryCode = "deliverycode"
     * ScheduleCode = "schedulecode"
     * VariantCode = "variantcode"
     * AddDeliveryCode = "adddeliverycode"					
     * CountryCode = "countrycode"
     * 
     * @param fieldnames
     * @return
     *     returns de.webabo.types.ResultConfig
     */
    @WebMethod(action = "http://de/WebAbo/Service/newConfig")
    @WebResult(name = "resultConfig", partName = "resultConfig")
    public ResultConfig getConfig(
        @WebParam(name = "fieldnames", partName = "fieldnames")
        GetFieldnames fieldnames);
```

Mein Problem: das veröffentlichte WSDL File ist jedoch "blanko". Da taucht weder der eine noch der andere Dokumentationsblock auf. Wie schaffe ich, dass die Dokumentation mitgeliefert wird? Da das WSLD File und auch die XSD je einen TAG <documentation> bieten, müsste es doch irgendwie machbar sein, oder?

Oder muss ich mit einer Welcome-Seite für meinen WebService arbeiten? Die ist bisher leider auch nicht erreichbar.

Viele Grüße,
Jay


----------



## DerFeivel (24. Jan 2012)

Hi,


versuchs mal indem du bei der implementierenden Klasse (die dein generiertes Interface implementiert) die Annotation:

@WebService(enpointInterface="vollqualifizierter Name deines Paketes", targetNamespace = "Namespace deiner WSDL")

hinzufügst.

Soweit ich mich erinnere, war es zumindest auf dem JBoss so, dass dieser sich seine eigene WSDL generiert hat, wenn man ihn nicht exlipzit über diese Annotationen darauf hingewiesen hat die vorgegebenen zu benutzen.


----------



## JayGabriel (24. Jan 2012)

Hallo, DerFeivel,

danke für deine schnelle Antwort!

Leider stehen bei mir diese Angaben schon in meiner IMPL Klasse dabei:

```
@WebService(name = "WebAboService",
		serviceName = "WebAboService",
		portName = "WebAboServiceSOAP",
		targetNamespace = "http://www.webabo.de/WebAbo/Service",
		endpointInterface = "de.webabo.service.WebAboService")
public class WebAboServiceImpl implements WebAboService{
[...]
```

Ich habe dazu nun auch gerade mal die Definition von meiner WSDL Datei angeschaut:
[XML]
<wsdl:definitions
  xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
  xmlns:tns="http://webabo.de/WebAbo/Service"
  xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema"
  name="WebAboService"
  targetNamespace="http://webabo.de/WebAbo/Service"
  xmlns:xsd1="http://webabo.de/WebAbo/Types">
[/XML]

Da fiel mir nun auf, das dieses "www" nicht mit drin steht, in der Annotation von meiner IMPL aber schon. Also hab ich den 
	
	
	
	





```
targetNamespace = "http://webabo.de/WebAbo/Service"
```
 in meiner IMPL geändert.

Leider hat sich nichts geändert.

Zu meiner Projektstruktur:
meine XSD und WSDL Dateien liegen im WebContent/WEB-INF Ordner. Kann es damit zusammen hängen? Muss ich da dann noch etwas beachten?

edit:
ich arbeite übrigens in Eclipse und mit Tomcat, falls das auch noch notwendig ist zu wissen.

*edit2 = Lösung:*
Aber dein Post hat mich trotzdem zur Lösung gepracht! 
Die WSDL Datei musste nicht nur in der IMPL direkt angegeben werden, sondern auch in der Konfigurationsdatei (sun-jaxws.xml). Dort habe ich das Attribut "wsdl" hinzugefügt, musste noch meine WSDL und XSD Datei in einen "wsdl"-Unterordner von WEB-INF packen (kam ein Fehler, dass ein "wsdl"-Order gefehlt hätte) und schon hab ich meine Kommentare nun auch in meiner WSDL drin!

meine sun-jaxws.xml:
[XML]
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE xml>
<endpoints version="2.0" xmlns="http://java.sun.com/xml/ns/jax-ws/ri/runtime">
  <endpoint name="WebAbo"
    implementation="de.webabo.service.WebAboServiceImpl"
    url-pattern="/WebAbo"
    wsdl="WEB-INF/wsdl/WebAboService.wsdl"/>
</endpoints>
[/XML]

VIELEN Dank! Wenn sich nur alle Probleme so schnell lösen könnten! 

Viele Grüße,
Jay


----------

