Scala Akka流使用twitter4j流与NPE一起失败

Scala Akka流使用twitter4j流与NPE一起失败,scala,akka,akka-stream,reactive-streams,Scala,Akka,Akka Stream,Reactive Streams,我正在用Akka流和twitter4j流进行实验。有一个推特流,它工作得很好,直到它与NPE失败的那一刻,这对我来说没有意义 最初,我正在创建一个客户端: val client: TwitterStream = { using(TwitterClient.clientFactory.getInstance()) { inst => inst.setOAuthConsumer(auth.consumerKey, auth.consumerSecret) inst.setO

我正在用Akka流和twitter4j流进行实验。有一个推特流,它工作得很好,直到它与
NPE
失败的那一刻,这对我来说没有意义

最初,我正在创建一个
客户端

val client: TwitterStream = {
  using(TwitterClient.clientFactory.getInstance()) { inst =>
    inst.setOAuthConsumer(auth.consumerKey, auth.consumerSecret)
    inst.setOAuthAccessToken(new AccessToken(auth.accessTokenKey, auth.accessTokenSecret))
  }
}
最后,我希望得到具有以下签名的内容:
val-stream:Source[TwitterEvent,ShutdownHandler]
,因此我正在创建一个ReactiveStreams
Publisher
,它将使用从客户端出来的

val pub = new Publisher[TwitterEvent] {
  override def subscribe(s: Subscriber[_ >: TwitterEvent]): Unit = {
    client.addListener(new TwitterListener(s))
    client.filter(filter)
  }
}

val stream: Source[TwitterEvent, ShutdownHandler] = {
  Source.fromPublisher(pub).mapMaterializedValue { nu =>
    new TwitterClient.ShutdownHandler(() => client.shutdown())
  }
}
因此,
.filter()
引导这件事,我收到一些推文,然后它失败了:

[ERROR] [04/08/2016 15:18:19.301] [System-akka.actor.default-dispatcher-4] [akka://System/user/StreamSupervisor-0/flow-0-0-foreachSink-foreachSink-map] It is illegal to throw exceptions from request(), rule 3.16
akka.stream.impl.ReactiveStreamsCompliance$SignalThrewException: It is illegal to throw exceptions from request(), rule 3.16
    at akka.stream.impl.ReactiveStreamsCompliance$.tryRequest(ReactiveStreamsCompliance.scala:111)
...
Caused by: java.lang.NullPointerException
    at akka.stream.impl.ReactiveStreamsCompliance$.tryRequest(ReactiveStreamsCompliance.scala:110)
如果这很重要,我的TwitterListener:

final class TwitterListener(s: Subscriber[_ >: TwitterEvent]) extends StatusAdapter {
    override def onStatus(status: Status): Unit = {
      if (status != null) {
        val message = new TwitterEvent(status)
        s.onNext(message)
      }
    }

    override def onException(ex: Exception): Unit = {
      s.onError(ex)
    }
  }

您没有在发出任何其他信号之前向Subscribe发送信号,这违反了反应流规范。请阅读规范并使用TCK验证您的发布者。和