小编Ale*_*dar的帖子

JAX WS客户端无法进行身份验证

我正在尝试使用标准JAVA 7 JAX WS工具来使用安全(HTTPS模式)Web服务.此Web服务需要身份验证.

我已经成功将证书添加到我的本地java密钥库.我借助wsimport工具从WSDL文件生成所有需要的类.

现在我尝试使用以下调用来运行一个简单的测试:

public class ReportingWebServiceTest {
    static ReportingServiceService service;
    static ReportingService port;

    @BeforeClass
    public static void setUpBeforeClass(){
        service = new ReportingServiceService();
        port = service.getReportingServicePort();
        Map<String, Object> rContext = ((BindingProvider) port).getRequestContext();
        Map<String, List<String>> headers = new HashMap<String, List<String>>();
        headers.put("Authorization", Collections.singletonList("Basic YWRtaW5AYWRhcHRsb2dpYy5jb206MTIxMjE****="));

//      headers.put("Username", Collections.singletonList("*****@******.com"));
//      headers.put("Password", Collections.singletonList("********"));
        rContext.put(MessageContext.HTTP_REQUEST_HEADERS, headers);
//      rContext.put(BindingProvider.USERNAME_PROPERTY, "*****@******.com");
//      rContext.put(BindingProvider.PASSWORD_PROPERTY, "********");
    }   

    @Test
    public void test() {
        WEBCAMPAIGNROW row = port.getCampaignRowById(14081);
        toConsole(row.toString());
    }

    protected static void toConsole(String msg) {
        System.out.println(msg);
    } …
Run Code Online (Sandbox Code Playgroud)

java authentication web-services jax-ws webservice-client

10
推荐指数
2
解决办法
3万
查看次数

MongoDB scala驱动程序:使用Observer回调时返回Future的最佳方法是什么?

我正在使用Scala驱动程序在Play Framework和MongoDB上编写一个简单的博客.所以它有效,我很高兴,但感觉我的代码不够好.你们可以回顾下面的片段,这是我的mongo服务方法之一,并告诉我是否有办法让它更干净:

def findByTitle(title:String)(implicit ec:ExecutionContext):Future[Option[Document]] = {
    val collection = db.getCollection("items")
    val results = collection.find(equal("title", title))
    val contentPromise: Promise[Option[Document]] = Promise()
    results.subscribe(new Observer[scala.Document] {
      var empty: Boolean = true
      override def onError(e: Throwable): Unit = println("Error")

      override def onComplete(): Unit = {
        if (empty) contentPromise.success(None)
      }

      override def onNext(result: scala.Document): Unit = {
        empty = false
        contentPromise.success(Some(result))
      }
    })
    contentPromise.future
  }
Run Code Online (Sandbox Code Playgroud)

我决定回来,Future[Option[Document]]因为有可能没有提供标题.只要使用的唯一方法Observable是通过Observer回调,我需要声明a Promise然后在onComplete()回调中履行该承诺.为了处理这种情况时,有提供名称,没有文件我有比这个声明没有其他选择var empty: Boolean = true的变量,然后用它onNext()和 …

scala mongodb playframework

10
推荐指数
1
解决办法
2170
查看次数

Play框架:如何使用标准会话API监控活动会话数?

在Play框架中,有一个API用于创建会话,将一些数据放入会话并丢弃会话.但我还想了解一些事情,比如我的安装当前有多少活动会话,卷中有多少数据绑定到它们等等.有没有办法解决这个问题?

scala playframework

6
推荐指数
1
解决办法
445
查看次数

Future.traverse似乎按顺序工作而不是并行工作.这是真的?

我的问题很简单,关于Future.traverse方法.所以我有一个String-s列表.每个字符串都是网页的URL.然后我有一个类可以获取URL,加载网页并解析一些数据.所有这些都包含在Future {}中,因此结果将异步处理.

该类简化如下:

class RatingRetriever(context:ExecutionContext) {
  def resolveFilmToRating(url:String):Future[Option[Double]]={
    Future{
      //here it creates Selenium web driver, loads the url and parses it.
    }(context)
  }
}
Run Code Online (Sandbox Code Playgroud)

然后在另一个对象中我有这个:

    implicit val executionContext = ExecutionContext.fromExecutor(Executors.newFixedThreadPool(2))
    .......
    val links:List[String] = films.map(film => film.asInstanceOf[WebElement].getAttribute("href"))
    val ratings: Future[List[Option[Double]]] = Future.traverse(links)(link => new RatingRetriever(executionContext).resolveFilmToRating(link))
Run Code Online (Sandbox Code Playgroud)

当它工作时我绝对可以看到它按顺序进行收集.如果我将执行上下文从固定大小池更改为单线程池,则行为是相同的.所以我真的很想知道如何让Future.traverse并行工作.你能建议吗?

scala

5
推荐指数
2
解决办法
6254
查看次数

ScalaTest:如何正确断言 Try 值?

在如果我需要测试的值的时刻vTry[T]类型是Success(t)我喜欢: v.isSuccess shouldBe true 我不知道是否有可能是一些更好的方法。例如,因为Option[T]我们可以断言: t shouldBe defined 可能有这样的东西,Try[T]但我不知道,搜索网络也无济于事。

scalatest

5
推荐指数
1
解决办法
1501
查看次数

在关联对象定义中使用extends关键字

我正在阅读Odersky和Spoon的这篇文章.所以这里有一个代码清单,从这篇文章有一个特殊的方面:

import scala.collection.mutable.{Builder, MapBuilder}
import scala.collection.generic.CanBuildFrom

object PrefixMap extends {
  def empty[T] = new PrefixMap[T]

  def apply[T](kvs: (String, T)*): PrefixMap[T] = {
    val m: PrefixMap[T] = empty
    for (kv <- kvs) m += kv
    m
  }

  def newBuilder[T]: Builder[(String, T), PrefixMap[T]] = 
    new MapBuilder[String, T, PrefixMap[T]](empty)

  implicit def canBuildFrom[T]
    : CanBuildFrom[PrefixMap[_], (String, T), PrefixMap[T]] = 
      new CanBuildFrom[PrefixMap[_], (String, T), PrefixMap[T]] {
        def apply(from: PrefixMap[_]) = newBuilder[T]
        def apply() = newBuilder[T]
      }
}
Run Code Online (Sandbox Code Playgroud)

为什么他们声明伴侣对象object PrefixMap extends {...}而不仅仅是简单 …

scala

5
推荐指数
0
解决办法
54
查看次数

有没有办法知道特定程序运行最大达到的 JVM 调用堆栈深度?

我今天一直在编写一个递归函数,递归深度取决于输入长度。

我想从纯兴趣的角度来看,是否有某种方法可以监视特定程序执行期间的最大调用堆栈深度,可能是在某些 JVM 日志或其他地方?

经过一番思考,我可以想象出一种分析方法来近似计算,但这将非常耗时,并且需要对 JVM 内部结构和字节码有很好的了解。

JVM 允许配置堆栈大小内存的限制,但我从未见过有关如何获得实际达到的限制的任何信息,而不是内存大小单位,而是分配的堆栈帧数。

java jvm

5
推荐指数
1
解决办法
255
查看次数

当用作隐式方法参数值时,隐式值也可以是一个惰性值吗?

我有一个测试套件,它使用Slick进行数据库访问.此套件中的某些测试访问数据库而某些测试不访问.我的套房有

implicit val db = DB.getDB

DataBaseDef在套件执行开始时有效地初始化.然后,此值将用作某些方法的隐式参数值.它还具有在套件执行结束时afterAll()关闭的功能db:

override def afterAll():Unit={
    db.close()
    super.afterAll()
  }
Run Code Online (Sandbox Code Playgroud)

现在,如果我改为: implicit lazy val db = DB.getDB 那究竟会发生什么?

如果我只运行一个不使用DB的测试,那么连接将不会被初始化,并且afterAll()它仍会尝试关闭连接,在这种情况下我有问题,对吧?我试图运行,但没有发生错误,没有抛出异常......

我对implicits的了解不足以帮助我理解它与懒惰相结合.

scala

4
推荐指数
1
解决办法
351
查看次数

SBT 中的 Def.task 和 .taskValue 是什么?

我读SBT文档相当彻底,现在并没有一个简短提及Def.tasktaskValue但至今没有任何解释。他们在这里说:

You can compute values of some tasks or settings to define or append a value for another task. 
It’s done by using Def.task and taskValue as an argument to :=, +=, or ++=. 
Run Code Online (Sandbox Code Playgroud)

并提供以下代码片段:

sourceGenerators in Compile += Def.task {
  myGenerator(baseDirectory.value, (managedClasspath in Compile).value)
}.taskValue
Run Code Online (Sandbox Code Playgroud)

这给我带来的问题多于答案。这与某些 SBT 任务对另一个任务的常规依赖有何不同?我应该什么时候使用这个宏?等等。

我也试过检查 scaladoc 但实际上没有任何成功。那部分代码没有很好地记录。

sbt

3
推荐指数
1
解决办法
577
查看次数

不完全理解Source.delay方法或akka-stream docs中有错误

我正在阅读有关KillSwitch 的akka-stream 文档,他们有一个示例来说明该KillSwitch.shutdown方法:

val countingSrc = Source(Stream.from(1)).delay(1.second, DelayOverflowStrategy.backpressure)
val lastSnk = Sink.last[Int]

val (killSwitch, last) = countingSrc
  .viaMat(KillSwitches.single)(Keep.right)
  .toMat(lastSnk)(Keep.both)
  .run()

doSomethingElse()

killSwitch.shutdown()

Await.result(last, 1.second) shouldBe 2
Run Code Online (Sandbox Code Playgroud)

我在理解为什么预期结果应该是 2 时遇到问题。正如我看到的这个例子,流被延迟了 1 秒。当它暂停时shutdown()被调用,因此终止开关告诉流在延迟完成之前关闭。我不明白为什么流的前 2 个元素会被发射并传送到接收器。

你能帮忙解释一下吗?

注意:如果我运行这个例子,我会得到我预期的以下异常:

Exception in thread "main" java.util.NoSuchElementException: last of empty stream
    at akka.stream.scaladsl.Sink$.$anonfun$last$3(Sink.scala:181)
Run Code Online (Sandbox Code Playgroud)

scala akka-stream

3
推荐指数
1
解决办法
982
查看次数