Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
从XSD使用JAXB生成元素java类_Java_Xml_Xsd_Jaxb - Fatal编程技术网

从XSD使用JAXB生成元素java类

从XSD使用JAXB生成元素java类,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,我有一个xsd文档,我想使用JAXB从中生成java类。 以前,有一个元素是这样的: <element name="myResponse" type="param:response> <complexType name="response"> <sequence> <element maxOccurs="unbounded" minOccurs="0" name="reference" type="param:myType" /&

我有一个xsd文档,我想使用JAXB从中生成java类。 以前,有一个元素是这样的:

<element name="myResponse" type="param:response>
<complexType name="response">
    <sequence>
        <element maxOccurs="unbounded" minOccurs="0" name="reference" type="param:myType" />
        ...
    </sequence>
</complexType>

但两者都不起作用


有人能告诉我,当不是列表时,正确的方法是什么吗?

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

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

  • 由于您的响应元素是模式中的顶级元素,因此它使用
    @xmlementdecl
    进行注释,并具有JAXBElement类型

  • 您的“响应”从未属于类型列表(检查生成的类)。它只有一个
    List
    类型的“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);
    
    JAXBContext jc=JAXBContext.newInstance(ObjectFactory.class);
    Response Response=((JAXBElement)jc.createUnmarshaller().unmarshal(新文件(“您的文件路径”)).getValue();
    MyType t=newObjectFactory().createMyType();
    响应。设置参考(t);
    
    这基本上是一种正确的方法(包括使用
    ObjectFactory.class
    方法创建新对象)

    myType t = new myType();
    response.getReference().setValue(t);
    
    myType t = new myType();
    response.setReference(t);
    
    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);