当前位置: 首页 > 知识库问答 >
问题:

Quarkus 1.5.2.final:quarkus-resteasy自动JAXB编组/解编组不起作用

沃学
2023-03-14
...
@POST
@Consumes(value = MediaType.APPLICATION_XML)
public Response createMoneyTransferOrder(MoneyTransfer moneyTransfer);
...
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MoneyTransfer",propOrder = {"sourceAccount", "targetAccount", "amount"})
public class MoneyTransfer 
{
  ...
}
2020-07-26 12:41:26,306 ERROR [org.apa.cam.pro.err.DefaultErrorHandler] (Camel (camel-1) thread #0 - file://src/main/resources/inbox) 
Failed delivery for (MessageId: 1F4B4F8FC3E51AB-0000000000000005 on ExchangeId: 1F4B4F8FC3E51AB-0000000000000005). Exhausted after delivery attempt: 1 caught: org.apache.camel.InvalidPayloadException: 
No body available of type: java.io.InputStream but has value: fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer@2bfa4bb4 of type: fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer on: money-xfer.xml. 
Caused by: No type converter available to convert from type: fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer to the required type: java.io.InputStream with value fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer@2bfa4bb4. Exchange[1F4B4F8FC3E51AB-0000000000000005]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - 
No type converter available to convert from type: fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer to the required type: java.io.InputStream with value fr.simplex_software.eip.money_transfer.jaxb.MoneyTransfer@2bfa4bb4]
...
restConfiguration().host("localhost:8081/api")
  .producerComponent("http").bindingMode(RestBindingMode.xml);
...
.to("http://localhost:8081/api?consumes=application/xml");

共有1个答案

万选
2023-03-14

我在回答我自己的问题。最后,由于某种原因,Camel“REST”endpoint似乎不支持从/到Java到/从XML的自动编组/解编组。因此,我需要替换以下路线:

...
restConfiguration().host("localhost:8081/api").producerComponent("http").bindingMode(RestBindingMode.xml);
...
.to("rest://post:api")

由:

...
//restConfiguration().host("localhost:8081/api").producerComponent("http").bindingMode(RestBindingMode.xml);
...
.bean("moneyTransferBean","sendMoney");

其中moneyTransferBean如下所示:

@Singleton
@Named("moneyTransferBean")
public class MoneyTransferBean
{
  @Inject
  @RestClient
  private MoneyTransferResource moneyTransferResource;
  ...
  public void sendMoney(MoneyTransfer moneyTransfer)
  {
    moneyTransferResource.createMoneyTransferOrder(moneyTransfer);
  }
  ...
}
 类似资料:
  • 问题内容: 我正在尝试创建一个非常简单的REST服务器。我只是有一个测试方法,它将返回字符串列表。这是代码: 它给出以下错误: 我希望JAXB对诸如String,Integer等简单类型具有默认设置。我想不是。这是我的想象: 使这种方法最简单的方法是什么? 问题答案: 我使用@LiorH的示例并将其扩展为: 注意,它使用泛型,因此您可以将其与String之外的其他类一起使用。现在,应用程序代码很简

  • 问题内容: 我正在尝试与JAXB进行封送处理。 我的输出就像 但是我需要像这样的输出 我正在使用以下代码来执行此操作。如果我取消注释代码,则会出现属性绑定异常。没有它,我可以编译,但无法获得所需的确切输出。 和我的豆lo 转接器类别 问题答案: 您可以执行以下操作: 适配器CDATA 根 该注释用于指定的应该被使用。 演示版 我必须包装一个以获得所需的效果。另请注意,设置方法意味着它负责该操作的所

  • ..循环引用解决方案来自这里:JAXB注释-如何使XmlIDRef元素列表具有id值作为属性而不是元素正文? 下面是我的解决方案: 这是需要(un)编组的类: 我还在其中添加了一些调试行:在ConnectionAdapter中,在unmarshal()方法中,它表示:“unmarshal:1”for the first room。在RoomModel中,在afterUnmarshal()处,它表示

  • 问题内容: 我遵循此经常引用的博客文章中有关使用xsi:type的说明: http://blog.bdoughan.com/2010/11/jaxb-and-inheritance-using- xsitype.html 基本上我有这个: 而这个测试: 我得到这个结果: 我已经尝试了JAXB的默认实现jaxb- impl-2.1.2,并基于此bug尝试了jaxb- impl-2.2.6-b38.j

  • 问题内容: 我在使用Marshaller.JAXB_FRAGMENT属性成功编组时遇到了一些麻烦。这是我尝试输出的XML的简单版本。 的和元件基本上围住了大量的只是容器元素&元件。我目前正在尝试在马歇尔(Marshall)上编组。 是否有可能先将and 元素编组,然后再将其编组到element 上,然后将输出包含在标记中? 当我在WorkSet级别进行封送处理时,它将属性附加到WorkSet标记中

  • 问题内容: 我正在构建一系列链接的类,我希望它们的实例能够编组到XML,以便可以将它们保存到文件中并在以后再次读取。 目前,我正在使用以下代码作为测试用例: XML输出为: 元素为空是否有原因?我希望它包含日期(即)的字符串表示形式。为此,我是否需要编写自己的代码? 输出为: 问题答案: 您将必须创建一个这样的: 并使用 另请参阅是否要在程序包级别定义适配器。