小编bmo*_*ney的帖子

你能为travis ci指定小的jdk版本吗?

是否可以为Travis上运行的作业指定JDK的次要版本?我有一个失败的JavaFX项目,因为JDK 1.8.0_31用于执行构建,因为项目使用了一些仅在Java 1.8.0_40(特别是Alert和Spinner)中提供的类.

目前我的.travis.yml文件如下所示:

language: java

jdk:
  - oraclejdk8
Run Code Online (Sandbox Code Playgroud)

这是一个失败的构建链接,以防它有用.

travis-ci javafx-8

16
推荐指数
2
解决办法
2153
查看次数

Quarkus ExceptionMapper 不处理 WebApplicationException

我试图了解这是一个功能还是一个错误...:-)

对于下面的控制器和异常映射器,对于将因 401 响应而失败的其余客户端,我希望在这两种情况下都会调用异常处理程序。但是,不会针对 WebApplicationException 调用它。为什么会这样以及您打算如何为这些情况注册异常处理程序。这是使用 Quarkus 版本 0.21.2

@Path("/failable")
public class FailableResource {

  @Inject
  @RestClient
  private SomeHttpClient httpClient;

  @GET
  @Path("fails")
  @Produces(MediaType.TEXT_PLAIN)
  public String fails() {
    try {
      return httpClient.someQuery();
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  @GET
  @Path("works")
  @Produces(MediaType.TEXT_PLAIN)
  public String works() {
    try {
      return httpClient.someQuery();
    } catch (Exception e) {
      e.printStackTrace();
      throw new IllegalStateException("Not a WebApplicationException");
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

和异常映射器

@Provider
public class HandleMySillyError implements ExceptionMapper<Throwable> {

  @Override
  public Response toResponse(Throwable e) {
    e.printStackTrace(); …
Run Code Online (Sandbox Code Playgroud)

jax-rs microprofile quarkus

7
推荐指数
1
解决办法
7732
查看次数

如何将具有动态值的lambda过滤器转换为方法引用

我有一些Java代码根据一些输入过滤列表.它目前使用lambda,例如:

public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
    List<ComplexObject> complexObjects = retrieveAllComplexObjects();
    return complexObjects
                .stream()
                .filter( compObject -> allowedTags.contains(compObject.getTag()))
                .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

我想要做的是将过滤器逻辑移动到另一种方法,使其可重复使用,并且易于单元测试.所以我想使用方法引用代替传递给filter方法的lambda.如果过滤器逻辑是相当静态的(即在编译时已知允许的标签列表),则很容易做到,但我无法弄清楚如何使用过滤器中的动态数据执行此操作.

我想要的是一些使用方法引用然后传递第二个动态参数的方法,即

public List<ComplexObject> retrieveObjectsFilteredByTags(List<String> allowedTags) {
    List<ComplexObject> complexObjects = retrieveAllComplexObjects();
    return complexObjects
                .stream()
                .filter(this::filterByAllowedTags, allowedTags)
                .collect(Collectors.toList());
}
Run Code Online (Sandbox Code Playgroud)

那么我可以做我想做的事情,还是我可能错误地接近这种情况?

java lambda java-8 java-stream method-reference

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

Akka Stream Source.queue的背压策略不起作用

我试图理解为什么下面的代码片段正在做它正在做的事情.我原本以为,因为Sink不能比Source生成内容更快地产生需求,所以我会得到丢弃的消息以响应一些提议(溢出策略设置为Drop Buffer)以及错误和队列关闭消息在自毁之后.

片段:

package playground

import java.time.LocalDateTime
import java.util.concurrent.atomic.AtomicInteger

import akka.actor.{Actor, ActorLogging, ActorSystem, Props}
import akka.stream.QueueOfferResult.{Dropped, Enqueued, Failure, QueueClosed}
import akka.stream._
import akka.stream.scaladsl.{Sink, Source}

import scala.concurrent.duration._

case object MessageToSink

object Playground extends App {

  implicit val actorSystem = ActorSystem("Playground")
  implicit val execCntxt = actorSystem.dispatcher

  val sinkActor = actorSystem.actorOf(Props[Actor2SinkFwder])
  actorSystem.scheduler.schedule(1 millisecond, 50 milliseconds, sinkActor, MessageToSink)

  println(s"Playground has started... ${LocalDateTime.now()}")
}

class Actor2SinkFwder extends Actor with ActorLogging {

  implicit val materializer = ActorMaterializer()
  implicit val execCtxt = context.dispatcher

  val flow = Source.queue[Int](bufferSize …
Run Code Online (Sandbox Code Playgroud)

scala akka reactive-streams akka-stream

2
推荐指数
1
解决办法
2044
查看次数