XML 파일을 쓰고 싶습니다. 매핑 된 객체가 포함 된 엔티티 클래스가 있습니다. annotations.Now XML 파일을 생성하는 JSF 페이지에 단추가 있지만 출력 파일에서 주석이있는 다른 매핑 된 클래스가없는 기본 클래스 만 발견했습니다. 이것은 내 mainClass입니다.JAXB "java.lang.Class"형식을 마샬링 할 수 없습니다.
패키지 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 내 ManagedBean은 다음과 같습니다
@ManagedBean(name="SchemaMan")
@SessionScoped
public class SchemaManaged {
@EJB
SchemaDaoRemote schemaService;
//private SchemaBase schema;
public SchemaBase schema = new SchemaBase();
private WriteXml xl= new WriteXml();
private String roleSchema;
private String descSchema;
private String nameSchema;
private TreeNode shemaBoxses;
private TreeNode shemaBoxse;
@PostConstruct
public void init() {
shemaBoxses = new DefaultTreeNode("Schema", null);
TreeNode node0 = new DefaultTreeNode("Schema", shemaBoxses);
}
public String getRoleSchema() {
return roleSchema;
}
public void setRoleSchema(String roleSchema) {
this.roleSchema = roleSchema;
}
public String getDescSchema() {
return descSchema;
}
public void setDescSchema(String descSchema) {
this.descSchema = descSchema;
}
public SchemaBase getSchema() {
return schema;
}
public void setSchema(SchemaBase schema) {
this.schema = schema;
}
public String getNameSchema() {
return nameSchema;
}
public void setNameSchema(String nameSchema) {
this.nameSchema = nameSchema;
}
public TreeNode getShemaBoxse() {
return shemaBoxse;
}
public void setShemaBoxse(TreeNode shemaBoxse) {
this.shemaBoxse = shemaBoxse;
}
public TreeNode getShemaBoxses() {
return shemaBoxses;
}
public void setShemaBoxses(TreeNode shemaBoxses) {
this.shemaBoxses = shemaBoxses;
}
public String CreateSchema(){
System.out.println(schema.getName_schema());
schema = schemaService.create_schema(schema);
FacesContext context= FacesContext.getCurrentInstance();
context.addMessage(null, new FacesMessage(FacesMessage.SEVERITY_INFO, "Schema "+schema.getName_schema()+" ajouter avec succees", ""));
return "Scucces";
}
}
및 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);
}
난 onther과 같이 빈을 관리 만들 :
@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();
}
}
}
하지만 내가 예를 들어 추가했을 때 전자 2 ParamterBase과 내가 그것을 내가 이렇게 내 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 파일을 들으 당신의 도움에 대한 모든 내 두 개의 매개 변수를 가질 수 있습니다.
schema.class 대신 Schema.class가 필요합니다. – user3487063
jaxbMarshaller.marshal (schema, System.out)에서 사용중인 스키마 객체가 어디에 있습니까? ? – user3487063
JAXBContext를 사용해 봅니다. jaxbContext = JAXBContext.newInstance ("package.of.your.schema.class"); – Xstian