【问题标题】:XML based rest service in quarkusquarkus 中基于 XML 的休息服务
【发布时间】:2021-01-11 19:49:11
【问题描述】:

我需要将我的基于soap 的应用程序转换为基于rest 的quarkus 应用程序。

我需要一个 quarkus 休息服务来接受以下请求并生成响应。

请求:

<sum>
 <a>5</a>
 <b>5</b>
</sum> 

回应:

<result>10</result>

任何指针!!

【问题讨论】:

  • 我尝试使用 @Consumes(MediaType.APPLICATION_XML) @Produces(MediaType.APPLICATION_XML)quarkus-jaxb 依赖项创建 REST 资源,但我得到了 javax.ws.rs.NotSupportedException: HTTP 415 Unsupported Media Type。对我来说,看起来 Quarkus 不支持 REST 服务中的 XML。如果有办法让这个工作我也会感兴趣。对于客户端,我想我会使用 Vert.x Web 客户端并使用 JAXB 编组/解组 xml。

标签: java xml rest soap quarkus


【解决方案1】:

您需要在 pom.xml 文件中添加 quarkus-resteasy-jaxbquarkus-resteasy 依赖项:

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

然后创建一个简单的模型类,但记住@XmlRootElement注解:

package com.example;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Fruit {

    public Fruit() {
    }

    public Fruit(String name, String description) {
        this.name = name;
        this.description = description;
    }

    public String name;

    public String description;

}

然后通过 REST 服务公开模型:

package com.example.controller;

import com.example.Fruit;

import javax.ws.rs.GET;
import javax.ws.rs.Path;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import java.util.ArrayList;
import java.util.List;

@Path("/fruit")
public class FruitRestController {

    @GET
    @Produces(value = MediaType.APPLICATION_XML)
    public List<Fruit> getFruit() {
        List<Fruit> fruitList = new ArrayList<>();
        fruitList.add(new Fruit("Apple", "Crunchy fruit"));
        fruitList.add(new Fruit("Kiwi", "Delicious fruit"));

        return fruitList;
    }
}

现在,只要您设置 Accepts application/xml 标头,此 Quarkus 休息控制器将返回如下 XML 响应:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<collection>
  <fruit>
    <name>Apple</name>
    <description>Crunchy fruit</description>
  </fruit>
  <fruit>
    <name>Kiwi</name>
    <description>Delicious fruit</description>
  </fruit>
</collection>

【讨论】:

    【解决方案2】:

    添加这个:

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

    还有这个:

        <dependency>
          <groupId>io.quarkus</groupId>
          <artifactId>quarkus-resteasy-mutiny</artifactId>
        </dependency>
    

    它们将使您能够以 XML 形式返回 Uni。

    【讨论】:

      【解决方案3】:

      您可以简单地使用soap 库(例如Apache CXF)并解析XML。不会有特别的 Quarkus 集成,您可能很难生成原生图像。

      【讨论】:

      • 我不想要肥皂服务。我需要一个接受 XML 并使用 Jackson 将其解析为 jave 对象的休息服务。我在 springboot 中做到了,但 Jackson 不支持 quarkus。
      • Jackson 是 Quarkus 中的一个集成组件:quarkus.io/guides/rest-json#jackson
      • 我需要一个 quarkus rest 服务来接受以下请求并生成响应请求:5 5 响应:10
      • 问题已更新。我想了解如何接受 xml 请求并将其解析为 java 对象。
      猜你喜欢
      • 1970-01-01
      • 2016-01-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-08-21
      • 1970-01-01
      相关资源
      最近更新 更多