Ich komme aus C #, also merke ich, dass ich nicht viele der (großartigen) Usability-Funktionen und -Funktionen in Java erwarten kann, aber ich habe dieses Java-Projekt vor kurzem und ich kann das einfach nicht herausfinden. In C # / .NET war die Erstellung von Web-Service-Proxy-Klassen und generierten Datenverträgen ein Kinderspiel, aber aus irgendeinem Grund erscheint mir die Java-Implementierung von Web-Services einfach nicht richtig.
Hier ist der Deal ...
Ich verwende wsimport, um die generierten .java-Dateien aus .wsdl-Dateien zu erstellen. Zum Beispiel ...
%Vor%Ich bemerkte, dass dieses hartcodierte (das Eingeben dieses Ausdrucks hat mich fast gerade erbrechen lassen) "wsdlLocation" als der aktuelle Ort des wsdl ("C: \ Benutzer \ ME \ etc \ wsdl \ MyWSDL.wsdl"). Also nehme ich es heraus:
%Vor%Wenn ich jetzt einen generierten Service instanziiere ...
%Vor%Ich erhalte einen Fehler. Etwas in der Art von "kann Datei C: \ blahblah \ Temp \ NULL" nicht finden. OK ... zurück zum Zeichenbrett. Nachdem ich das ein wenig untersucht habe, habe ich hier auf Stack Overflow einen Beitrag gefunden, in dem über die Verwendung von "classpath: META-INF / WSDL.wsdl" als wsdl-Speicherort gesprochen wurde.
%Vor%Fehler!
%Vor%Seltsamerweise wurde der Beitrag auf Stack Overflow als Antwort markiert. Ich denke, es ist möglich, dass sich in den letzten zwei Jahren ein anständiger Betrag so verändert hat, dass "classpath:" nicht mehr unterstützt wird oder es eine andere Methode gibt, dies zu tun, aber ich bin nicht in der Lage gewesen, die Antwort zu finden .
OK, also habe ich eine von mehreren Fragen, die ich beantwortet haben muss (Danke im Voraus !!!! Ich bin verrückt hier drüben!).
Gibt es eine Möglichkeit, die WSDL zur Laufzeit NICHT zu benötigen? Für was es wert ist, denke ich, dass es B.S. dass es das benötigt, wenn ich Objekte instanziiere. Irgendeine Möglichkeit, diese Anforderung zu unterdrücken? Vielleicht wenn ich ein anderes Werkzeug benutze ...?
Wenn es für diesen Code KEINE Möglichkeit gibt, die WSDL zur Laufzeit nicht zu benötigen, wie bekomme ich diese WSDL aus dem Paket? Was setze ich in das Argument wsdlocation ein, damit es die WSDL aus der JAR-Datei lädt?
Da mich das Bedürfnis nach einer WSDL-Laufzeit-Tragödie nie gestört hat, habe ich keine Antworten auf # 1. Das heißt, die Verwendung von paketierten WSDL sollte sowieso ein letzter Ausweg sein. Ich bevorzuge den veröffentlichten WSDL-Endpunkt. Der tatsächliche WSDL-Standort wäre also http(s)://host/name_of_service?wsdl
für die meisten Hosting-Frameworks oder http(s)://host/name_of_service.wsdl
für Spring-ws.
Was die Komplexität der java-basierten Webservice-Client-Programmierung anbelangt, möchte ich Ihnen einen kleinen Auszug aus einem meiner mavenbasierten Projekte zeigen:
%Vor%
Vielleicht bin ich nicht zu IDE-zentrisch, aber es scheint mir ziemlich einfach zu sein. Apache CXF ist einer der besten Webservice-Stacks überhaupt. (Obwohl für die Dokumentation verwende ich Fuse Ссылка . Es ist im Grunde CXF umbenannt mit viel bessere Dokumentation.)
Hoffe, dass Ihre Frage (zumindest teilweise) beantwortet.
auf der Java-Seite: Ich benutze MS-Tools nicht, es sei denn, ich muss, aber nicht, weil ich sie hasse. Meine Arbeit hat mich irgendwie zu größeren Projekten gedrängt und es ist ziemlich selten, .NET-Unterstützung auf High-End-Servern (oder sogar Midrange-Servern) zu sehen. Es ist nur eine Tatsache, die Java nicht besser macht als .net. Aber ich bin mir ziemlich sicher, wenn ich an MS-Sachen arbeiten muss, würde ich mich schnell daran gewöhnen. Mein Rat lautet also: Sei glücklich, dass deine Arbeit dir die Möglichkeit gab, etwas Neues zu lernen und es zu schätzen. Am Ende sind wir in diesem Geschäft, weil wir gerne neue Dinge lernen.
Tags und Links java web-services wsdl wsimport