Questo articolo è un articolo speculare di traduzione automatica, clicca qui per saltare all'articolo originale.

Vista: 26959|Risposta: 0

[Fonte] Le chiamate Java al server webservice C# non riconoscono il valore dell'intestazione HTTP SOAPAction

[Copiato link]
Pubblicato il 4-03-2021 13:19:39 | | | |
Perché il server di segnalazione del webservice che chiama C# non riconosce il valore dell'intestazione http SOAPAction e lascia sempre che C# lo cambi, solo perché C# deve solo aggiungere un tag, perché JAVA non può specificare una richiesta d'azione?



Pubblicare e chiamare Webservice è molto semplice, ma ci sono comunque piccoli problemi, riassunti come segue:

Java chiama il webService di .net con un errore "Server failed to make the value of HTTP header SOAPAction".

Soluzione:

Quando si chiama un servizio web, non viene specificato alcun SoapAction, nessun RequestNameSpace è specificato, quindi "Il server non ha riconosciuto il valore dell'intestazione HTTP SOAPAction" appare sempre durante la richiesta.

Se si usano chiamate Asse, chiamale come segue:


public static void main(String[] args) throws Exception {  
    Non porterli? Suffisso WSDL
    Estremità della stringa = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Crea una chiamata di servizio     
  Service Service = nuovo Service();
  Crea un oggetto di chiamata tramite il servizio
  chiamata = (Chiamata) servizio.createCall();   
  Imposta l'URL dove si trova il servizio   
  call.setTargetEndpointAddress(new java.net.URL(endpoint));   
  qqCheckOnline è il metodo "http://WebXml.com.cn/" lato web, che presta attenzione anche all'indirizzo dello spazio dei nomi e segnala un errore se non lo porti
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  qqCode è anche il nome del parametro del metodo .NET, che è il nome del parametro qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Evita che Java chiami il webService di .net con l'errore "Il server non ha riconosciuto il valore dell'intestazione HTTP SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Il tipo di parametro restituito
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Va anche notato che è necessario aggiungere il metodo da chiamare, altrimenti verrà segnalato un errore
  Gli array di oggetti racchiudono i parametri     
  Stringa ret = (Stringa) call.invoke(nuovo Oggetto[] {"aaaa"});   
  System.out.println("--------"+ret);
    }

Nota la sezione commenti.

Il login del link ipertestuale è visibile.? WSDL sta per Public Web Service

La seguente eccezione si verifica quando il wsdl2java.bat che utilizza CXF genera un client per pubblicare un servizio web .net basato su un file wsdl


(dichiarazione elementale indefinita 's:schema')

Soluzione:

Apri la wsdl.xml e usa


<s:any minOccurs="2" maxOccurs="2"/>Alternate <s:element ref="s:schema" /><s:any />
Questo errore di generazione wsdl2java dovrebbe essere collegato al fatto che JAXB non supporta le referenze xml, perché <s:any minOccurs="2" maxOccurs="2"/> e <s:element ref="s:schema" /><s:any/> sono in realtà equivalenti. <s:element ref="s:schema" /> in realtà significa che puoi usare qualsiasi tipo di elemento specificato da s:schema qui, <s:any /> svolge questo ruolo, <s:any minOccurs="2" maxOccurs="2"/> è semplicemente due <s:any />

Era scritto in una sola frase.

riferimentoIl login del link ipertestuale è visibile.

Utilizzando il CXF wsdl2java.bat genera un super errore di compilazione client basato sul file wsdl

Soluzione:

Non compila correttamente perché la specifica jax-ws2.2 è in conflitto con java6.

Tuttavia, il programma non può essere compilato solo in java5, quindi è necessario abbassare la versione della specifica jax-ws, che può essere gestita così: Esegui il comando

wsdl2java -frontend jaxws21 -client *.xml

In questo modo, il codice generato con jax-ws2.1 può essere compilato ed eseguito in java6.

Ho confrontato il codice client generato dallo strumento con il confronto di testo e ho scoperto che quest'ultimo generava 3 codice client in più, quindi rimuovere i 3 costruttori che segnalavano errori può anche risolvere i problemi sopra citati.

Ristampato da:Il login del link ipertestuale è visibile.




Precedente:.NET/C# utilizza BenchmarkDotNet per testare le prestazioni del codice
Prossimo:Chiamata all'interfaccia HTTP API di Consul
Disconoscimento:
Tutto il software, i materiali di programmazione o gli articoli pubblicati dalla Code Farmer Network sono destinati esclusivamente all'apprendimento e alla ricerca; I contenuti sopra elencati non devono essere utilizzati per scopi commerciali o illegali, altrimenti gli utenti dovranno sostenere tutte le conseguenze. Le informazioni su questo sito provengono da Internet, e le controversie sul copyright non hanno nulla a che fare con questo sito. Devi eliminare completamente i contenuti sopra elencati dal tuo computer entro 24 ore dal download. Se ti piace il programma, ti preghiamo di supportare software autentico, acquistare la registrazione e ottenere servizi autentici migliori. In caso di violazione, vi preghiamo di contattarci via email.

Mail To:help@itsvse.com