Saya relatif baru di dunia webservices dan penelitian saya tampaknya lebih membingungkan saya daripada mencerahkan saya, masalah saya adalah saya diberi perpustakaan (jar) yang harus saya kembangkan dengan beberapa fungsi webservice.
Library ini akan dibagikan ke developer lain, dan di antara class di jar akan ada class yang memiliki metode yang memanggil webservice (yang pada dasarnya menyetel atribut class, melakukan logika bisnis, seperti menyimpan objek dalam db, dll dan mengirimkan kembali objek dengan modifikasi tersebut). Saya ingin membuat panggilan ke layanan ini sesederhana mungkin, semoga sesederhana mungkin sehingga pengembang yang menggunakan kelas hanya perlu melakukannya.
Car c = new Car("Blue");
c.webmethod();
Saya telah mempelajari JAX-WS untuk digunakan di server tetapi menurut saya saya tidak perlu membuat wsimport
di server maupun wsimport
di klien, karena saya tahu bahwa keduanya memiliki kelas, saya hanya perlu beberapa interaksi antar kelas dibagikan di server dan klien. Menurut Anda, bagaimana masuk akal untuk melakukan layanan web dan panggilan di kelas?
Jawaban:
Saya memahami masalah Anda bermuara pada bagaimana memanggil layanan web SOAP (JAX-WS) dari Java dan mendapatkan objeknya kembali . Dalam hal ini, Anda memiliki dua kemungkinan pendekatan:
wsimport
dan gunakan mereka; atauTentang pendekatan pertama (menggunakan
wsimport
):Saya melihat Anda sudah memiliki kelas bisnis layanan (entitas atau lainnya), dan itu adalah fakta bahwa
wsimport
menghasilkan serangkaian kelas yang sama sekali baru (yang entah bagaimana merupakan duplikat dari kelas yang sudah Anda miliki).Saya khawatir, dalam skenario ini, Anda hanya dapat:
wsimport
kode yang dihasilkan untuk membuatnya menggunakan kelas bisnis Anda (ini sulit dan entah bagaimana tidak sepadan - ingatlah setiap kali WSDL berubah, Anda harus membuat ulang dan menyesuaikan kembali kode tersebut); atauwsimport
kelas yang dihasilkan. (Dalam solusi ini, kode bisnis Anda dapat "menggunakan" kelas yang dihasilkan sebagai layanan dari lapisan arsitektur lain.)Tentang pendekatan kedua (buat klien SOAP kustom Anda):
Untuk menerapkan pendekatan kedua, Anda harus:
java.net.HttpUrlconnection
(dan beberapajava.io
penanganan).Membuat klien SOAP menggunakan klasik
java.net.HttpUrlConnection
tidaklah sulit (tetapi juga tidak sesederhana itu), dan Anda dapat menemukan di tautan ini kode awal yang sangat baik.Saya sarankan Anda menggunakan kerangka SAAJ:
Lihat di bawah ini contoh kerja (jalankan!) Dari panggilan layanan web SOAP menggunakan SAAJ. Itu menyebut layanan web ini .
Tentang penggunaan JAXB untuk serialisasi / deserialisasi, sangat mudah untuk menemukan informasi tentangnya. Anda dapat mulai di sini: http://www.mkyong.com/java/jaxb-hello-world-example/ .
sumber
<xsd:element name="Incident_Number" type="xsd:string"/>
. Seperti yang Anda lihat, elemen ditutup dan tidak ada informasi yang dihasilkan dari WS.GetInfoByCity
adalah503Service Unavailable
, itu seeems. :(Atau cukup gunakan wsdl2java Apache CXF untuk menghasilkan objek yang dapat Anda gunakan.
Itu termasuk dalam paket biner yang dapat Anda unduh dari situs web mereka. Anda cukup menjalankan perintah seperti ini:
Ini menggunakan wsdl untuk menghasilkan objek, yang dapat Anda gunakan seperti ini (nama objek juga diambil dari wsdl, jadi milik Anda akan sedikit berbeda):
Bahkan ada plug-in Maven yang menghasilkan sumber: https://cxf.apache.org/docs/maven-cxf-codegen-plugin-wsdl-to-java.html
Catatan: Jika Anda membuat sumber menggunakan CXF dan IDEA, Anda mungkin ingin melihat ini: https://stackoverflow.com/a/46812593/840315
sumber
Saya menemukan cara alternatif yang jauh lebih sederhana untuk menghasilkan pesan sabun. Diberikan Objek Orang:
Di bawah ini adalah Penghasil Pesan Sabun sederhana:
Anda dapat menggunakan dengan:
sumber