Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/373.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
JAXB无法封送类型";java.lang.Class”的;_Java_Xml_Jaxb_Jaxb2 - Fatal编程技术网

JAXB无法封送类型";java.lang.Class”的;

JAXB无法封送类型";java.lang.Class”的;,java,xml,jaxb,jaxb2,Java,Xml,Jaxb,Jaxb2,我想写一个XML文件,我有一个包含映射对象的实体类。 我添加了注释,现在我在JSF页面中有一个按钮,可以生成XML文件,但是在输出文件中,我只找到了主类,没有找到另一个映射类,我在注释中添加了一个。 这是我的主要课程: 包esprit.olap.domain @XmlRootElement(name="Schema") @XmlType(propOrder = { "parameters", "cubes", "dimensions", "catalogBase" }) @Entity publ

我想写一个XML文件,我有一个包含映射对象的实体类。 我添加了注释,现在我在JSF页面中有一个按钮,可以生成XML文件,但是在输出文件中,我只找到了主类,没有找到另一个映射类,我在注释中添加了一个。 这是我的主要课程:

包esprit.olap.domain

@XmlRootElement(name="Schema")
@XmlType(propOrder = { "parameters", "cubes", "dimensions", "catalogBase" })
@Entity
public class SchemaBase implements Serializable{

@Id
@GeneratedValue(strategy=GenerationType.AUTO)
private int id_schema;  

private String name_schema;

private String description_schema;

private String measuresCaption_schema;

private String defaultRole_schema;


@ManyToOne(fetch=FetchType.LAZY)
private CatalogBase catalogBase;




@OneToMany (cascade={CascadeType.MERGE,CascadeType.ALL})
private List<CubeBase>cubes ;

@OneToMany (cascade={CascadeType.MERGE,CascadeType.ALL})
private List<ParameterBase>parameters;

@ManyToMany
private List<DimensionBase> dimensions;



public List<ParameterBase> getParameters() {
    return parameters;
}
@XmlElement(name="Parameter")
public void setParameters(List<ParameterBase> parameters) {
    this.parameters = parameters;
}
public List<DimensionBase> getDimensions() {
    return dimensions;
}
@XmlElement(name="Dimension")
public void setDimensions(List<DimensionBase> dimensions) {
    this.dimensions = dimensions;
}

public List<CubeBase> getCubes() {
    return cubes;
}
@XmlElement(name="Cube")
public void setCubes(List<CubeBase> cubes) {
    this.cubes = cubes;
}
public CatalogBase getCatalogBase() {
    return catalogBase;
}
public void setCatalogBase(CatalogBase catalogBase) {
    this.catalogBase = catalogBase;
}
public int getId_schema() {
    return id_schema;
}
@XmlTransient
public void setId_schema(int id_schema) {
    this.id_schema = id_schema;
}
public String getName_schema() {
    return name_schema;
}
@XmlAttribute(name="name")
public void setName_schema(String name_schema) {
    this.name_schema = name_schema;
}
public String getDescription_schema() {
    return description_schema;
}
@XmlAttribute(name="description")
public void setDescription_schema(String description_schema) {
    this.description_schema = description_schema;
}
public String getMeasuresCaption_schema() {
    return measuresCaption_schema;
}
@XmlTransient
public void setMeasuresCaption_schema(String measuresCaption_schema) {
    this.measuresCaption_schema = measuresCaption_schema;
}
public String getDefaultRole_schema() {
    return defaultRole_schema;
}
@XmlAttribute(name="defaultValue")
public void setDefaultRole_schema(String defaultRole_schema) {
    this.defaultRole_schema = defaultRole_schema;
}


public void addCubeToShema(List<CubeBase> cubes){
       for(CubeBase cubeBase:cubes)
           cubeBase.setSchema(this);
       this.cubes=cubes;
   }
public void addParameterToSchema(List<ParameterBase> parameters){
    for(ParameterBase param:parameters)
        param.setSchema(this);
    this.parameters=parameters;
}
public SchemaBase(String name_schema, String description_schema,
        String measuresCaption_schema, String defaultRole_schema,
        List<CubeBase> cubes, List<ParameterBase> parameters,
        List<DimensionBase> dimensions) {
    super();
    this.name_schema = name_schema;
    this.description_schema = description_schema;
    this.measuresCaption_schema = measuresCaption_schema;
    this.defaultRole_schema = defaultRole_schema;
    this.cubes = cubes;
    this.parameters = parameters;
    this.dimensions = dimensions;
}

public SchemaBase(String name_schema,List<CubeBase> cubes, List<ParameterBase> parameters,
        List<DimensionBase> dimensions) {
    super();
    this.name_schema = name_schema;
    this.cubes = cubes;
    this.parameters = parameters;
    this.dimensions = dimensions;
}
public SchemaBase(String name_schema) {
    super();
    this.name_schema = name_schema;
}
public SchemaBase() {
    super();
}


}
以及为SchemaBase服务:

public interface SchemaDaoRemote {

    public SchemaBase create_schema (SchemaBase schema);
    public void update_schema (SchemaBase schema);
    public void delete_schema(int id);
    public List<SchemaBase>list_schema(int id);
    public SchemaBase find_schema(int id);


}
公共接口模式远程{
公共SchemaBase create_schema(SchemaBase schema);
公共void更新_模式(SchemaBase模式);
公共void delete_模式(int-id);
公共列表_模式(int-id);
公共SchemaBase find_schema(int-id);
}
我在另一个托管bean上创建如下内容:

@ManagedBean(name = "xmlMan")
@SessionScoped
public class XmlGenaratedManaged {
    @ManagedProperty(value = "#{SchemaMan}")
    SchemaManaged shmanged;
    @ManagedProperty(value = "#{paraMan}")
    ParameterManaged param;



public SchemaManaged getShmanged() {
        return shmanged;
    }



    public void setShmanged(SchemaManaged shmanged) {
        this.shmanged = shmanged;
    }




    public ParameterManaged getParam() {
        return param;
    }



    public void setParam(ParameterManaged param) {
        this.param = param;
    }



public void GenerateXml(){
    //SchemaBase schema = new SchemaBase();
    shmanged.schema.setParameters(new ArrayList<ParameterBase>());
    //ParameterBase pb=param.getParamUpdate();
    //schema.getParameters().add(pb);

    shmanged.schema.getParameters().add(param.getParamUpdate());

        JAXBContext jaxbContext;

        try {

            jaxbContext = JAXBContext.newInstance(SchemaBase.class);

            Marshaller jaxbMarshaller = jaxbContext.createMarshaller();
            System.out.println("This is your cube"+shmanged.getSchema().getParameters());
            //specify the location and name of xml file to be created
            File XMLfile = new File("C:\\EspritJSF.xml");
            // for getting nice formatted output  
               jaxbMarshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);


            // Writing to XML file
            jaxbMarshaller.marshal(shmanged.getSchema(), XMLfile); 


            // Writing to console
            jaxbMarshaller.marshal(shmanged.getSchema(), System.out); 
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
        }

}
@ManagedBean(name=“xmlMan”)
@会议范围
公共类xmlganaratedmanaged{
@ManagedProperty(value=“#{SchemaMan}”)
计划管理;
@ManagedProperty(value=“#{paraMan}”)
参数管理参数;
公共模式命名的getShmanged(){
返回shmanged;
}
公共无效设置为空(SchemaManaged为空){
this.shmanged=shmanged;
}
公共参数管理的getParam(){
返回参数;
}
public void setParam(参数管理参数){
this.param=param;
}
public void GenerateXml(){
//SchemaBase schema=新SchemaBase();
setParameters(新的ArrayList());
//ParameterBase pb=param.getParamUpdate();
//schema.getParameters().add(pb);
shmanged.schema.getParameters().add(param.getParamUpdate());
JAXBContext JAXBContext;
试一试{
jaxbContext=jaxbContext.newInstance(SchemaBase.class);
Marshaller jaxbMarshaller=jaxbContext.createMarshaller();
System.out.println(“这是您的多维数据集”+shmanged.getSchema().getParameters());
//指定要创建的xml文件的位置和名称
File XMLfile=新文件(“C:\\EspritJSF.xml”);
//用于获得良好的格式化输出
setProperty(Marshaller.JAXB_格式化的_输出,Boolean.TRUE);
//写入XML文件
jaxbMarshaller.marshall(shmanged.getSchema(),XMLfile);
//写入控制台
jaxbMarshaller.marshall(shmanged.getSchema(),System.out);
}捕获(JAXBEException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
}
}
}
但当我添加示例2 parametrbase并运行它时,我只得到XML文件中的最后一个参数,如下所示:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Schema defaultValue="" description="fdsd" name="fdg">
    <Parameter defaultValue="dffdfd" description="fdsf" modifiable="false" name="dfd" type="Timestamp"/>
</Schema>


因此,如何在XML文件中设置两个参数,以及thx all以获得您的帮助。

您的类和所有内容都设置正确,但根据您看到的情况,您的模式对象没有正确填充。 我构造了一组类来模拟您在这里描述的内容,其中包含一些任意内容,并且能够很好地封送

类型:

@XmlRootElement(name = "Parameter")
@XmlAccessorType(XmlAccessType.FIELD)
public class ParameterBase {
    @XmlElement(name = "Name")
    public String paramName;
    @XmlElement(name = "Value")
    public String paramValue;

    public ParameterBase() {}

    public void setParamName(String paramName) { this.paramName = paramName; }
    public void setParamValue(String paramValue) { this.paramValue = paramValue; }
    public String getParamName() { return this.paramName; }
    public String getParamValue() { return this.paramValue; }
}


@XmlRootElement(name = "Cube")
@XmlAccessorType(XmlAccessType.FIELD)
public class CubeBase {
    @XmlElement(name = "X")
    int x;
    @XmlElement(name = "Y")
    int y;
    @XmlElement(name = "Z")
    int z;

    public CubeBase() {
        x = 0;
        y = 0;
        z = 0;
    }

    public int getX() {
        return this.x;
    }

    public int getY() {
        return this.y;
    }

    public int getZ() {
        return this.z;
    }

    public void setX(int x) { this.x = x; }
    public void setY(int y) { this.y = y; }
    public void setZ(int z) { this.z = z; }
} 



@XmlRootElement(name = "Dimension")
@XmlAccessorType(XmlAccessType.FIELD)
public class DimensionBase {
    @XmlElement(name = "Value")
    int dim;

    public DimensionBase() {
        dim = 0;
    }

    public void setDim(int dim) { this.dim = dim; }
    public int getDim() { return this.dim; }
}

@XmlRootElement(name = "Catalog")
@XmlAccessorType(XmlAccessType.FIELD)
public class CatalogBase {
    @XmlElement(name = "Name")
    String catalogName;

    public CatalogBase() {

    }

    public void setCatalogName(String name) {
        this.catalogName = name;
    }

    public String getCatalogName() {
        return this.catalogName;
    }
}
架构类型:

@XmlRootElement(name="Schema")
@XmlType(propOrder = { "parameters", "cubes", "dimensions", "catalogBase" })
@XmlAccessorType(XmlAccessType.FIELD)
public class SchemaBase {
    @XmlElement(name = "Parameter")
    List<ParameterBase> parameters;
    @XmlElement(name = "Cube")
    List<CubeBase> cubes;
    @XmlElement(name = "Dimension")
    List<DimensionBase> dimensions;
    @XmlElement(name = "CatalogBase")
    CatalogBase catalogBase;

    @XmlAttribute(name = "defaultValue")
    String defaultValue;
    @XmlAttribute(name = "description")
    String description;
    @XmlAttribute(name = "name")
    String name;

    public SchemaBase() {
        defaultValue = "dsf";
        description = "sdfsd";
        name = "dsq";
    }

    public SchemaBase(String defaultValue, String description, String name) {
        this.defaultValue = defaultValue;
        this.description = description;
        this.name = name;
    }

    public List<ParameterBase> getParameters() { return this.parameters; }
    public List<CubeBase> getCubes() { return this.cubes; }
    public List<DimensionBase> getDimensions() { return this.dimensions; }
    public CatalogBase getCatalogBase() { return this.catalogBase; }

    public void setParameters(List<ParameterBase> parameters ) { this.parameters = parameters;}
    public void setCubes(List<CubeBase> cubes ) { this.cubes = cubes;}
    public void setDimensions(List<DimensionBase> dimensions ) { this.dimensions = dimensions;}
    public void setCatalogBase(CatalogBase catalogBase) { this.catalogBase = catalogBase; }
}

检查schema对象并确保其已完全填充。

您需要使用schema.class而不是schema.class。您的schema对象在哪里表示您正在jaxbMarshaller.marshall(schema,System.out)中使用?尝试使用JAXBContext JAXBContext=JAXBContext.newInstance(“package.of.your.schema.class”);映射类是否已填充?如果它们为null或空,我认为当您尝试封送时,您不会得到类对象的任何内容。该类型工作正常,因为在封送处理时获得了正确的标记,丢失的只是数据。我们可以看到填充了
schema
对象的代码吗?是的,我的SchemaBase是这样的:publicschemabase schema=newschemabase();在我的Schema Managed Beai中,我做了一个测试,就像你每次测试CubeBase和其他对象时做的那样,当我通过SchemaBase.Class时,它工作得很好,但在我的JSF页面中,当我将CubeBase添加到数据库中的主对象SchemaBase中时,我可以看到它与同一个SchemaBase关联的CubeBase,但当我运行代码时,它只会向我展示SchemaBase的xml。您必须粘贴用于设置对象的代码。我在下面遇到了问题。您现在可以看到所有代码了,谢谢您的帮助,当我编写此代码时:System.out.println(“参数返回”+schema.getParameters());我得到null,但当我进入数据库时,我看到这个参数与这个模式关联!!!!
@XmlRootElement(name="Schema")
@XmlType(propOrder = { "parameters", "cubes", "dimensions", "catalogBase" })
@XmlAccessorType(XmlAccessType.FIELD)
public class SchemaBase {
    @XmlElement(name = "Parameter")
    List<ParameterBase> parameters;
    @XmlElement(name = "Cube")
    List<CubeBase> cubes;
    @XmlElement(name = "Dimension")
    List<DimensionBase> dimensions;
    @XmlElement(name = "CatalogBase")
    CatalogBase catalogBase;

    @XmlAttribute(name = "defaultValue")
    String defaultValue;
    @XmlAttribute(name = "description")
    String description;
    @XmlAttribute(name = "name")
    String name;

    public SchemaBase() {
        defaultValue = "dsf";
        description = "sdfsd";
        name = "dsq";
    }

    public SchemaBase(String defaultValue, String description, String name) {
        this.defaultValue = defaultValue;
        this.description = description;
        this.name = name;
    }

    public List<ParameterBase> getParameters() { return this.parameters; }
    public List<CubeBase> getCubes() { return this.cubes; }
    public List<DimensionBase> getDimensions() { return this.dimensions; }
    public CatalogBase getCatalogBase() { return this.catalogBase; }

    public void setParameters(List<ParameterBase> parameters ) { this.parameters = parameters;}
    public void setCubes(List<CubeBase> cubes ) { this.cubes = cubes;}
    public void setDimensions(List<DimensionBase> dimensions ) { this.dimensions = dimensions;}
    public void setCatalogBase(CatalogBase catalogBase) { this.catalogBase = catalogBase; }
}
public class Test {
    public static void main(String[] args) throws Exception {
        SchemaBase schema = new SchemaBase("Default", "MySchema", "MySchemaName");

        CatalogBase cb = new CatalogBase();
        cb.setCatalogName("My Catalog");
        schema.setCatalogBase(cb);

        schema.setDimensions(new ArrayList<DimensionBase>());
        DimensionBase db = new DimensionBase();
        db.setDim(12);
        schema.getDimensions().add(db);
        db = new DimensionBase();
        db.setDim(14);
        schema.getDimensions().add(db);
        db = new DimensionBase();
        db.setDim(50);
        schema.getDimensions().add(db);

        schema.setCubes(new ArrayList<CubeBase>());
        CubeBase cube = new CubeBase();
        cube.setX(3);
        cube.setY(13);
        cube.setZ(20);
        schema.getCubes().add(cube);

        schema.setParameters(new ArrayList<ParameterBase>());
        ParameterBase pb = new ParameterBase();
        pb.setParamName("MyParamName");
        pb.setParamValue("MyParamValue");
        schema.getParameters().add(pb);

        JAXBContext context = JAXBContext.newInstance(new Class[]{schema.getClass()});
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        m.marshal(schema, System.out);
    }
}
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Schema defaultValue="Default" description="MySchema" name="MySchemaName">
    <Parameter>
        <Name>MyParamName</Name>
        <Value>MyParamValue</Value>
    </Parameter>
    <Cube>
        <X>3</X>
        <Y>13</Y>
        <Z>20</Z>
    </Cube>
    <Dimension>
        <Value>12</Value>
    </Dimension>
    <Dimension>
        <Value>14</Value>
    </Dimension>
    <Dimension>
        <Value>50</Value>
    </Dimension>
    <CatalogBase>
        <Name>My Catalog</Name>
    </CatalogBase>
</Schema>
public class Test {
    public static void main(String[] args) throws Exception {
        SchemaBase schema = new SchemaBase("Default", "MySchema", "MySchemaName");

        JAXBContext context = JAXBContext.newInstance(new Class[]{schema.getClass()});
        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
        m.marshal(schema, System.out);
    }
}

<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Schema defaultValue="Default" description="MySchema" name="MySchemaName"/>