我正在为要在正文中的 DTO 接受的简单帖子定义以下端点。似乎仅在使用 un/marshall 语句时才有效。许多示例不使用 un/marshal 语句。
休息端点:
rest://post:saveIDto?inType=ContainerDefinitionDto.class&outType=ContainerDefinitionDto.class&type=ContainerDefinitionDto.class
*路线 - 直接失败:processRoute
.from("rest://post:saveIDto?inType=ContainerDefinitionDto.class&outType=ContainerDefinitionDto.class&type=ContainerDefinitionDto.class")
// need to insert below to work
//.unmarshal(new JacksonDataFormat(ContainerDefinitionDto.class))
.log("${body}")
.to("direct:processRoute")
// need to insert below to work
//.marshal(new JacksonDataFormat(ContainerDefinitionDto.class));");
错误:
org.apache.camel.CamelExecutionException: Exception occurred during execution on the exchange: Exchange[]
at org.apache.camel.CamelExecutionException.wrapCamelExecutionException(CamelExecutionException.java:45)
at org.apache.camel.support.builder.ExpressionBuilder$35.evaluate(ExpressionBuilder.java:1101)
at org.apache.camel.support.ExpressionAdapter.evaluate(ExpressionAdapter.java:45)
at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluateParameterBinding(MethodInfo.java:743)
at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluateParameterExpressions(MethodInfo.java:623)
at org.apache.camel.component.bean.MethodInfo$ParameterExpression.evaluate(MethodInfo.java:591)
at org.apache.camel.component.bean.MethodInfo.initializeArguments(MethodInfo.java:262)
at org.apache.camel.component.bean.MethodInfo.createMethodInvocation(MethodInfo.java:270)
at org.apache.camel.component.bean.BeanInfo.createInvocation(BeanInfo.java:279)
at org.apache.camel.component.bean.AbstractBeanProcessor.useMethodInvocation(AbstractBeanProcessor.java:102)
at org.apache.camel.component.bean.AbstractBeanProcessor.process(AbstractBeanProcessor.java:88)
at org.apache.camel.component.bean.BeanProcessor.process(BeanProcessor.java:81)
at org.apache.camel.component.bean.BeanProducer.process(BeanProducer.java:41)
at org.apache.camel.processor.SendProcessor.process(SendProcessor.java:172)
at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.handleFirst(RedeliveryErrorHandler.java:462)
at org.apache.camel.processor.errorhandler.RedeliveryErrorHandler$SimpleTask.run(RedeliveryErrorHandler.java:438)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.doRun(DefaultReactiveExecutor.java:199)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.executeReactiveWork(DefaultReactiveExecutor.java:189)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.tryExecuteReactiveWork(DefaultReactiveExecutor.java:166)
at org.apache.camel.impl.engine.DefaultReactiveExecutor$Worker.schedule(DefaultReactiveExecutor.java:148)
at org.apache.camel.impl.engine.DefaultReactiveExecutor.scheduleMain(DefaultReactiveExecutor.java:59)
at org.apache.camel.processor.Pipeline.process(Pipeline.java:163)
at org.apache.camel.impl.engine.CamelInternalProcessor.processNonTransacted(CamelInternalProcessor.java:354)
at org.apache.camel.impl.engine.CamelInternalProcessor.process(CamelInternalProcessor.java:330)
at org.apache.camel.impl.engine.DefaultAsyncProcessorAwaitManager.process(DefaultAsyncProcessorAwaitManager.java:81)
at org.apache.camel.support.AsyncProcessorSupport.process(AsyncProcessorSupport.java:32)
at org.apache.camel.component.undertow.UndertowConsumer.handleRequest(UndertowConsumer.java:214)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:393)
at io.undertow.server.HttpServerExchange$1.run(HttpServerExchange.java:859)
at org.jboss.threads.ContextHandler$1.runWith(ContextHandler.java:18)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2513)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1512)
at org.xnio.XnioWorker$WorkerThreadFactory$1$1.run(XnioWorker.java:1282)
at java.base/java.lang.Thread.run(Thread.java:833)
Caused by: org.apache.camel.InvalidPayloadException: No body available of type: au.com.cs.inventory.api.dto.ContainerDefinitionDto but has type: byte[] on: Message. Caused by: No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto. Exchange[]. Caused by: [org.apache.camel.NoTypeConversionAvailableException - No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto]
at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:128)
at org.apache.camel.support.builder.ExpressionBuilder$35.evaluate(ExpressionBuilder.java:1099)
... 32 more
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: byte[] to the required type: au.com.cs.inventory.api.dto.ContainerDefinitionDto
at org.apache.camel.impl.converter.CoreTypeConverterRegistry.mandatoryConvertTo(CoreTypeConverterRegistry.java:199)
at org.apache.camel.support.MessageSupport.getMandatoryBody(MessageSupport.java:126)
... 33 more