爲了編組JAXB類與Apache駱駝的JAXB類需要包括XmlRootElement將註釋。編組JAXB生成的類不XmlRootElement將與Apache駱駝
當從XSD生成JAXB類可能不會生成XmlRootElement將註釋。
編組 期間這將導致異常「沒有可用的類型轉換器從類型轉換:」
當我手動添加@XmlRootElement,一切工作正常,但由於產生這些JAXB類,手動添加anototation是沒有選擇的。
根據這樣的情況下,駱駝文檔中,JaxbDataFormat可以設置爲「fragement(真)
JaxbDataFormat jaxbMarshal = new JaxbDataFormat();
jaxbMarshal.setContextPath(ObjectFactory.class.getPackage().getName());
jaxbMarshal.setFragment(true);
不幸的是我仍然得到同樣的異常。
是否有配置JaxbDataFormat不同,即定義的JAXBElement這是根元素,像我這一點在Java
marshaller.marshal(new JAXBElement(new QName("uri","local"),
MessageType.class, messageType));
做或有另一種策略可用來獲取XML編組的方法嗎?
編輯 的使用過的路線:
from("file://inbox").unmarshal(jaxbDataFormat)
.marshal(jaxbDataFormat).to("file://outbox");
堆棧跟蹤:
產生java.io.IOException:org.apache.camel.NoTypeConversionAvailableException:沒有類型轉換器 可從類型轉換: com.xyz.AddressType爲所需的 類型:java.io.InputStream,值爲[email protected],在 org.apache.camel.converter.jaxb.JaxbDataFormat.marshal(JaxbDataFormat.java:148) 〜[camel-jaxb-2.16.0.jar:2.16.0] at org.apache.camel.processor.MarshalProcessor.process(MarshalProcessor.java:83) 〜[camel-core-2.16.0.jar: 2.16.0]在
...
[NA:1.8.0_25]在java.lang.Thread.run(Thread.java:745)[NA:ORG:1.8.0_25] 致.apache.camel.NoTypeConversionAvailableException:否 類型轉換器可用於從類型com.xyz.AddressType轉換爲 所需的類型:java.io.InputStream,值爲 [email protected] at org.apache.camel .impl.converter.BaseTypeConverterRegistry.mandato ryConvertTo(BaseTypeConverterRegistry.java:185) 〜[駱駝核心2.16.0.jar:2.16.0]在
...
「沒有類型轉換器可用..」不是從DataFormat拋出,而是從TypeConverter拋出。你能顯示你正在使用的路線嗎? –
那真正的錯誤和堆棧跟蹤呢? –
您是否添加了指向您的jaxb類的jaxb.index文件? –