Artikel ini adalah artikel cermin dari terjemahan mesin, silakan klik di sini untuk melompat ke artikel aslinya.

Melihat: 26959|Jawab: 0

[Sumber] Panggilan Java ke server layanan web C# gagal mengenali nilai header HTTP SOAPAction

[Salin tautan]
Dipaparkan pada 2021-3-4 13:19:39 | | | |
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.




Mantan:.NET/C# menggunakan BenchmarkDotNet untuk menguji performa kode
Depan:Panggilan antarmuka API HTTP Konsul
Sanggahan:
Semua perangkat lunak, materi pemrograman, atau artikel yang diterbitkan oleh Code Farmer Network hanya untuk tujuan pembelajaran dan penelitian; Konten di atas tidak boleh digunakan untuk tujuan komersial atau ilegal, jika tidak, pengguna akan menanggung semua konsekuensi. Informasi di situs ini berasal dari Internet, dan sengketa hak cipta tidak ada hubungannya dengan situs ini. Anda harus sepenuhnya menghapus konten di atas dari komputer Anda dalam waktu 24 jam setelah pengunduhan. Jika Anda menyukai program ini, harap dukung perangkat lunak asli, pembelian pendaftaran, dan dapatkan layanan asli yang lebih baik. Jika ada pelanggaran, silakan hubungi kami melalui email.

Mail To:help@itsvse.com