我正在通过Java将JAXB对象发送到Rabbit MQ。
JAXBContext jaxbContext = JAXBContext.newInstance(MyDTO.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
// output pretty printed
jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true);
java.io.StringWriter sw = new StringWriter();
jaxbMarshaller.marshal(deliveryrequest, sw);
ConnectionFactory factory = new ConnectionFactory() ;
//TODO change the hardcoding to the properties file
factory.setHost("rabbitmq.host.net");
factory.setUsername("user");
factory.setPassword("pass");
Channel channel ;
Connection connection;
Map<String, Object> args = new HashMap<String, Object>();
String haPolicyValue = "all";
args.put("x-ha-policy", haPolicyValue);
connection = factory.newConnection();
channel = connection.createChannel();
//TODO change the hardcoding to the properties file
channel.queueDeclare("upload.com.some.queue", true, false, false, args);
//TODO change the hardcoding to the properties file
channel.basicPublish("com.some.exchange", "someroutingKey",
new AMQP.BasicProperties.Builder().contentType("text/plain")
.deliveryMode(2).priority(1).userId("guest").build(),
sw.toString().getBytes());
我在不同的应用程序中使用Camel来阅读此内容。
<camel:route id="myRoute">
<camel:from uri="RabbitMQEndpoint" />
<camel:to uri="bean:MyHandler" />
</camel:route>
处理程序正在使用在camel端重做的Jaxb对象
@Handler
public void handleRequest(MyDTO dto) throws ParseException {
我得到了我没有想到会得到的错误。
Caused by: org.apache.camel.NoTypeConversionAvailableException: No type converter available to convert from type: byte[] to the required type: com.mycompany.MyDTO with value [B@1b8d3e42
at org.apache.camel.impl.converter.BaseTypeConverterRegistry.mandatoryConvertTo(BaseTypeConverterRegistry.java:181)
at org.apache.camel.impl.MessageSupport.getMandatoryBody(MessageSupport.java:99)
解表示赞赏。
3条答案
按热度按时间ebdffaop1#
您来自rabbit的消息正文类型是byte[],而您要调用MyDTO类型的bean。您的类型不匹配。Camel找不到可以将消息正文从byte[]转换为MyDTO类型的类型转换器。
来自Rabbit的byte[]数据是XML格式的吗?MyDTO类上是否有JAXB注解,以便可以使用JAXB将其从xml编组到Java?
iqxoj9l92#
这是Jaxb对象。我的印象是,如果我移动出版商太 Camel 。事情会得到解决。
我将发布者更改为以下版本。
在我调用方法中
我的 Camel 路线很简单
我添加了将Jaxb对象转换为字符串的处理程序(由于错误)
还是同样的错误
我的接收 Camel 路线如下
我补充道
它给了我一个错误,它不能将它从字符串转换为对象
添加此
这个问题的答案是你的mashaller必须是类路径的一部分
-------您也可以使用dataformat自订封送处理器
请确保将jaxb.index文件保存在com.something包中,并使用根级别的Jaxb对象名称
von4xj4u3#
使用带 Spring Boot 的Camel Rest