微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

SOAP + Quarkus Reactive 响应:Quarkus 在使用 Mutiny 返回类型时是否支持 XML 解析?

如何解决SOAP + Quarkus Reactive 响应:Quarkus 在使用 Mutiny 返回类型时是否支持 XML 解析?

我不知道 Quarkus 是否支持 XML(反)序列化,而响应是反应类型(Uni/Multi)。我使用了 Spring Reactor,在 Reactor 中,响应应该始终是 Mono/Flux 以使整个管道从请求到客户端再到最终响应都不会阻塞。这是正确的方法吗?我只看到返回 int/String/List 的示例,从不响应 Uni/Multi。

我稍微修改了官方示例以检查这是可能的,但我没有得到正确的响应。

    @Inject
    private PrimeService primeService;

    @GET
    @Path("/{number}")
    @Timed
    @Produces(MediaType.APPLICATION_XML)
    public Uni<OutputDto> checkIfPrime(@PathParam long number) {
        return primeService.checkPrime(number);
    }

我的服务:

@ApplicationScoped
public class PrimeService {
    private long highestPrimeNumberSoFar = 2;

    Uni<OutputDto> checkPrime(long number) {
        return Uni.createFrom().item(number)
                .map(this::calculate)
                .map(message -> new OutputDto(message,LocalDate.Now()));
    }

    private String calculate(long number) {
        if (number < 1) {
            return "Only natural numbers can be prime numbers.";
        }
        if (number == 1) {
            return "1 is not prime.";
        }
        if (number == 2) {
            return "2 is prime.";
        }
        if (number % 2 == 0) {
            return number + " is not prime,it is divisible by 2.";
        }
        for (int i = 3; i < Math.floor(Math.sqrt(number)) + 1; i = i + 2) {
            if (number % i == 0) {
                return number + " is not prime,is divisible by " + i + ".";
            }
        }
        if (number > highestPrimeNumberSoFar) {
            highestPrimeNumberSoFar = number;
        }
        return number + " is prime.";
    }
}

当我像 curl -X GET http://localhost:8080/45646546546541 这样查询时,我看到:

Could not find MessageBodyWriter for response object of type: io.smallrye.mutiny.operators.uni.UniOnItemTransform of media type: application/xml;charset=UTF-8

我的依赖项中有 io.quarkus:quarkus-resteasy-jaxb

    <dependency>
      <groupId>io.quarkus</groupId>
      <artifactId>quarkus-resteasy-jaxb</artifactId>
      <version>1.13.7.Final</version>
    </dependency>

我想:

  • 通过配置属性配置 XML 解析器功能
  • 能够将 Uni/Multi 转换为 XML

解决方法

好吧,我只是发现除了quarkus-resteasy-jaxb之外,我还需要添加这个依赖项: <dependency> <groupId>io.quarkus</groupId> <artifactId>quarkus-resteasy-mutiny</artifactId> </dependency>

我在返回 Uni<OutputDto> 时看到 XML 响应。

所以 jaxb 进行序列化,resteasy-mutiny 进行转换。

不,根据文档,不推荐这样做。检查评论以查看正确的解决方案。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


Selenium Web驱动程序和Java。元素在(x,y)点处不可单击。其他元素将获得点击?
Python-如何使用点“。” 访问字典成员?
Java 字符串是不可变的。到底是什么意思?
Java中的“ final”关键字如何工作?(我仍然可以修改对象。)
“loop:”在Java代码中。这是什么,为什么要编译?
java.lang.ClassNotFoundException:sun.jdbc.odbc.JdbcOdbcDriver发生异常。为什么?
这是用Java进行XML解析的最佳库。
Java的PriorityQueue的内置迭代器不会以任何特定顺序遍历数据结构。为什么?
如何在Java中聆听按键时移动图像。
Java“Program to an interface”。这是什么意思?