Skip to content

Mis en ligne par admin - 10 mars 2011 - Services Web

Un Web Service Client Asynchrone avec Axis2

La documentation Axis2 n’est pas fameuse en ce qui concerne la création de client standalone d’une part, et asynchrone d’autre part.

Rappelons que par Web Services asynchrone, nous entendons un service qui reçoit une requête sur un canal de transport, et ensuite, initie un autre canal de transport pour la réponse. Le client, quant à lui, utilise un header WS-Addressing (contenant un MessageId), afin de corréler la réponse du service avec une instance d’appel donnée.

Le code suivant est un exemple simple et complet, permettant d’envoyer la requête et d’appeler la méthode onMessage() de l’AxisCallback définie ci-dessous.
Notez que les JAR d’Axis ainsi que adressing.mar doivent se trouver dans le classpath de l’application Java.


package be.spacebel.ssegrid;

import java.util.concurrent.Callable;
import org.apache.axiom.om.OMAbstractFactory;
import org.apache.axiom.om.OMElement;
import org.apache.axiom.om.OMFactory;
import org.apache.axiom.om.OMNamespace;
import org.apache.axis2.AxisFault;
import org.apache.axis2.addressing.EndpointReference;
import org.apache.axis2.client.Options;
import org.apache.axis2.client.ServiceClient;
import org.apache.axis2.client.async.AxisCallback;
import org.apache.axis2.context.MessageContext;
import org.apache.axis2.Constants;
public class RequestManager {
private final String targetURL = "http://localhost:8080/axis2/services/StockQuoteService";

@Override
public String mainMethod() throws Exception {
try {
EndpointReference targetEPR = new EndpointReference(targetURL);
OMFactory fac = OMAbstractFactory.getOMFactory();
OMNamespace omNs = fac.createOMNamespace(
"http://www.spacebel.be/test", "test");
OMElement payload = fac.createOMElement("HelloWorld", omNs);
payload.setText("This is a Hello World Request");
Options options = new Options();
options.setTo(targetEPR);
options.setUseSeparateListener(true);
options.setTransportInProtocol(Constants.TRANSPORT_HTTP);
ServiceClient sender = new ServiceClient();
sender.engageModule("addressing");
sender.setOptions(options);
// Callback to handle the response
AxisCallback callback = new AxisCallback() {
@Override
public void onComplete() {
// TODO Auto-generated method stub
}

@Override
public void onError(Exception arg0) {
// TODO Auto-generated method stub
}

@Override
public void onFault(MessageContext arg0) {
// TODO Auto-generated method stub
}

@Override
public void onMessage(MessageContext arg0) {
// TODO Auto-generated method stub
System.out.println("Got a message");
}
};
// Non-Blocking Invocation
System.out.println("Send non blocking request:");
System.out.println(payload.toString());
System.out.println("--");
sender.sendReceiveNonBlocking(payload, callback);
// Wait till the callback receives the response.
while (true) {
Thread.sleep(1000);
}
} catch (AxisFault axisFault) {
axisFault.printStackTrace();
} catch (Exception ex) {
ex.printStackTrace();
}
return null;
}
}

Articles similaires

Les articles suivants abordent des thèmes communs.

Il n'y aucun article en relation avec ce sujet.

Commentaires

Partagez vos remarques.

Il n'y a pas de commentaires pour cet article.

Add a Comment

Fill in the form and submit.