Verwendung von JAX-WS: Wie kann ich die Benutzer-Agent-Eigenschaft festlegen?

8

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

    
soulTower 12.04.2011, 18:10
quelle

3 Antworten

11

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%     
dertoni 15.03.2012 15:17
quelle
2

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.

    
jtahlborn 12.04.2011 18:57
quelle
2

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.

    
Vladimir Dyuzhev 12.04.2011 19:11
quelle

Tags und Links