Quarkus 1.5.2.Final:Quarkus resteasy自动JAXB编组/解编不';行不通

Quarkus 1.5.2.Final:Quarkus resteasy自动JAXB编组/解编不';行不通,rest,jaxb,apache-camel,jax-rs,quarkus,Rest,Jaxb,Apache Camel,Jax Rs,Quarkus,我有一个Quarkus micro服务,它公开了一个REST接口,其端点如下所示: ... @POST @Consumes(value = MediaType.APPLICATION_XML) public Response createMoneyTransferOrder(MoneyTransfer moneyTransfer); ... @Singleton @Named("moneyTransferBean") public class MoneyTransferBe

我有一个Quarkus micro服务,它公开了一个REST接口,其端点如下所示:

...
@POST
@Consumes(value = MediaType.APPLICATION_XML)
public Response createMoneyTransferOrder(MoneyTransfer moneyTransfer);
...
@Singleton
@Named("moneyTransferBean")
public class MoneyTransferBean
{
  @Inject
  @RestClient
  private MoneyTransferResource moneyTransferResource;
  ...
  public void sendMoney(MoneyTransfer moneyTransfer)
  {
    moneyTransferResource.createMoneyTransferOrder(moneyTransfer);
  }
  ...
}
MoneyTransfer是一个JAXB对象:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "MoneyTransfer",propOrder = {"sourceAccount", "targetAccount", "amount"})
public class MoneyTransfer 
{
  ...
}
使用有效的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]
似乎发生的情况是,quarkus resteasy无法按照thge JAX-RS规范的要求将MoneyTransfer对象封送/解封到XML,并且需要一个定制的转换器。然而,JAX-RS规范(quarkus resteasy是其实现)明确要求自动编组/解编以@XmlType注释的类,就像我的例子一样

有人知道这里可能有什么问题吗?我想提及的是,这种自动编组/解编自JBoss/Wildfly/Thorntail上的RESTeasy以来一直有效。最后但并非最不重要的一点是,REST服务调用是由Camel 3.3.0(quarkus Camel REST)进行的,如果这个细节有任何区别的话。代码如下:

...
restConfiguration().host("localhost:8081/api")
  .producerComponent("http").bindingMode(RestBindingMode.xml);
...
.to("http://localhost:8081/api?consumes=application/xml");
亲切问候,,
西摩

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

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

其中,moneyTransferBean如下所示:

...
@POST
@Consumes(value = MediaType.APPLICATION_XML)
public Response createMoneyTransferOrder(MoneyTransfer moneyTransfer);
...
@Singleton
@Named("moneyTransferBean")
public class MoneyTransferBean
{
  @Inject
  @RestClient
  private MoneyTransferResource moneyTransferResource;
  ...
  public void sendMoney(MoneyTransfer moneyTransfer)
  {
    moneyTransferResource.createMoneyTransferOrder(moneyTransfer);
  }
  ...
}
这样,它就如预期的那样工作了。然而,我非常失望,因为我无法使用驼峰端点,不得不求助于这种黑客:-(

亲切问候,,
Seymour

您确定错误是由RestEasy引发的吗?似乎Camel正在引发此错误。您是否也添加了Camel jaxb依赖项?当然,我有Camel quarkus jaxb。当Camel尝试执行端点到(“rest://...骆驼“休息”组件应该只调用javax.ws.rs.client,它应该执行所需的自动转换。那么,与resteasy相反,quarkus resteasy是否可能不支持javax.ws.rs.client?