Java Aus WSDL File Java Interface implementieren

palaber

Captain
Registriert
Juni 2006
Beiträge
3.856
Hey Leute,

ich sollte hier aus nem WSDL File das Java Interface ableiten.
Leider habe ich keine Ahnung wie das funktioniert. Google hat mir nicht geholfen.
Hat jemand nen gute "Tutorial" oder ne Anleitung wo man im WSDL was findet und wie man
das in Java übersetzt?

Als Beispiel häng ich hier mal WSDL Code an, vielleicht wäre jemand so nett und kann mir daran erklären
wie das läuft.

Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://tempuri.org/AreaService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AreaService" targetNamespace="http://tempuri.org/AreaService/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/AreaService/">
      <xsd:element name="area" type="xsd:float"/>
      <xsd:element name="parameters" type="tns:dimensions"/>
      <xsd:complexType name="dimensions">
      	<xsd:sequence>
      		<xsd:element name="width" type="xsd:float"/>
      		<xsd:element name="height" type="xsd:float"/>
      	</xsd:sequence>
      </xsd:complexType>

    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="CalculateRectAreaResponse">
    <wsdl:part element="tns:area" name="area"/>
  </wsdl:message>
  <wsdl:message name="CalculateRectAreaRequest">
    <wsdl:part element="tns:parameters" name="parameters"/>
  </wsdl:message>
  <wsdl:portType name="AreaService">
    <wsdl:operation name="CalculateRectArea">
      <wsdl:input message="tns:CalculateRectAreaRequest"/>
      <wsdl:output message="tns:CalculateRectAreaResponse"/>
    </wsdl:operation>
  </wsdl:portType>
  <wsdl:binding name="AreaServiceSOAP" type="tns:AreaService">
    <soap:binding style="document" transport="http://schemas.xmlsoap.org/soap/http"/>
    <wsdl:operation name="CalculateRectArea">
      <soap:operation soapAction="http://tempuri.org/AreaService/NewOperation"/>
      <wsdl:input>
        <soap:body use="literal"/>
      </wsdl:input>
      <wsdl:output>
        <soap:body use="literal"/>
      </wsdl:output>
    </wsdl:operation>
  </wsdl:binding>
  <wsdl:service name="AreaService">
    <wsdl:port binding="tns:AreaServiceSOAP" name="AreaServiceSOAP">
      <soap:address location="http://localhost:8080/AreaProj/services/AreaServiceSOAP"/>
    </wsdl:port>
  </wsdl:service>
</wsdl:definitions>
 
Ich find den axis converter - aber auf der Apache seite kann ich ihn (Maven2 WSDL2Code Plug-in) nicht runterladen.
Und sonst find ich das Teil nicht. Wenn ich den Code automatisch wandeln könnte, könnte ich mir ableiten was woraus entsteht.
Ich brauch das Wissen halt für ne Prüfung. Da hab ich keinen Converter, sondern nur mein Hirn. Und das läuft nicht immer Fehlerfrei ;)

@T3rm1: was meinst du damit?
 
Warum willst du das denn von Hand machen?
Dafür gibt es Tools wie z.B. WSDL2Java als Teil von Apache Axis.
 
Was verstehst du denn nicht an dem, was ich gesagt habe. Du sollst dir wsimport.exe angucken. Damit lassen sich die Java Klassen aus der WSDL erzeugen.
 
palaber schrieb:
Code:
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/" xmlns:tns="http://tempuri.org/AreaService/" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" name="AreaService" targetNamespace="http://tempuri.org/AreaService/">
  <wsdl:types>
    <xsd:schema targetNamespace="http://tempuri.org/AreaService/">
      <xsd:element name="area" type="xsd:float"/> // Tasächlicher Rückgabewert
      <xsd:element name="parameters" type="tns:dimensions"/>  // Tasächliche Methodenparameter
      <xsd:complexType name="dimensions">
      	<xsd:sequence>
      		<xsd:element name="width" type="xsd:float"/>
      		<xsd:element name="height" type="xsd:float"/>
      	</xsd:sequence>
      </xsd:complexType>

    </xsd:schema>
  </wsdl:types>
  <wsdl:message name="CalculateRectAreaResponse"> // Verweis 2 auf Rückgabewert
    <wsdl:part element="tns:area" name="area"/>
  </wsdl:message>
  <wsdl:message name="CalculateRectAreaRequest"> // Verweis 2 auf Methodenparameter
    <wsdl:part element="tns:parameters" name="parameters"/>
  </wsdl:message>
  <wsdl:portType name="AreaService"> // Name des Interfaces
    <wsdl:operation name="CalculateRectArea"> // Methodenname
      <wsdl:input message="tns:CalculateRectAreaRequest"/> // Verweis  1 auf Methodenparameter
      <wsdl:output message="tns:CalculateRectAreaResponse"/> // Verweis 1 auf Rückgabewert
    </wsdl:operation>
  </wsdl:portType>

Ist bei mir schon etwas her, daher keine Garantie auf Korrektheit, aber ich hab dir mal ein Paar Kommentare dran geschrieben wie ich das hergeleitet habe.

Code:
public interface AreaService {
public float CalculateRectArea ( float width, float height);
}

Ein korrektes Beispiel vom W3 direkt findest du hier. Das ist allerdings WSDL 2.0, wohingegen dein Beispiel WSDL 1.1 ist.
Dein Beispiel ist ein wenig komplexer aufgrund der Verweise, und da habe ich auch nur assoziiert, dass es wahrscheinlich so sein müsste.

Bleibt die Frage, sollt ihr WSDL 1.1 oder WSDL 2.0 lernen?
 
Zuletzt bearbeitet:
Zurück
Oben