Ich habe danach gesucht und einige Beinaheunfälle gefunden. Ich habe einen Java-Client erstellt, um einen Web-Service mit JAX-WS zu nutzen. Gibt es eine Möglichkeit, JAX zu verwenden, um den HTTP_USER_AGENT-Wert festzulegen? Ich möchte mein Web-Service-Protokoll haben, wenn bestimmte Clients (meine) darauf zugreifen, also wollte ich einen benutzerdefinierten Wert.
Ich habe Optionen gesehen, wo Sie es in den Systemeigenschaften einstellen, aber das scheint nicht zu funktionieren. Die generierten JAX-Klassen scheinen keinen direkten Verweis auf das Verbindungsobjekt zu haben, daher sehe ich nicht, wie ich diese Klassen manipulieren kann.
Jede Hilfe wäre großartig. Vielen Dank ST
Die Lösung für diese Art von Problem in JAX-WS ist die Implementierung eines SoapMessage-Handlers (Interface: SOAPHandler & lt; SOAPMessageContext & gt;). Innerhalb dieses Handlers fügen Sie Ihren HTTP-Header in möglicherweise bereits vorhandene Header ein, dann geben Sie dem nächsten Handler in der Handler-Kette die Kontrolle.
Das Konzept dieser Handler-Kette ist nett, Sie können kleine Klassen für einen bestimmten Zweck haben (Sicherheit, Protokollierung usw.).
In Ihrem Client konfigurieren Sie die Handler-Kette vor dem Senden einer Anfrage:
%Vor%Und hier ist der Code für den HTTPUserAgentHandler:
%Vor%bin nicht sicher, ob dies der beste / direkteste Weg ist, um das zu tun, aber ich denke, du könntest der Handlerkette im Versand javax.xml.ws.Binding einen benutzerdefinierten javax.xml.ws.handler.Handler hinzufügen. Im Handler sollten Sie in der Lage sein, mit der MessageContext.HTTP_REQUEST_HEADERS-Eigenschaft eine benutzerdefinierte Zuordnung zusätzlicher HTTP-Header für den ausgehenden MessageContext festzulegen.
Lassen Sie mich die Idee hinterfragen, HTTP-Header zuerst zu haben.
Ein korrekterer (WS-zentrischer) Ansatz besteht darin, den SOAP-Header und nicht den HTTP-Header festzulegen. Bedenken Sie Folgendes: SOAP-Nachrichten können nicht nur über HTTP, sondern auch über JMS, SMTP oder benutzerdefinierte Transporte übermittelt werden. Wenn Sie einen User-Agent-HTTP-Header benötigen, binden Sie unnötigen Code an nur einen Transport, obwohl dieser derzeit vorherrscht.
Dies ist der Grund, warum JAX-WS keine Ahnung von HTTP-Headern hat, außer in Handlern.
Und (natürlich) StackOverlow weiß , wie man SOAP-Header erstellt.
Tags und Links java