【问题标题】:scalaxb: ConnectException: Worker has already been shutdownscalaxb: ConnectException: Worker 已经被关闭
【发布时间】:2014-07-20 23:47:39
【问题描述】:

在将我的 Scala SOAP 客户端代码更新到最新的 scalaxb (1.2.1) 并切换到功能(而不是 Eithers)后,我在制作简单的 SOAP 时收到了 ConnectException: Worker has already been shutdown请求:

val service = (new aw.ServicesSOAPBindings with Soap11ClientsAsync with scalaxb.DispatchHttpClientsAsync {}).service

// list providers
service.listProviders(4) onComplete { 
  case Success(respond) => 
    println(s"Respond: code ${respond.ErrorCode}, messsage: ${respond.ErrorMessage}, Providers: ${respond.Providers.size}")
    if (!respond.Providers.isEmpty)
      listKnownProviders(respond.Providers)

  case Failure(failure) => println("Failure I : " + failure.printStackTrace())
}

我是否缺少任何 Netty/Dispatch 配置步骤?

这是堆栈跟踪:

java.util.concurrent.ExecutionException: java.net.ConnectException: Worker 已经关闭到 https://service.xxxxxxx.com/wsdl/v4/ 在 com.ning.http.client.providers.netty.NettyResponseFuture.abort(NettyResponseFuture.java:342) 在 com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:107) 在 org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) 在 org.jboss.netty.channel.DefaultChannelFuture.addListener(DefaultChannelFuture.java:145) 在 com.ning.http.client.providers.netty.NettyAsyncHttpProvider.doConnect(NettyAsyncHttpProvider.java:1136) 在 com.ning.http.client.providers.netty.NettyAsyncHttpProvider.execute(NettyAsyncHttpProvider.java:937) 在 com.ning.http.client.providers.netty.NettyAsyncHttpProvider.nextRequest(NettyAsyncHttpProvider.java:1397) 在 com.ning.http.client.providers.netty.NettyAsyncHttpProvider.nextRequest(NettyAsyncHttpProvider.java:1393) 在 com.ning.http.client.providers.netty.NettyAsyncHttpProvider.remotelyClosed(NettyAsyncHttpProvider.java:1514) 在 com.ning.http.client.providers.netty.NettyConnectListener.operationComplete(NettyConnectListener.java:95) 在 org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) 在 org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:418) 在 org.jboss.netty.channel.DefaultChannelFuture.setFailure(DefaultChannelFuture.java:380) 在 org.jboss.netty.channel.socket.nio.NioClientSocketPipelineSink$1.operationComplete(NioClientSocketPipelineSink.java:115) 在 org.jboss.netty.channel.DefaultChannelFuture.notifyListener(DefaultChannelFuture.java:427) 在 org.jboss.netty.channel.DefaultChannelFuture.notifyListeners(DefaultChannelFuture.java:413) 在 org.jboss.netty.channel.DefaultChannelFuture.setSuccess(DefaultChannelFuture.java:362) 在 org.jboss.netty.channel.AbstractChannel$ChannelCloseFuture.setClosed(AbstractChannel.java:355) 在 org.jboss.netty.channel.AbstractChannel.setClosed(AbstractChannel.java:185) 在 org.jboss.netty.channel.socket.nio.AbstractNioChannel.setClosed(AbstractNioChannel.java:197) 在 org.jboss.netty.channel.socket.nio.NioSocketChannel.setClosed(NioSocketChannel.java:84) 在 org.jboss.netty.channel.socket.nio.AbstractNioWorker.close(AbstractNioWorker.java:356) 在 org.jboss.netty.channel.socket.nio.NioClientBoss.close(NioClientBoss.java:167) 在 org.jboss.netty.channel.socket.nio.AbstractNioSelector.run(AbstractNioSelector.java:306) 在 org.jboss.netty.channel.socket.nio.NioClientBoss.run(NioClientBoss.java:42) 在 org.jboss.netty.util.ThreadRenamingRunnable.run(ThreadRenamingRunnable.java:108) 在 org.jboss.netty.util.internal.DeadLockProofWorker$1.run(DeadLockProofWorker.java:42) 在 java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:895) 在 java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:918) 在 java.lang.Thread.run(Thread.java:695)

提前感谢任何提示。

【问题讨论】:

    标签: soap netty scalaxb


    【解决方案1】:

    在学习和更多地使用 Scala 并发之后,我能够回答我自己的问题:

    service.listProviders(4) 返回Future。这里的根本问题是程序在未来完成之前终止。 onComplete 只是注册回调的一种很酷的方式,并且不会阻止任何内容。为了让一个简单的例子(如这个)起作用,我应该阻止程序终止,直到未来完成。有些是这样的:

    val futureList = service.listProviders(4) 
    futureList onComplete {
       ...
    }
    
    Await.ready(futureList, 15 minutes)
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2013-04-26
      • 1970-01-01
      • 2021-11-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-06-26
      相关资源
      最近更新 更多