无法在cometd频道发布

时间:2012-12-06 13:57:54

标签: server-push cometd

当我尝试在频道中发布字符串时,我收到此错误:

java.lang.AbstractMethodError: org.cometd.client.BayeuxClient$BayeuxClientChannel.publish(Ljava/lang/Object;)V

这是尝试发布的代码:

public class EnviadorMensagem implements Runnable {

private String nomeCanal;
private Mensagem mensagem;
private ClientSession cliente;
private boolean pausado = true;
private boolean cancelado = false;

@Override
public void run() {
    while (pausado) {
        pausar();
    }
    if (!cancelado) {
        converterEEnviar();
    }
}

private void pausar() {
    synchronized (this) {
        try {
            this.wait();
        } catch (InterruptedException e) {
            e.printStackTrace();
        }
    }
}

private void converterEEnviar() {
    ConversorMensagem conversor = new ConversorMensagem();
    ClientSessionChannel canal = cliente.getChannel(nomeCanal);
    canal.publish(conversor.converter(mensagem)); //<- the error happens here!!
}

public void ativar() {
    synchronized (this) {
        pausado = false;
        this.notifyAll();
    }
}

public void cancelar() {
    synchronized (this) {
        cancelado = true;
    }
    ativar();
}

public void setNomeCanal(String nomeCanal) {
    this.nomeCanal = nomeCanal;
}

public void setMensagem(Mensagem mensagem) {
    this.mensagem = mensagem;
}

public void setCliente(ClientSession cliente) {
    this.cliente = cliente;
}
}

如您所见,此类在单独的线程中运行。 这是我的pom.xml的一部分:

<dependencies>
    <dependency>
        <groupId>org.cometd.java</groupId>
        <artifactId>cometd-java-client</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.cometd.java</groupId>
        <artifactId>bayeux-api</artifactId>
        <version>2.5.1</version>
    </dependency>
    <dependency>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-client</artifactId>
        <version>8.1.7.v20120910</version>
    </dependency>
</dependencies>

有人知道如何解决它?

1 个答案:

答案 0 :(得分:1)

当您针对某个版本的库编译代码时,您获得AbstractMethodError,但在运行时,您使用的是另一个,没有该方法,或者使用不同的签名。

仔细检查您的类路径以及您正在使用的CometD库版本。