Mengapa server pelaporan layanan web yang memanggil C# gagal mengenali nilai header http SOAPAction dan selalu membiarkan C# mengubahnya, hanya karena C# hanya perlu menambahkan tag, mengapa JAVA tidak dapat menentukan permintaan tindakan?
Menerbitkan dan memanggil Webservice sangat sederhana, tetapi masih ada masalah kecil, yang dirangkum sebagai berikut:
Java memanggil webService .net dengan kesalahan "Server gagal mengenali nilai header HTTP SOAPAction".
Larutan:
Saat memanggil layanan web, tidak ada SoapAction yang ditentukan, tidak ada RequestNameSpace yang ditentukan, sehingga "Server gagal mengenali nilai header HTTP SOAPAction" selalu muncul saat meminta.
Jika menggunakan panggilan Axis, panggil mereka sebagai berikut:
public static void main(String[] args) melemparkan Pengecualian { Tidak membawa? akhiran wsdl Titik akhir string = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Membuat panggilan layanan Service service = Service baru(); Membuat objek panggilan melalui layanan Panggilan panggilan = (Panggilan) service.createCall(); Tetapkan URL tempat layanan berada call.setTargetEndpointAddress(java.net.URL(titik akhir)); qqCheckOnline adalah metode "http://WebXml.com.cn/" di sisi internet, yang juga memperhatikan alamat Namespace, dan juga akan melaporkan kesalahan jika Anda tidak membawanya call.setOperationName(QName baru("http://WebXml.com.cn/","qqCheckOnline")); qqCode juga merupakan nama parameter metode .NET, yang merupakan nama parameter qqCheckOnline call.addParameter(QName baru("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Hindari Java memanggil webService .net dengan kesalahan "Server gagal mengenali nilai header HTTP SOAPAction" call.setUseSOAPAction(true); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Jenis parameter yang ditampilkan call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Ini juga harus dicatat bahwa Anda perlu menambahkan metode yang akan dipanggil, jika tidak, kesalahan juga akan dilaporkan Array objek merangkum parameter String ret = (String) call.invoke(new Object[] {"aaaaa"}); System.out.println("--------"+ret); } Perhatikan bagian komentar.
Login hyperlink terlihat.? WSDL adalah singkatan dari Public Web Service
Pengecualian berikut terjadi ketika wsdl2java.bat yang menggunakan CXF menghasilkan klien untuk menerbitkan layanan web .net berdasarkan file wsdl
( deklarasi elemen yang tidak ditentukan 's:schema') Larutan:
Buka wsdl.xml dan gunakan
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Kesalahan pembuatan wsdl2java ini harus terkait dengan JAXB yang tidak mendukung ref xml, karena <s:any minOccurs="2" maxOccurs="2"/> dan <s:element ref="s:schema" /><s:any/> sebenarnya setara. <s:element ref="s:schema" /> sebenarnya berarti bahwa Anda dapat menggunakan jenis elemen apa pun yang ditentukan oleh s:schema di sini, <s:any /> memainkan peran ini, <s:any minOccurs="2" maxOccurs="2"/> hanya dua <s:any /> Itu hanya ditulis dalam satu kalimat.
referensiLogin hyperlink terlihat.
Menggunakan wsdl2java.bat CXF menghasilkan kesalahan super kompilasi klien berdasarkan file wsdl
Larutan:
Itu tidak dikompilasi dengan benar karena spesifikasi jax-ws2.2 bertentangan dengan java6.
Namun, program ini tidak dapat dikompilasi hanya dalam java5, sehingga perlu untuk menurunkan versi spesifikasi jax-ws, yang dapat ditangani seperti ini: Jalankan perintah
wsdl2java -frontend jaxws21 -klien *.xml Dengan cara ini, kode yang dihasilkan dengan jax-ws2.1 dapat dikompilasi dan dieksekusi dalam java6.
Saya membandingkan kode klien yang dihasilkan oleh alat dengan perbandingan teks dan menemukan bahwa yang terakhir menghasilkan 3 kode klien lagi, jadi menghapus 3 konstruktor yang melaporkan kesalahan juga dapat menyelesaikan masalah di atas.
Dicetak ulang dari:Login hyperlink terlihat.
|