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

从XSD使用JAXB生成元素java类

谢和颂
2023-03-14
<element name="myResponse" type="param:response>
<complexType name="response">
    <sequence>
        <element maxOccurs="unbounded" minOccurs="0" name="reference" type="param:myType" />
        ...
    </sequence>
</complexType>

myType也被定义为complexType。然后得到生成的类MyResponse.java和Reference.java。我可以通过以下方式分配“引用”的值:

ArrayList<myType> l = new new ArrayList<myType>()
response.getReference().addAll(l);

而且奏效了。

现在我只是删除了maxOccurs=“unbounded”,它不再起作用了。响应不再是List类型,而是JaxBelement类型。我试着用:

myType t = new myType();
response.getReference().setValue(t);
myType t = new myType();
response.setReference(t);

谁能告诉我,当它不是一个列表时,什么是正确的做法?

共有1个答案

夔波
2023-03-14

到目前为止,我还没有足够的声誉,所以我无法评论问题,因此我将负责猜测您的问题是什么(关于您如何在java代码中获得“response”变量,没有足够的信息)。我相信这应该与您的类型接受元素序列或只接受单个元素无关。

>

  • 如果您使用xjc工具从您的模式生成Java类,那么最终应该生成objectFactory.class以及表示您的类型的其他类。检查它来了解您的对象是如何创建的。

    由于response元素是模式中的顶级元素,因此它使用@XmlElementDecl注释进行注释,并且具有JAXBElement类型

    您的“响应”从来不是类型列表(检查生成的类)。它只有列表 类型的“reference”字段

    因此,如果您从xml文件中解组数据,应该按照以下方式执行

    JAXBContext jc = JAXBContext.newInstance(ObjectFactory.class);
    Response response = ((JAXBElement<Response>) jc.createUnmarshaller().unmarshal(new File("YOUR_FILE_PATH"))).getValue();
    MyType t = new ObjectFactory().createMyType();
    response.setReference(t);
    

    这基本上是一种正确的方法(包括使用objectFactory.class方法创建新对象)。

  •  类似资料:
    • 我的真实案例使用了大量具有大量属性的类,版本控制的数量可能是一个很大的数字。我希望存储每个版本的XSD,并通过动态指定包含版本号的XSD名称从Java类生成XMLs。 有没有可能实现我上面描述的需求,或者你有一个类似的解决方案来满足我的需求?

    • B/src/main/gen pom.xml 我想在B项目中从XSD生成类,它存在于一个项目中 在B项目的pom.xml中,我有:

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

    • 我正在从中生成大量Java文件http://www.ncpdp.org的XSD文件(仅对成员可用)。生成它们之后,我希望在Spring控制器中使用它们,但在将响应转换为XML时遇到问题。 我已经尝试返回元素本身,以及JAXBElement 这是我的控制器: 我试图创建一个MvcConfig来覆盖Spring Boot的MVC配置,但它似乎不起作用。 我需要做什么才能让Spring MVC将我生成的

    • 我有我的xml模式定义如下 我使用maven-jaxb2-plugin根据这个xsd生成Java类。 生成代码后,我发现所有元素都有@xmlement注释(required=true)。为什么?我有许多minOccurs=“0”元素。为什么元素上总是添加required=true。

    • Java11已经取消了对JAXB和xjc等工具的支持,这些工具从XSD模式生成Java文件。我在Gradle中找不到很多xjc代的例子,并尝试了一些选项,但到目前为止运气不佳。另外,在SpringBootGradle项目中应该添加哪些依赖项来提供对JAXB的全面支持?