Ich versuche ein Modul für eine Java-Anwendung zu schreiben, die auf einen von WSDL beschriebenen Webservice zugreift. Die Quell-WSDL wurde direkt von einem meiner Meinung nach ASP.NET-Webservice heruntergeladen. Die Service-URL endet mit der Erweiterung .asmx. Wenn Sie die Service-URL in einem Browser anzeigen, wird ein Link angezeigt, über den Sie die WSDL herunterladen können.Ändern der URL eines Webservice-Clients, der mit wsimport generiert wurde
Eine wichtige Voraussetzung für mich ist es, die Service-URL ohne Neukompilierung wechseln zu können. Die mir angegebene URL ist offensichtlich ein Testserver und ich weiß, dass ich in der Produktion eine Produktions-URL erhalten werde. Ich möchte auch in der Lage sein, selbst einen Mock-Server zum Testen zu erstellen und die Möglichkeit zu behalten, in der Zukunft eine neue URL anzugeben, ohne sie neu zu kompilieren, wenn der Dienst verschoben wird. Tatsächlich möchte ich für eine Installation unserer Anwendung in der Lage sein, mehrere Instanzen des Webservice unter verschiedenen URLs zu instanziieren.
Aber meine Vorstellung scheint nicht mit dem übereinzustimmen, was das wsimport-Tool für mich tut. Nach f1sh Antwort here erzielen ich Java-Code von meinem heruntergeladen WSDL mit diesem Befehl:
wsimport -Xnocompile -keep -b binding.xml wsdlFile.wsdl
Was ich finde, ist, dass der erzeugte Code einen hartcodierte Bezug auf meinen heruntergeladen wsdlFile.wsdl hat, die die Service-URL enthält. Unsere Anwendung wird nicht so laufen, dass sie durch Bearbeiten einer WSDL-Datei zur Laufzeit konfiguriert wird. Ich benötige Code, der zum Zeitpunkt der Erstellung in meine Anwendung kompiliert wird und die Service-URL zur Instanziierungszeit festlegen kann.
Ich bin nicht ganz sicher, warum die WSDL zur Laufzeit sogar geparst werden muss; Ich habe verstanden, dass WSDL genügend Informationen liefert, um Code zu generieren, der auf den Webservice zugreifen kann. Daher bin ich mir nicht sicher, was es für den generierten Code außer der Service-URL liefert und ich bin nicht sicher, warum die Service-URL nicht bereitgestellt wird ein Konstruktor oder über eine Methode auf der generierten Webservice-Klasse konfigurierbar. Ich muss etwas verpassen.
Was ist die allgemeine Praxis für dieses Szenario? Generieren die meisten Benutzer den Code für jede einzelne URL, die sie verwenden werden? Wird Code zur Laufzeit generiert? Gibt es ein anderes WSDL-Tool, das ich verwenden kann, um Client-Code mit einer konfigurierbaren URL zu erstellen?