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

我有@XmlRootelement,但不断出现这个异常:无法将类型封送为元素,因为它缺少@XmlRootelement

韩弘阔
2023-03-14

我试图marshall/unmarshall一个没有@xmlrootelement的类。有人能帮忙吗?我使用的封送程序属于Spring的org.springframework.oxm.jaxb中的Jaxb2Marshaller类型,现有的大多数解决方案属于javax.xml.bindmarshallerJAXBContext类型。需要帮助编组一个Java类,它没有提供任何@xmlrootelement,使用Spring的JAXB2Marshaller从XML生成。

无法将类型封送为元素,因为它缺少自动生成类的@XmlRootelement注释

无法将类型封送为XML元素,因为缺少@XmlRootelement注释

包括以下内容,它有一个非常简洁的解释,但使用Marshaller而不是JaxB2Marshaller

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(
    name = "",
    propOrder = {"partnerCdId", "clientProductCode"}
)
@XmlRootElement(
    name = "PartnerRequest"
)
public class PartnerRequest



    @XmlAccessorType(XmlAccessType.FIELD)
    @XmlType(
        name = "Partner",
       )
    public class Partner{
    }
[com.sun.istack.internal.SAXException2: unable to marshal type "com.svc.partner.v1.PartnerRequest" as an element because it is missing an @XmlRootElement annotation]
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.convertJaxbException(Jaxb2Marshaller.java:933)
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.marshal(Jaxb2Marshaller.java:709)
    at org.springframework.ws.support.MarshallingUtils.marshal(MarshallingUtils.java:81)
    at org.springframework.ws.client.core.WebServiceTemplate$2.doWithMessage(WebServiceTemplate.java:395)
    at org.springframework.ws.client.core.WebServiceTemplate.doSendAndReceive(WebServiceTemplate.java:573)
    at org.springframework.ws.client.core.WebServiceTemplate.sendAndReceive(WebServiceTemplate.java:539)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:386)
    at org.springframework.ws.client.core.WebServiceTemplate.marshalSendAndReceive(WebServiceTemplate.java:380)
    at com.vmd.services.BaseService.marshallSendAndReceive(BaseService.java:53)
    at com.vmd.services.PartnerServiceImpl.getPartner(PartnerServiceImpl.java:27)
    at com.vmd.services.PartnerServiceImplTest.ShouldGetPartner(PartnerServiceImplTest.java:36)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:498)
    at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:50)
    at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
    at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:47)
    at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
    at org.springframework.test.context.junit4.statements.RunBeforeTestExecutionCallbacks.evaluate(RunBeforeTestExecutionCallbacks.java:74)
    at org.springframework.test.context.junit4.statements.RunAfterTestExecutionCallbacks.evaluate(RunAfterTestExecutionCallbacks.java:84)
    at org.springframework.test.context.junit4.statements.RunBeforeTestMethodCallbacks.evaluate(RunBeforeTestMethodCallbacks.java:75)
    at org.springframework.test.context.junit4.statements.RunAfterTestMethodCallbacks.evaluate(RunAfterTestMethodCallbacks.java:86)
    at org.springframework.test.context.junit4.statements.SpringRepeat.evaluate(SpringRepeat.java:84)
    at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:325)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:251)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.runChild(SpringJUnit4ClassRunner.java:97)
    at org.junit.runners.ParentRunner$3.run(ParentRunner.java:290)
    at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:71)
    at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:288)
    at org.junit.runners.ParentRunner.access$000(ParentRunner.java:58)
    at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:268)
    at org.springframework.test.context.junit4.statements.RunBeforeTestClassCallbacks.evaluate(RunBeforeTestClassCallbacks.java:61)
    at org.springframework.test.context.junit4.statements.RunAfterTestClassCallbacks.evaluate(RunAfterTestClassCallbacks.java:70)
    at org.junit.runners.ParentRunner.run(ParentRunner.java:363)
    at org.springframework.test.context.junit4.SpringJUnit4ClassRunner.run(SpringJUnit4ClassRunner.java:190)
    at org.junit.runner.JUnitCore.run(JUnitCore.java:137)
    at com.intellij.junit4.JUnit4IdeaTestRunner.startRunnerWithArgs(JUnit4IdeaTestRunner.java:68)
    at com.intellij.rt.execution.junit.IdeaTestRunner$Repeater.startRunnerWithArgs(IdeaTestRunner.java:47)
    at com.intellij.rt.execution.junit.JUnitStarter.prepareStreamsAndStart(JUnitStarter.java:242)
    at com.intellij.rt.execution.junit.JUnitStarter.main(JUnitStarter.java:70)
Caused by: javax.xml.bind.MarshalException: null
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:311)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:236)
    at org.springframework.oxm.jaxb.Jaxb2Marshaller.marshal(Jaxb2Marshaller.java:705)
    ... 39 common frames omitted
Caused by: com.sun.istack.internal.SAXException2: unable to marshal type "com.svc.partner.v1.PartnerRequest" as an element because it is missing an @XmlRootElement annotation
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:234)
    at com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:323)
    at com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:479)
    at com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:308)
    ... 41 common frames omitted

提前谢了。

共有1个答案

长孙雅志
2023-03-14

我使用JaxBelement修复了类似的异常:

JAXBContext jaxbContext = JAXBContext.newInstance(Foo.class);
Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

请尝试一次,如果它不工作,然后友好地分享一个示例XSD,以供进一步研究。

 类似资料:
  • 我想将对象封送到XML。 但是,除以下情况外,它失败了: 事实上,这个注释是存在的(对于父类和交付的类): 儿童班: 它在该方法中完全失败: 它应该起作用,但不应该。 我找不到这里遗漏或错误的地方。 更新: 以下是测试片段: 我从CSV文件中获取日期,并将其转换为DTO对象。此方法返回给我FreightOfferDetail 以下是此方法的片段: 在这种情况下,如何将对象封送到XML文件?

  • 我需要对照我的模式来验证Class object,在我的模式中,我提供了正则表达式来验证自动生成的JAXB类的字段。当我尝试验证我的类对象时,我得到以下错误: 我还有别的办法可以解决吗?

  • 我有以下JAXB对象: 我使用JAXB编组程序将对象转换为XML: 它运行平稳,没有任何异常,但是,结果总是缺少元素键。我试图将其改为Attribute,但它也不起作用。以下是输出示例: 我曾尝试将键更改为另一个名称,例如AuthKey,但它仍然缺失。我做错了什么? 编辑我发现了问题,这是因为我的键的值是空的。如果它包含值,则将其写入XML。然而,您能解释一下为什么在XMLElement中,我写了

  • 你好,我正在为三星Gear创建一个小工具。我用Tizen IDE做可穿戴设备。我关注了他们的youtube tutoria:如何创建基本的集成Gear应用程序。 我尝试在Tizen IDE中构建项目,但出现了一个构建错误: 生成过程中出错。对项目“SimpleSAPConsumer”运行生成器“Web小部件生成器”时出错。构建错误:无法确定图形元素类型,因为文档类为空。这可能是一个投影,请使用EX

  • 我在运行下面的代码时遇到“无法定位元素”异常。我的预期输出是的第一页。 如果我运行上面的代码,我会得到“无法定位元素异常”。我知道前面的Button元素不在Google搜索结果页面的第一页中,但是我想要抑制异常并获得下一步条件的输出。

  • 问题内容: 我在Java中有一个线程 使t(一个不同的线程)被中断。我希望“ t”线程能够捕获到一个,但是Eclipse不允许我说它没有放在try主体中。我该如何打电话?我使用错了吗? 问题答案: 尽管其他答案是正确的,但更充分的解释是适当的。 线程只能在其执行的特定点安全地中断(一般而言)。特别是,它可以在发出呼叫或调用可以发出的服务时安全地中断。这就是为什么是检查异常而不是运行时(未检查)异常

  • 问题内容: 我正在一个项目中,该项目涉及连接到远程服务器,等待响应,然后根据该响应执行操作。我们捕获了两个不同的异常,并且根据捕获的异常而表现不同。例如: 为了测试这一点,我们编写了如下测试 如果我直接运行该函数,一切都会按预期进行。我什至通过在函数的子句中进行测试。但是当我运行单元测试时,我得到 我试图更改要修补的异常,但得到的错误大致相同。 我已经读过,所以我认为它在某处一定是一个不好的选择,