9 Eylül 2015 Çarşamba

WSDL Anatomisi

Giriş
WSDL dosyasını gözle okumak biraz zor. SoapUI gibi bir program ile görsel olarak bakmak daha kolay.

wsdl dosyasının anatomisi hakkında aldığım notlar aşağıda.wsdl dosyasının parçalarını gösteren bir şekil burada

Mantıksal Bölümler
wsdl dosyası mantıksal olarak şöyle bölümleniyor.

Message Definition Bölümü - Interface metodların girdi, çıktı parametrelerinin tanımları
Şeklen şöyledir
<wsdl:message name="IHealthCheckService_GetDiskCFreeMb_InputMessage">
  <wsdl:part name="parameters" element="tns:GetDiskCFreeMb"/>
</wsdl:message>
Interface Definition Bölümü
Şeklen şöyledir.
<wsdl:portType name="IHealthCheckService">
  <wsdl:operation name="GetDiskCFreeMb">
    <wsdl:input message="tns:GetDiskCFreeMb_InputMessage" wsam:Action=""/>
    <wsdl:output message="tns:OutputMessage" wsam:Action=""/>
  </wsdl:operation>
</wsdl:portType>
Binding Bölümü
Şeklen şöyledir
<wsdl:binding name="" type="">
  <soap:binding transport=""/>
    <wsdl:operation name="">
      <soap:operation style="document" soapAction=""/>
        <wsdl:input>
          <soap:body use="literal"/>
        </wsdl:input>
        <wsdl:output>
          <soap:body use="literal"/>
        </wsdl:output>
        </wsdl:operation>
</wsdl:binding>
Service Bölümü - Interface Implementation
Şeklen şöyledir
<wsdl:service name="">
  <wsdl:port name="" binding="">
    <soap:address location=""/>
  </wsdl:port>
</wsdl:service>
Interface Definition Detayları

Operation Etiketi
Örnek
<operation name="convertLead">
    <documentation>convert a set of leads</documentation>
    <input  message="tns:convertLeadRequest"/>
    <output message="tns:convertLeadResponse"/>
    <fault  message="tns:UnexpectedErrorFault" name="UnexpectedErrorFault"/>
</operation>
input girdi output ise çıktı parametereleri belirtir. Parametreler message etiketi içinde tanımlıdır.

Message Etiketi
Örnek
<message name="convertLeadRequest">
    <part element="tns:convertLead" name="parameters"/>
</message>
<message name="convertLeadResponse">
    <part element="tns:convertLeadResponse" name="parameters"/>
</message>
Element Etiketi
Örnek
<element name="convertLead">
 <complexType>
  <sequence>
   <element name="leadConverts" type="tns:LeadConvert" 
            minOccurs="0" maxOccurs="unbounded"/>
  </sequence>
 </complexType>
</element>

Interface Implementation Detayları

Service Etiketi
<service>...</service> etiketi ile verilen servisin nasıl bir port'a hizmet edeceği tanımlı. Port'u Java olarak düşünürsek arayüz (interface) tanımı, binding'i ise gerçekleştiren sınıf olarak hayal edebiliriz.

Binding Etiketi
<binding>...</binding> etiketi ile verilen servisin hangi protokolü kullanacağı ve metodları olacağı tanımlı.

Burada style="document" yazan kısma dikkat etmek lazım. Üretilen WSDL Document/Literal Bare veya Document/Literal Wrapped formatında olabilecek şeklinde ayarlanabiliyor. Hiç bir şey belirtilmezse Document/Literal Wrapped formatı kullanılıyor.

Document/Literal Wrapped ile SOAP mesajında çağırılmak istenen metodun ismi ve parametreleri de belirtilmiş oluyor.   JAX-WS ile açık bir şekilde tanımlamak istenirse aşağıdaki gibi tanımlamak lazım.

Hiç yorum yok:

Yorum Gönder