Αυτό το άρθρο είναι ένα άρθρο καθρέφτη της αυτόματης μετάφρασης, κάντε κλικ εδώ για να μεταβείτε στο αρχικό άρθρο.

Άποψη: 26959|Απάντηση: 0

[Πηγή] Οι κλήσεις Java στον διακομιστή υπηρεσιών web C# αποτυγχάνουν να αναγνωρίσουν την τιμή της κεφαλίδας HTTP SOAPAction

[Αντιγραφή συνδέσμου]
Δημοσιεύτηκε στις 2021-3-4 13:19:39 | | | |
Γιατί ο διακομιστής αναφοράς webservice που καλεί το C# αποτυγχάνει να αναγνωρίσει την τιμή της κεφαλίδας http SOAPAction και αφήνει πάντα το C# να την αλλάξει, μόνο και μόνο επειδή το C# χρειάζεται μόνο να προσθέσει μια ετικέτα, γιατί η JAVA δεν μπορεί να καθορίσει ένα αίτημα ενέργειας;



Η δημοσίευση και η κλήση Webservice είναι πολύ απλή, αλλά εξακολουθούν να υπάρχουν μικρά προβλήματα, τα οποία συνοψίζονται ως εξής:

Η Java καλεί το webService του .net με σφάλμα "Ο διακομιστής απέτυχε να αναγνωρίσει την τιμή της κεφαλίδας HTTP SOAPAction".

Λύση:

Όταν καλείτε την υπηρεσία web, δεν καθορίζεται SoapAction, δεν καθορίζεται RequestNameSpace, επομένως εμφανίζεται πάντα η ένδειξη "Ο διακομιστής απέτυχε να αναγνωρίσει την τιμή της κεφαλίδας HTTP SOAPAction" όταν ζητάτε.

Εάν χρησιμοποιείτε κλήσεις άξονα, καλέστε τις ως εξής:


δημόσιο στατικό void main(String[] args) ρίχνει Εξαίρεση {  
    Δεν φέρνετε; Επίθημα WSDL
    Τελικό σημείο συμβολοσειράς = "http://webservice.webxml.com.cn/webservices/qqOnlineWebService.asmx";
  Δημιουργία κλήσης εξυπηρέτησης     
  Υπηρεσία υπηρεσίας = νέα υπηρεσία();
  Δημιουργία αντικειμένου κλήσης μέσω υπηρεσίας
  Κλήση κλήσης = (Κλήση) service.createCall();   
  Ορίστε τη διεύθυνση URL όπου βρίσκεται η υπηρεσία   
  call.setTargetEndpointAddress(new java.net.URL(τελικό σημείο));   
  Το qqCheckOnline είναι η μέθοδος "http://WebXml.com.cn/" στην καθαρή πλευρά, η οποία δίνει επίσης προσοχή στη διεύθυνση του χώρου ονομάτων και θα αναφέρει επίσης ένα σφάλμα εάν δεν το φέρετε
  call.setOperationName(new QName("http://WebXml.com.cn/","qqCheckOnline"));
  Το qqCode είναι επίσης το όνομα παραμέτρου της μεθόδου .NET, το οποίο είναι το όνομα παραμέτρου του qqCheckOnline
  call.addParameter(new QName("http://WebXml.com.cn/","qqCode"),
         org.apache.axis.encoding.XMLType.XSD_STRING, javax.xml.rpc.ParameterMode.IN);
  Αποφύγετε την κλήση Java στο webService του .net με το σφάλμα "Ο διακομιστής απέτυχε να αναγνωρίσει την τιμή της κεφαλίδας HTTP SOAPAction"
  call.setUseSOAPAction(true);
  call.setReturnType(org.apache.axis.encoding.XMLType.SOAP_STRING); Ο τύπος της παραμέτρου που επιστράφηκε
  call.setSOAPActionURI("http://WebXml.com.cn/qqCheckOnline"); Αυτό πρέπει επίσης να σημειωθεί ότι πρέπει να προσθέσετε τη μέθοδο που θα κληθεί, διαφορετικά θα αναφερθεί επίσης ένα σφάλμα
  Οι πίνακες αντικειμένων ενσωματώνουν τις παραμέτρους     
  String ret = (Συμβολοσειρά) call.invoke(new Object[] {"aaaaa"});   
  System.out.println("--------"+ret);
    }

Σημειώστε την ενότητα σχολίων.

Η σύνδεση με υπερσύνδεσμο είναι ορατή.? Το WSDL σημαίνει Δημόσια Υπηρεσία Ιστού

Η ακόλουθη εξαίρεση παρουσιάζεται όταν το wsdl2java.bat που χρησιμοποιεί το CXF δημιουργεί έναν υπολογιστή-πελάτη για να δημοσιεύσει μια υπηρεσία web .net που βασίζεται σε ένα αρχείο wsdl


( δήλωση απροσδιόριστου στοιχείου 's:schema')

Λύση:

Ανοίξτε το wsdl.xml και χρησιμοποιήστε το


<s:any minOccur="2" maxOccur="2"/>Alternate <s:element ref="s:schema" /><s:any />
Αυτό το σφάλμα δημιουργίας wsdl2java θα πρέπει να σχετίζεται με το JAXB που δεν υποστηρίζει xml refs, επειδή <s:any minHappen="2" maxHappen="2"/> και <s:element ref="s:schema" /><s:any/> είναι στην πραγματικότητα ισοδύναμα. <s:element ref="s:schema" /> στην πραγματικότητα σημαίνει ότι μπορείτε να χρησιμοποιήσετε οποιονδήποτε τύπο στοιχείου που καθορίζεται από το s:schema εδώ, το <s:any /> παίζει αυτόν τον ρόλο, το <s:any minHappen="2" maxHappen="2"/> είναι μόνο δύο <s:any />

Ήταν απλώς γραμμένο σε μια πρόταση.

αναφοράΗ σύνδεση με υπερσύνδεσμο είναι ορατή.

Η χρήση του wsdl2java.bat του CXF δημιουργεί ένα σούπερ σφάλμα μεταγλώττισης πελάτη με βάση το αρχείο wsdl

Λύση:

Δεν μεταγλωττίζεται σωστά επειδή η προδιαγραφή jax-ws2.2 έρχεται σε σύγκρουση με την java6.

Ωστόσο, το πρόγραμμα δεν μπορεί να μεταγλωττιστεί μόνο σε java5, επομένως είναι απαραίτητο να μειώσετε την έκδοση προδιαγραφών jax-ws, η οποία μπορεί να αντιμετωπιστεί ως εξής: Εκτελέστε την εντολή

wsdl2java -frontend jaxws21 -πελάτης *.xml

Με αυτόν τον τρόπο, ο κώδικας που δημιουργείται με το jax-ws2.1 μπορεί να μεταγλωττιστεί και να εκτελεστεί σε java6.

Συνέκρινα τον κώδικα πελάτη που δημιουργήθηκε από το εργαλείο με σύγκριση κειμένου και διαπίστωσα ότι ο τελευταίος δημιούργησε 3 ακόμη κώδικα πελάτη, επομένως η αφαίρεση των 3 κατασκευαστών που ανέφεραν σφάλματα μπορεί επίσης να λύσει τα παραπάνω προβλήματα.

Ανατύπωση από:Η σύνδεση με υπερσύνδεσμο είναι ορατή.




Προηγούμενος:Το .NET/C# χρησιμοποιεί το BenchmarkDotNet για να ελέγξει την απόδοση του κώδικα
Επόμενος:Κλήση διεπαφής Consul HTTP API
Αποκήρυξη:
Όλο το λογισμικό, το υλικό προγραμματισμού ή τα άρθρα που δημοσιεύονται από το Code Farmer Network προορίζονται μόνο για μαθησιακούς και ερευνητικούς σκοπούς. Το παραπάνω περιεχόμενο δεν θα χρησιμοποιηθεί για εμπορικούς ή παράνομους σκοπούς, άλλως οι χρήστες θα υποστούν όλες τις συνέπειες. Οι πληροφορίες σε αυτόν τον ιστότοπο προέρχονται από το Διαδίκτυο και οι διαφορές πνευματικών δικαιωμάτων δεν έχουν καμία σχέση με αυτόν τον ιστότοπο. Πρέπει να διαγράψετε εντελώς το παραπάνω περιεχόμενο από τον υπολογιστή σας εντός 24 ωρών από τη λήψη. Εάν σας αρέσει το πρόγραμμα, υποστηρίξτε γνήσιο λογισμικό, αγοράστε εγγραφή και λάβετε καλύτερες γνήσιες υπηρεσίες. Εάν υπάρχει οποιαδήποτε παραβίαση, επικοινωνήστε μαζί μας μέσω email.

Mail To:help@itsvse.com