4 Stimmen

So setzen Sie eine Zeitüberschreitung für einen SOAP-Aufruf

Ich muss eine Zeitüberschreitung für einen SOAP-Aufruf mit javax.xml.soap über HTTPS festlegen. Allerdings weiß ich nicht, wie man das macht, es muss einen Trick geben, aber ich konnte ihn nicht finden.

SOAPMessage sm = null;
SOAPMessage response = null;

SOAPConnectionFactory sfc = SOAPConnectionFactory.newInstance();
SOAPConnection connection = sfc.createConnection();

MessageFactory mf = MessageFactory.newInstance();
sm = mf.createMessage();
...
...
URL url = new URL("https://server:XXXX/blablabla);
response = connection.call(sm, url);

Ich habe jemanden dabei gesehen:

if (xxxSoapService instanceof Stub)
            ((Stub) xxxSoapService).setTimeout(10000);

xxxSoapService extends java.rmi.Remote and Stub is from import org.apache.axis.client.Stub;

Wahrscheinlich übersehe ich da etwas.

-1voto

George Punkte 1447

Angenommen, Sie führen Ihre .call() bereits in einem Hintergrund-Thread aus. Sie können einen Timer auf einem anderen Thread abfeuern lassen und den Lade-Thread beenden.

Da SOAPMessage alle Ihre Daten enthält, können Sie alternativ auch einfach HttpUrlConnection verwenden, um die Nachricht zu senden.

HttpUrlConnection connection = // initialize me!
connection.setReadTimeout(TIMEOUT_VALUE);
SOAPMessage sm = // initialize me!

// more stuff for your message

connection.connect();

sm.writeTo(connection.getOutputStream());

Das sollte funktionieren, es sei denn, ich irre mich bezüglich des Verhaltens von writeTo().

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X