|
|
2021-3-4 13:19:39 tarihinde yayınlandı
|
|
|
|

Neden C# çağıran web servisi raporlama sunucusu http başlığı SOAPAction'ın değerini tanımıyor ve C# sadece bir etiket eklemesi gerektiği için her zaman C#'ın değiştirmesine izin veriyor, neden JAVA bir eylem talebi belirtemiyor?
Webservice'i yayınlamak ve çağırmak çok basittir, ancak hâlâ küçük sorunlar vardır ve bunlar şu şekilde özetlenmiştir:
Java, .net'in webService'ini "Server HTTP başlığının değerini tanımadı" hatasıyla çağırıyor.
Çözüm:
Webservice çağrıldığında SoapAction belirtilmez, RequestNameSpace belirtilmez, bu yüzden "Sunucu HTTP başlığının değerini tanıyamadı" her zaman istenirken görünür.
Eksen çağrıları kullanılıyorsa, bunları aşağıdaki gibi çağırın:
public static void main(String[] args) throws Exception { Getirmemek mi? WSDL eki String endpoint = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx"; Bir hizmet çağrısı oluştur Hizmet hizmeti = yeni hizmet(); Hizmet aracılığıyla bir çağrı nesnesi oluşturun Çağrı = (Ara) service.createCall(); Hizmetin bulunduğu URL'yi ayarlayın call.setTargetEndpointAddress(new java.net.URL(endpoint)); qqCheckOnline, ağ tarafında "http://WebXml.com.cn/" yöntemidir; aynı zamanda Namespace'in adresine de dikkat eder ve getirmezseniz hata bildirir call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline")); qqCode aynı zamanda .NET yönteminin parametre adıdır ve qqCheckOnline'ın parametre adıdır call.addParameter(new QName("http://WebXml.com.cn/","qqCode"), org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN); Java'nın .net'in webService'ini "Sunucu HTTP başlığının değerini tanımadı" hatasıyla aramasını önlemek için call.setUseSOAPAction(doğru); call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Geri dönen parametre türü call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Ayrıca, çağrılacak yöntemi eklemeniz gerektiği de belirtilmelidir, aksi takdirde bir hata da bildirilir Nesne dizileri parametreleri kapsüller String ret = (Diz) call.invoke(yeni Nesne[] {"aaaaa"}); System.out.println("--------"+ret); } Yorumlar bölümüne dikkat edin.
Bağlantı girişi görünür.? WSDL, Kamu Web Hizmeti anlamına gelir
Aşağıdaki istisna, CXF kullanan wsdl2java.bat bir wsdl dosyasına dayalı .net web servisi yayınlamak için bir istemci oluşturduğunda ortaya çıkar
(tanımlanmamış eleman bildirimi 's:schema') Çözüm:
wsdl.xml aç ve kullan
<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any /> Bu wsdl2java üretim hatası, JAXB'nin xml referanslarını desteklememesiyle ilgili olmalıdır, çünkü <s:any minOccurs="2" maxOccurs="2"/> ve <s:element ref="s:schema" /><s:any/> aslında eşdeğerdir. <s:element ref="s:schema" /> aslında burada s:schema tarafından belirtilen herhangi bir eleman türünü kullanabileceğiniz anlamına gelir, <s:any /> bu rolü üstlenir, <s:any minOccurs="2" maxOccurs="2"/> sadece iki <s:any /> Sadece tek bir cümleyle yazılmıştı.
referansBağlantı girişi görünür.
CXF'nin wsdl2java.bat kullanılarak wsdl dosyasına dayalı bir istemci derleme süper hatası oluşturulur
Çözüm:
Doğru derlenemez çünkü jax-ws2.2 spesifikasyonu java6 ile çelişmektedir.
Ancak program yalnızca java5'te derlenemez, bu yüzden jax-ws spesifikasyon sürümünü aşağılamak gerekir; bu sürüm şu şekilde işlenilebilir: Komutu çalıştır
WSDL2java -frontend jaxws21 -client *.xml Bu şekilde, jax-ws2.1 ile oluşturulan kod java6'da derlenip çalıştırılabilir.
Aracın oluşturduğu istemci kodunu metin karşılaştırmasıyla karşılaştırdım ve metin karşılaştırmasının 3 daha istemci kodu oluşturduğunu gördüm, bu yüzden hata bildiren 3 üreticiyi çıkarmak yukarıdaki sorunları da çözebilir.
Yeniden basılmıştır:Bağlantı girişi görünür.
|
Önceki:.NET/C#, kod performansını test etmek için BenchmarkDotNet kullanırÖnümüzdeki:Consul HTTP API arayüz çağrısı
|