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

使用Apache camel封送没有XmlRootElement的JAXB生成的类

谷梁弘深
2023-03-14

根据Camel文档,在这种情况下,可以将JaxbDataFormat设置为'fragement(true)

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 ));
 from("file://inbox").unmarshal(jaxbDataFormat)
.marshal(jaxbDataFormat).to("file://outbox");

[NA:1.8.0_25]在java.lang.thread.run(thread.java:745)[NA:1.8.0_25]原因:org.apache.camel.notypeConversionAvailable异常:没有类型转换器可用于从类型:com.xyz.addressType转换为所需类型:java.io.InputStream(值为com.xyz.addressType@32317e9d)在org.apache.camel.impl.converter.basetypeConverterRegistry.mandatoryConvertTo(BasetypeConverterRegistry.java:185)~[camel-core-2.16.0.jar:2.16.0]在

...

共有1个答案

卫宏硕
2023-03-14

我体验了JaxB的等价行为(生成的类中不存在@XMLRootElement注释),我认为它来自XML模式中定义根元素的方式。

例如:

<xsd:element name="DiffReport" type="DiffReportType" />
<xsd:complexType name="DiffReportType">
    ...
</xsd:complexType>

它将为您生成不带@XmlRootElement注释的DiffReportType类。但是,如果您直接定义根元素,那么您将在生成的类中获得注释集(在我的示例中,根类的名称是diffreport)。

<xsd:element name="DiffReport">
    <xsd:complexType>
        ...
 类似资料:
  • 问题内容: 我正在尝试从FpML(金融产品标记语言)4.5版生成Java类。生成了大量代码,但是我不能使用它。尝试序列化一个简单的文档,我得到以下信息: 实际上,没有任何类具有@XmlRootElement批注,那么我该怎么做呢?我将xjc(JAXB 2.1)指向fpml-main-4-5.xsd,其中包括所有类型。 问题答案: v

  • 我们试图使用gradle、xsd和xjc生成JAXB类,JAXB类应该具有XmlRootElement注释,以便可以将其作为web服务响应公开。我们正在跟踪这个链接http://azagorneanu.blogspot.com/2011/09/configure-maven-to-generate-classes.html,这很有帮助,但我们无法找到一个只有gradle的特定示例。所以我们想出了一

  • 我正在构建一系列链接类,我希望这些类的实例能够整理成XML,这样我就可以将它们保存到一个文件中,以后再读进去。 目前我使用以下代码作为测试用例: XML输出为: 元素为空有什么原因吗?我希望它包含日期的字符串表示(即)。为了做到这一点,我需要编写一些我自己的代码吗? 的输出是:

  • null 我尝试在自定义绑定文件中向有问题的类添加注释,但它将注释添加到类以及getContent()方法中,该类将无法编译。我不认为我应该添加这个注释,因为这是一个复杂的类型,是根的一个组件,实际上它嵌套在树中相当深的地方。我已经读到可以将标记添加到全局绑定元素中,但是我已经将许多属性添加到全局绑定元素中,当我这样做时,它将无法编译。 有人能帮我指出正确的方向吗?这可能是我构建JAXB对象的方式

  • 我无法在不了解根元素的情况下取消 XML 的编组。例如。 或 等等... 我想在类上映射解组结果,例如: 我总是需要修复< code>@XmlRootElement。< br >我搜索了如何在运行时设置@XmlRootElement,但没有成功。知道吗? 我在Spring Batch上下文中,我可以使用我选择的解组器。 注意:我不能使用这里显示的< code>@XmlElementDecl或< c

  • 我花了一些时间来调查是什么问题,但我不能解决它。当我在XML下面反封送和回封送时,我看到的是不同的XML。 在上面的xml中,只有一个标记(第一个),其余所有(包括名称空间)都是意外元素。另一个应用程序发送上述XML。 null 我真的不明白QName的事