Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/337.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
将Java编组为Xml时出错_Java_Xml_Jaxb_Marshalling - Fatal编程技术网

将Java编组为Xml时出错

将Java编组为Xml时出错,java,xml,jaxb,marshalling,Java,Xml,Jaxb,Marshalling,我有一个xsd。在xsd中有一个画布,其中包含许多小部件、行和列。画布可以是一个小部件。所以在画布中存在许多小部件和画布。我的xsd是: <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" targetNamespace="http://www.cms.indiatimes.com/Canvas" xmlns:tns="http://www.cms.indiatimes.com/Canvas" elementFormDefaul

我有一个xsd。在xsd中有一个画布,其中包含许多小部件、行和列。画布可以是一个小部件。所以在画布中存在许多小部件和画布。我的xsd是:

<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema"
targetNamespace="http://www.cms.indiatimes.com/Canvas" xmlns:tns="http://www.cms.indiatimes.com/Canvas"
elementFormDefault="qualified">
<xsd:element name="canvas">

    <xsd:complexType>

        <xsd:complexContent>

            <xsd:extension base="tns:widgetEntry">

                <xsd:sequence>

                    <xsd:element name="widget" type="tns:widgetEntry"
                        minOccurs="0" maxOccurs="unbounded" />

                    <xsd:element name="row" type="xsd:integer" minOccurs="1"
                        maxOccurs="1" />

                    <xsd:element name="column" type="xsd:integer"
                        minOccurs="1" maxOccurs="1" />

                </xsd:sequence>

            </xsd:extension>

        </xsd:complexContent>

    </xsd:complexType>

</xsd:element>

<xsd:complexType name="widgetEntry">

    <xsd:sequence>

        <xsd:element name="ID" type="xsd:int" minOccurs="1"
            maxOccurs="1" />

        <xsd:element name="templateName" type="xsd:string"
            minOccurs="0" maxOccurs="1" />

        <xsd:element name="cacheTime" type="xsd:integer"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="parameter" type="tns:parameter"
            minOccurs="0" maxOccurs="unbounded" />

        <xsd:element name="visible" type="xsd:boolean" default="false" />

        <xsd:element name="canvasSet" type="xsd:boolean" default="false">

            <xsd:annotation>

                <xsd:documentation xml:lang="en">

                    indicates if the
                    widget is also a canvas.

                </xsd:documentation>

            </xsd:annotation>

        </xsd:element>

        <xsd:element name="position" type="tns:position"
            minOccurs="0" maxOccurs="1" />


    </xsd:sequence>

</xsd:complexType>


<xsd:complexType name="parameter">

    <xsd:annotation>

        <xsd:documentation xml:lang="en">

            The parameter contains

            a name, a type and a

            value.Based upon type, the

            value will need to be

            converted into the java type.

        </xsd:documentation>

    </xsd:annotation>

    <xsd:sequence>

        <xsd:element name="parameterName" type="xsd:string"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="parameterType">

            <xsd:simpleType>

                <xsd:restriction base="xsd:string">

                    <xsd:enumeration value="number" />

                    <xsd:enumeration value="string" />

                    <xsd:enumeration value="date" />

                </xsd:restriction>

            </xsd:simpleType>

        </xsd:element>

        <xsd:element name="parameterValue" type="xsd:string"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="minParameterValue" type="xsd:string"
            minOccurs="0" maxOccurs="1" />

        <xsd:element name="maxParameterValue" type="xsd:string"
            minOccurs="0" maxOccurs="1" />

        <xsd:element name="defaultParameterValue" type="xsd:string"
            minOccurs="0" maxOccurs="1" />

    </xsd:sequence>

</xsd:complexType>

<xsd:complexType name="position">

    <xsd:sequence>

        <xsd:element name="leftTopCornerRowValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="leftTopCornerColumnValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="leftBottomCornerRowValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="leftBottomCornerColumnValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="rightTopCornerRowValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="rightTopCornerColumnValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="rightBottomCornerRowValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

        <xsd:element name="rightBottomCornerColumnValue" type="xsd:int"
            minOccurs="1" maxOccurs="1" />

    </xsd:sequence>

</xsd:complexType>


</xsd:schema>

指示
小部件也是画布。
该参数包含
名称、类型和名称
值。根据类型
价值将需要
转换为java类型。
现在我已经编写了编组代码。在这段代码中,我在根画布中使用了两个小部件,它正确地生成了xml

public class Main {
    public static void main(String[] args) {
    Canvas canvas = new Canvas();
    canvas.setColumn(new BigInteger("2"));
    canvas.setRow(new BigInteger("2"));
    List<WidgetEntry> listEntry = canvas.getWidget(); 
        WidgetEntry widget1 = new WidgetEntry();
        widget1.setID(1);
    widget1.setCacheTime(new BigInteger("5"));
        widget1.setCanvasSet(false);
    widget1.setTemplateName("Header");
        widget1.setVisible(true);
    List<Parameter> paramList = widget1.getParameter();
    Parameter param = new Parameter();
    param.setParameterName("City");
    param.setParameterValue("from URL");
    param.setParameterType("Number");
    paramList.add(param);
    listEntry.add(widget1);
     WidgetEntry widget2 = new WidgetEntry();
    widget2.setID(1);
    widget2.setCacheTime(new BigInteger("5"));
    widget2.setCanvasSet(false);
    widget2.setTemplateName("Menu");
    widget2.setCanvasSet(true);
     widget2.setVisible(true);
    listEntry.add(widget2);

     try {
        JAXBContext jaxbContext = JAXBContext.newInstance(Canvas.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(canvas, System.out);
    } catch (PropertyException e) {
        e.printStackTrace();
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}
}
公共类主{
公共静态void main(字符串[]args){
画布=新画布();
setColumn(新的BigInteger(“2”));
canvas.setRow(新的BigInteger(“2”));
List listEntry=canvas.getWidget();
WidgetEntry widget1=新的WidgetEntry();
widget1.setID(1);
setCacheTime(新的BigInteger(“5”));
widget1.setCanvasSet(false);
widget1.setTemplateName(“标题”);
widget1.setVisible(true);
List paramList=widget1.getParameter();
参数param=新参数();
参数setParameterName(“城市”);
参数setParameterValue(“来自URL”);
参数setParameterType(“编号”);
paramList.add(param);
添加(widget1);
WidgetEntry widget2=新的WidgetEntry();
widget2.setID(1);
setCacheTime(新的BigInteger(“5”));
widget2.setCanvasSet(false);
widget2.setTemplateName(“菜单”);
widget2.setCanvasSet(true);
widget2.setVisible(true);
添加(widget2);
试一试{
JAXBContext JAXBContext=JAXBContext.newInstance(Canvas.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
//输出精美印刷品
setProperty(Marshaller.JAXB_格式化的_输出,true);
jaxbMarshaller.marshall(canvas,System.out);
}捕获(属性异常e){
e、 printStackTrace();
}捕获(JAXBEException e){
e、 printStackTrace();
}
}
}
但当我在根画布中取1个小部件和1个画布时,它的给出错误。下面是我的代码

public class Main {
public static void main(String[] args) {
    Canvas canvas = new Canvas();
    canvas.setColumn(new BigInteger("2"));
    canvas.setRow(new BigInteger("2"));
    List<WidgetEntry> listEntry = canvas.getWidget(); 
    WidgetEntry widget1 = new WidgetEntry();
    widget1.setID(1);
    widget1.setCacheTime(new BigInteger("5"));
    widget1.setCanvasSet(false);
    widget1.setTemplateName("Header");
    widget1.setVisible(true);
    List<Parameter> paramList = widget1.getParameter();
    Parameter param = new Parameter();
    param.setParameterName("City");
    param.setParameterValue("from URL");
    param.setParameterType("Number");
    paramList.add(param);
    listEntry.add(widget1);
    Canvas canvas1 = new Canvas();
    canvas1.setColumn(new BigInteger("2"));
    canvas1.setRow(new BigInteger("2"));
    canvas1.setID(1);
    canvas1.setCacheTime(new BigInteger("5"));
    canvas1.setCanvasSet(false);
    canvas1.setTemplateName("Menu");
    canvas1.setCanvasSet(true);
    canvas1.setVisible(true);
    listEntry.add(canvas1);

    try {
        JAXBContext jaxbContext = JAXBContext.newInstance(Canvas.class);
        Marshaller jaxbMarshaller = jaxbContext.createMarshaller();

        // output pretty printed
        jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        jaxbMarshaller.marshal(canvas, System.out);
    } catch (PropertyException e) {
        e.printStackTrace();
    } catch (JAXBException e) {
        e.printStackTrace();
    }
}
}
公共类主{
公共静态void main(字符串[]args){
画布=新画布();
setColumn(新的BigInteger(“2”));
canvas.setRow(新的BigInteger(“2”));
List listEntry=canvas.getWidget();
WidgetEntry widget1=新的WidgetEntry();
widget1.setID(1);
setCacheTime(新的BigInteger(“5”));
widget1.setCanvasSet(false);
widget1.setTemplateName(“标题”);
widget1.setVisible(true);
List paramList=widget1.getParameter();
参数param=新参数();
参数setParameterName(“城市”);
参数setParameterValue(“来自URL”);
参数setParameterType(“编号”);
paramList.add(param);
添加(widget1);
Canvas canvas1=新画布();
canvas1.setColumn(新的BigInteger(“2”));
canvas1.setRow(新的BigInteger(“2”));
canvas1.setID(1);
canvas1.setCacheTime(新的BigInteger(“5”));
canvas1.setCanvasSet(false);
canvas1.setTemplateName(“菜单”);
canvas1.setCanvasSet(true);
canvas1.setVisible(true);
添加(canvas1);
试一试{
JAXBContext JAXBContext=JAXBContext.newInstance(Canvas.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
//输出精美印刷品
setProperty(Marshaller.JAXB_格式化的_输出,true);
jaxbMarshaller.marshall(canvas,System.out);
}捕获(属性异常e){
e、 printStackTrace();
}捕获(JAXBEException e){
e、 printStackTrace();
}
}
}
错误是:

javax.xml.bind.MarshalException -除此之外: [com.sun.istack.internal.SAXException2:“com.til.canvasmaker.xsddto.Canvas”的实例正在替换“com.til.canvasmaker.xsddto.WidgetEntry”,但“com.til.canvasmaker.xsddto.Canvas”绑定到匿名类型。] 位于com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:317) 位于com.sun.xml.internal.bind.v2.runtime.MarshallerImpl.marshall(MarshallerImpl.java:243) 位于javax.xml.bind.helpers.AbstractMarshallerImpl.marshall(AbstractMarshallerImpl.java:75) Main.Main(Main.java:56) 原因:com.sun.istack.internal.SAXException2:“com.til.canvasmaker.xsddto.Canvas”的实例正在替换“com.til.canvasmaker.xsddto.WidgetEntry”,但“com.til.canvasmaker.xsddto.Canvas”绑定到匿名类型。 位于com.sun.xml.internal.bind.v2.runtime.XMLSerializer.reportError(XMLSerializer.java:216) 位于com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAsXsiType(XMLSerializer.java:631) 位于com.sun.xml.internal.bind.v2.runtime.property.ArrayElementNodeProperty.serializeItem(ArrayElementNodeProperty.java:54) 位于com.sun.xml.internal.bind.v2.runtime.property.ArrayElementProperty.serializeListBody(ArrayElementProperty.java:157) 位于com.sun.xml.internal.bind.v2.runtime.property.ArrayERProperty.serializeBody(ArrayERProperty.java:141) 位于com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeBody(ClassBeanInfoImpl.java:306) 位于com.sun.xml.internal.bind.v2.runtime.XMLSerializer.childAssociatent(XMLSerializer.java:561) 位于com.sun.xml.internal.bind.v2.runtime.ClassBeanInfoImpl.serializeRoot(ClassBeanInfoImpl.java:290) 请访问com.sun.xml.internal。