Γιατί ο διακομιστής αναφοράς 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 κατασκευαστών που ανέφεραν σφάλματα μπορεί επίσης να λύσει τα παραπάνω προβλήματα.
Ανατύπωση από:Η σύνδεση με υπερσύνδεσμο είναι ορατή.
|