Je vise à avoir un client bayeux à l'écoute du serveur pour les messages. Cependant, j'ai encore du mal à faire la connexion avec le serveur du client Bayeux. Le serveur nécessite des informations d'identification de connexion. Mais j'ai trouvé de nombreux exemples sans aucun détail de connexion. En utilisant quelques exemples, j'ai trouvé que l'objet client bayeux avait besoin de l'objet LongPollingTransport. qui contient un httpclient. Cependant, je veux faire d'abord une poignée de main afin que je sache que la connexion fonctionne alors je devrais commencer à écouter le serveur sur le canal/test/temp. L'URL du serveur est (url = "https://manse.abcd.fi";) et le client définition donnée ci-dessous.Mais puisque l'URL http Bayuex nécessite une connexion. Comment puis-je passer le login (utilisateur et mot de passe) pour établir la connexion. Je pense qu'il devrait être donné quelque part dans la classe LongPollingTransport. Jusqu'à présent, j'ai échoué à se connecter.Comment passer les informations de connexion du serveur dans bayuexclient?
import org.cometd.bayeux.Channel;
import org.cometd.bayeux.Message;
import org.cometd.bayeux.client.ClientSessionChannel;
import org.cometd.bayeux.client.ClientSessionChannel.MessageListener;
import org.cometd.client.BayeuxClient;
import org.cometd.client.transport.ClientTransport;
import org.cometd.client.transport.LongPollingTransport;
import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class Test {
public static void main(String[] args) {
HttpClient httpClient = new HttpClient();
// LongPollingTransport transport = new LongPollingTransport(options, httpClient);
String url = "https://manse.soneraiox.fi";
//LongPollingTransport transport = new LongPollingTransport(url, null, httpClient);
// String url = "https://manse.soneraiox.fi";
BayeuxClient client = new BayeuxClient(url, LongPollingTransport.create(null));
//System.out.println(client.isHandshook);
// Handshake
client.handshake();
Boolean a=client.isHandshook();
System.out.println(a);
System.out.println(client.isConnected());
Ce code donne toujours faux. Je ne suis toujours pas sûr si le LongPollingTransport.create (null) fonctionne ou pas. J'ai utilisé le même espace de noms que vous avez suggéré. Est-ce que c'est ok?
import org.cometd.bayeux.Channel;
import org.cometd.bayeux.Message;
import org.cometd.bayeux.client.ClientSessionChannel;
import org.cometd.bayeux.client.ClientSessionChannel.MessageListener;
import org.cometd.client.BayeuxClient;
import org.cometd.client.transport.ClientTransport;
import org.cometd.client.transport.LongPollingTransport;
import org.eclipse.jetty.client.ContentExchange;
import org.eclipse.jetty.client.HttpClient;
import java.net.MalformedURLException;
import java.net.URL;
import java.util.HashMap;
import java.util.Map;
public class Stest {
public static void main(String[] args) {
HttpClient httpClient = new HttpClient();
// LongPollingTransport transport = new LongPollingTransport(options, httpClient);
String url = "https://manse.soneraiox.fi";
//LongPollingTransport transport = new LongPollingTransport(url, null, httpClient);
// String url = "https://manse.soneraiox.fi";
BayeuxClient client = new BayeuxClient(url, LongPollingTransport.create(null));
//System.out.println(client.isHandshook);
// Handshake
Map<String, Object> extra = new HashMap<>();
Map<String, Object> ext = new HashMap<>();
extra.put(Message.EXT_FIELD, ext);
Map<String, Object> authn = new HashMap<>();
ext.put("com.acme.authn", authn);
authn.put("username", "[email protected]");
authn.put("password", "xxxxx");
client.handshake(extra);
//client.handshake();
Boolean a=client.isHandshook();
System.out.println(a);
System.out.println(client.isConnected());
}
}
Sbordet, j'ai essayé comme vous l'avez suggéré. Mais la poignée de main n'a pas fonctionné. Pouvez-vous me dire si j'ai utilisé correctement l'espace de noms et la classe LongPollingTransport? –
Quelle version de CometD utilisez-vous? 'LongPollingTransport.create()' n'existe pas dans CometD 3.x. Stick avec CometD 3.1.x. Vous ne pouvez pas imprimer pour consolider l'état de 'BayeuxClient' juste après avoir appelé' handshake() 'car l'établissement de la liaison est une opération asynchrone. Veuillez lire la [documentation] (https://docs.cometd.org/current/reference/#_java_client_handshake). Une fois que vous avez correctement transmis les informations d'identification au serveur, vous devez les valider comme expliqué dans la [documentation d'authentification] (https://docs.cometd.org/current/reference/#_java_server_authentication). – sbordet
http://stackoverflow.com/questions/41830883/how-the-java-client-in-cumulosity-listens-to-events –