Sabun tidak memberikan bidang respons ke objek yang diketik

Saya seorang pemula SOAP yang ditugaskan untuk menghidupkan kembali antarmuka sabun lama. Saya telah mem-porting layanan sabun ke kucing jantan baru di jalur baru (dan membiarkan klien tidak berubah). Saya mengirimkan permintaan: http://myserver:8181/soap/SoapTest?wsdl dan saya mendapatkan kembali:

  <wsdl:definitions xmlns:ns1="http://webservices.mycompany.com"
    xmlns:ns3="http://schemas.xmlsoap.org/wsdl/soap/http"
    xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/"
    xmlns:tns="http://www.mycompany.com/SoapTest"
    xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
    xmlns:xsd="http://www.w3.org/2001/XMLSchema"
    name="SoapTestService" 
    targetNamespace="http://www.mycompany.com/SoapTest">

    <wsdl:import location="http://myserver:8181/soap/SoapTest?wsdl=SoapTest.wsdl"
          namespace="http://webservices.mycompany.com"></wsdl:import>
    <wsdl:binding name="SoapTestServiceSoapBinding" type="ns1:SoapTest">...</wsdl:binding>
    <wsdl:service name="SoapTestService">...</wsdl:service>
  </wsdl:definitions>

Tampaknya menjanjikan. Permintaan ke lokasi impor SoapTest?wsdl=SoapTest.wsdl akan menghasilkan:

<wsdl:definitions xmlns:ns1="http://webservices.mycompany.com"
  xmlns:ns2="http://jaxb.dev.java.net/array" xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/"
  xmlns:xsd="http://www.w3.org/2001/XMLSchema" 
  name="SoapTest"
  targetNamespace="http://webservices.mycompany.com">
  <wsdl:types>
    <xs:schema xmlns:tns="http://webservices.mycompany.com"
      xmlns:xs="http://www.w3.org/2001/XMLSchema"
      targetNamespace="http://webservices.mycompany.com" version="1.0">
    <xs:complexType name="sessionObj">
      <xs:sequence>
        <xs:element name="code" type="xs:int"/>
        <xs:element name="id" type="xs:long"/>
        <xs:element minOccurs="0" name="role" type="xs:string"/>
        <xs:element minOccurs="0" name="username" type="xs:string"/>
      </xs:sequence>
    </xs:complexType>
    ... (and so on)

Jadi klien dapat menerima asosiasi nama:tipe anggota xs tetapi tampaknya tidak - atau tidak menerapkannya. Itu adalah ...

HUH.. setelah ditinjau, saya melihat xs digunakan sebagai namespace tetapi xmlns:xsd ditentukan?? Bagaimana hal ini bisa terjadi?

Kueri klien ZSI (dari Windows, jika ada bedanya) ke antarmuka ini (Linux) menerima respons yang berisi muatan data yang diharapkan tetapi kemudian memetakan setiap item data ke dalam "properti" individual - menghasilkan daftar properti generik.

Saya mengharapkan daftar anggota yang diketik, dengan setiap properti dimasukkan ke tipe xs (misalnya int, long, string, string untuk yang di atas), bukan?

Terima kasih sebelumnya atas petunjuk apa pun.


person DJC    schedule 11.04.2012    source sumber
comment
Mengingat banyaknya informasi yang diberikan di sini, saya akan terkejut Anda akan mendapatkan cukup perhatian :)... Penggunaan xs vs. xsd untuk aliasing namespace tidak relevan: namespace tampaknya digunakan dengan benar, jika ada awalan xsd tampaknya berlebihan dalam cuplikan yang diberikan. Saya menyarankan untuk memperbarui pertanyaan Anda dengan info tambahan; mungkin sebuah fragmen XML, deskripsi tentang bagaimana hal itu diterjemahkan ke properti individual dan apa sebenarnya daftar anggota yang diketik - pada dasarnya beberapa kode. Lebih banyak WSDL akan bermanfaat... entah bagaimana saya menduga pengikatan SOAP Anda adalah RPC di sini...   -  person Petru Gardea    schedule 14.04.2012


Jawaban (2)


Dari dokumentasi ZSI:

Jika operasi yang dipanggil mengembalikan ComplexType, informasi kode jenis harus diberikan untuk memberi tahu ZSI cara melakukan deserialisasi respons.

Agar ZSI dapat melakukan deserialisasi secara transparan tipe kompleks yang dikembalikan ke dalam instance Person, modul yang mendefinisikan kelas dan kode tipenya harus ditambahkan ke daftar ZSI.Path. Dimungkinkan juga untuk secara eksplisit memberi tahu ZSI kelas dan kode ketik apa yang akan digunakan dengan meneruskan kelas tersebut sebagai parameter ke metode Binding.Receive(). Metode pertama sering kali lebih disukai, khususnya untuk perpustakaan yang didistribusikan secara publik.

Pembuatan Kode dari WSDL dan Skema XML adalah cara kedua yang disediakan ZSI untuk mengakses layanan WSDL. Mengingat jalur ke layanan WSDL, dua file dihasilkan, file 'layanan' dan file 'tipe', yang kemudian dapat digunakan untuk mengakses layanan.

person jlvaquero    schedule 19.04.2012
comment
pengguna, belum sempat menindaklanjuti kode ini tetapi komentar Anda sepertinya memberikan harapan.. terima kasih! - person DJC; 21.04.2012
comment
Ini adalah cara terbaik di hampir semua kerangka SOAP. Gunakan WSDL untuk menghasilkan kelas yang diketik dengan kuat dan membuat kerangka kerja untuk mengubah respons XML menjadi kelas tersebut. - person jlvaquero; 23.04.2012

Mengingat Anda belum memberikan cukup informasi untuk masalah sebenarnya yang ada, saya akan mendasarkannya pada dasar bahwa Anda adalah seorang pemula, dan oleh karena itu, rangkum jawaban saya pada bagian-bagian yang menurut saya relevan dengan pertanyaan Anda.

Layanan web utama Anda dijelaskan di http://myserver:8181/soap/SoapTest?wsdl WSDL, yang menyimpan impor ke WSDL induk. WSDL induk ini menyimpan definisi layanan yang dapat diikat oleh layanan utama Anda.

Tampaknya menjanjikan. Permintaan ke lokasi impor SoapTest?wsdl=SoapTest.wsdl mengembalikan: ..

Dari definisi dokumen yang diberikan di atas, impor:

<wsdl:import location="http://myserver:8181/soap/SoapTest?wsdl=SoapTest.wsdl"
          namespace="http://webservices.mycompany.com">
</wsdl:import>

memasukkan file WSDL induk yang menyimpan definisi skema untuk semua elemen dan atribut yang relevan untuk layanan Anda. Artinya panggilan mandiri, akan mengungkapkan definisi namespace xs. Lihat di sini untuk mengetahui lebih lanjut tentang skema dan tipe data.

HUH.. setelah ditinjau, saya melihat xs digunakan sebagai namespace tetapi xmlns:xsd ditentukan?? Bagaimana hal ini bisa terjadi?

Ya, skema didefinisikan bukan sebagai file terpisah, namun sebagai bagian dari WSDL. Itu ditentukan antara <wsdl:types> tag:

 <wsdl:types>
       <xs:schema xmlns:tns="http://webservices.mycompany.com" 
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        targetNamespace="http://webservices.mycompany.com" version="1.0">
   [..]
 </wsdl:types>

Lihat di sini juga untuk informasi lebih lanjut tentang pengikatan ZSI dan pembuatan stub.

person Bitmap    schedule 20.04.2012
comment
Bitmap, terima kasih atas klarifikasi Anda. Saya akan melihat lebih jauh dokumen ZSI; menurut saya bagian pengikatannya yang tidak berfungsi. - person DJC; 21.04.2012