Hallo Leute. Ich bin dabei eine Größe XML Datei mit JAVA einlesen und in eine Datenbank speichern. Ich benutze dazu Spring Batch.
Ich habe Zwei Problemen. erste : Ich kann nicht Die Attribute in XML als Datei in Datenbank speichern. Ich denke es liest überhaupt nicht die Attribute.
2 : genaue wie Problem 1. aber mit Child Tags .
Hier ist die Java Code für Objecten.
und hier die Preparetstatmentsetter :
Und hier meine BatchConfig :
Ich werde dankbar , wenn jemandem mir helfen kann.
Ich habe Zwei Problemen. erste : Ich kann nicht Die Attribute in XML als Datei in Datenbank speichern. Ich denke es liest überhaupt nicht die Attribute.
2 : genaue wie Problem 1. aber mit Child Tags .
Hier ist die Java Code für Objecten.
Java:
import java.sql.Date;
import java.util.List;
import org.springframework.lang.Nullable;
import com.thoughtworks.xstream.annotations.XStreamAlias;
import com.thoughtworks.xstream.annotations.XStreamAsAttribute;
import com.thoughtworks.xstream.annotations.XStreamImplicit;
@XStreamAlias("beruf")
public class BerufXml {
@XStreamAsAttribute
@XStreamAlias("bezeichnung_nk")
private String bezeichnung;
private String bezeichnung_nk;
private String bezeichnung_nl;
@XStreamAlias("id")
private float codeba;
@XStreamAlias("ausbildung")
private int ausbildung;
private int kundenid;
private int internalonly;
private int berufsgrupperef;
@Nullable
private String berufskennzeichen;
@XStreamAlias("lbkgruppe")
@XStreamImplicit
private List<String> lbkgruppes;
@XStreamAlias("typ")
private String typ;
// @XStreamAlias("hochschulberuf")
private String hochschulberuf;
@Nullable
private Date prufungtermin;
@XStreamAsAttribute
@XStreamAlias("qualifikationsNiveaus")
@XStreamImplicit
private List<String> qualifikationsNiveaus;
@XStreamAlias("ebene")
private int ebene;
@XStreamAlias("zustand")
private String zustand;
@XStreamAlias("kuenstler")
private String kuenstler;
@XStreamAlias("suchname_nl")
private String suchname_nl;
public int getEbene() {
return ebene;
}
public void setEbene(int ebene) {
this.ebene = ebene;
}
public String getSuchname_nl() {
return suchname_nl;
}
public String setSuchname_nl(String suchname_nl) {
return suchname_nl;
}
public String getKuenstler() {
return kuenstler;
}
public String setKuenstler(String kuenstler) {
return kuenstler;
}
public String getZustand() {
return zustand;
}
public String setZustand(String zustand) {
return zustand;
}
public String getBezeichnung() {
return bezeichnung;
}
public void setBezeichnung(String bezeichnung) {
this.bezeichnung = bezeichnung;
}
public String getTyp() {
return typ;
}
public void setTyp(String typ) {
this.typ = typ;
}
public float getCodeba() {
return codeba;
}
public void setCodeba(float codeba) {
this.codeba = codeba;
}
public int getAusbildung() {
return ausbildung;
}
public void setAusbildung(int ausbildung) {
this.ausbildung = ausbildung;
}
public int getKundenid() {
return kundenid;
}
public void setKundenid(int kundenid) {
this.kundenid = kundenid;
}
public int getInternalonly() {
return internalonly;
}
public void setInternalonly(int internalonly) {
this.internalonly = internalonly;
}
public int getBerufsgrupperef() {
return berufsgrupperef;
}
public void setBerufsgrupperef(int berufsgrupperef) {
this.berufsgrupperef = berufsgrupperef;
}
public List<String> getQualifikationsNiveaus() {
return qualifikationsNiveaus;
}
public void setQualifikationsNiveaus(List<String> qualifikationsNiveaus) {
this.qualifikationsNiveaus = qualifikationsNiveaus;
}
public String getbezeichnung_nk() {
return bezeichnung_nk;
}
public void setbezeichnung_nk(String bezeichnung_nk) {
this.bezeichnung_nk = bezeichnung_nk;
}
public String getBezeichnung_nl() {
return bezeichnung_nl;
}
public void setBezeichnung_nl(String bezeichnung_nl) {
this.bezeichnung_nl = bezeichnung_nl;
}
public String getBerufskennzeichen() {
return berufskennzeichen;
}
public void setBerufskennzeichen(String berufskennzeichen) {
this.berufskennzeichen = berufskennzeichen;
}
public Date getPrufungtermin() {
return prufungtermin;
}
public String getHochschulberuf() {
return hochschulberuf;
}
public void setHochschulberuf(String hochschulberuf) {
this.hochschulberuf = hochschulberuf;
}
public void setPrufungtermin(Date prufungtermin) {
this.prufungtermin = prufungtermin;
}
public List<String> getLbkgruppes() {
return lbkgruppes;
}
public void setLbkgruppes(List<String> lbkgruppes) {
this.lbkgruppes = lbkgruppes;
}
public String getBezeichnung_nk() {
return bezeichnung_nk;
}
public void setBezeichnung_nk(String bezeichnung_nk) {
this.bezeichnung_nk = bezeichnung_nk;
}
@Override
public String toString() {
return "Beruf [bezeichnung" + bezeichnung + ",codeba=" + codeba + ",ausbildung=" + ausbildung + ",kundenid="
+ kundenid + ",internalonly=" + internalonly + "" + ",berufsgrupperef=" + berufsgrupperef
+ ",berufskennzeichen=" + berufskennzeichen + ",lbkgruppes=" + lbkgruppes + ",hochschulberuf="
+ hochschulberuf + "qualifikationsNiveaus=" + qualifikationsNiveaus + ",bezeichnung_nk="
+ bezeichnung_nk + ",bezeichnung_nl=" + bezeichnung_nl + " ]";
}
}
und hier die Preparetstatmentsetter :
Java:
public class BerufpreparedStatementSetter implements ItemPreparedStatementSetter<BerufXml> {
@Override
public void setValues(BerufXml beruf, PreparedStatement ps) throws SQLException {
ps.setString(1, beruf.getBezeichnung_nk());
ps.setFloat(2, beruf.getCodeba());
ps.setString(3, beruf.getTyp());
ps.setInt(4, "a".equalsIgnoreCase(beruf.getTyp()) ? 1 : 0);
ps.setInt(5, beruf.getKundenid());
ps.setInt(6, beruf.getInternalonly());
ps.setInt(7, beruf.getBerufsgrupperef());
ps.setString(8, beruf.getBerufskennzeichen());
ps.setInt(9, "ja".equalsIgnoreCase(beruf.getHochschulberuf()) ? 1 : 0);
ps.setString(10, beruf.getBezeichnung_nk());
ps.setString(11, beruf.getBezeichnung_nl());
ps.setDate(12, beruf.getPrufungtermin());
ps.setInt(13, beruf.getEbene());
ps.setString(14, beruf.getZustand());
ps.setString(15, beruf.getKuenstler());
ps.setString(16, beruf.getSuchname_nl());
}
}
Und hier meine BatchConfig :
Java:
@Configuration
@EnableBatchProcessing
public class BatchConfig {
@Autowired
private JobBuilderFactory jobBuilderFactory;
@Autowired
private StepBuilderFactory stepBuilderFactory;
@Autowired
private DataSource datasource;
@Bean
public BerufItemProcessor processor() {
return new BerufItemProcessor();
}
public static void setupDefaultSecurity(XStream xstream) {
xstream.allowTypesByWildcard(new String[] { "com.datenbankberufe.model.**" });
}
@Bean
public StaxEventItemReader<BerufXml> reader() {
StaxEventItemReader<BerufXml> reader = new StaxEventItemReader<BerufXml>();
reader.setResource(new ClassPathResource("vam_beruf_kurz.xml"));
reader.setFragmentRootElementName("beruf");
Map<String, String> aliasesMap = new HashMap<String, String>();
aliasesMap.put("beruf", "com.datenbankberufe.model.BerufXml");
aliasesMap.put("qualifikationsNiveau", "com.datenbankberufe.model.QualifikationsNiveau");
XStreamMarshaller marshaller = new XStreamMarshaller();
marshaller.setAliases(aliasesMap);
marshaller.getXStream().allowTypesByWildcard(new String[] { "com.datenbankberufe.model.**" });
marshaller.getXStream().processAnnotations(BerufXml.class);
reader.setUnmarshaller(marshaller);
return reader;
}
@Bean
public JdbcBatchItemWriter<BerufXml> writer() {
JdbcBatchItemWriter<BerufXml> writer = new JdbcBatchItemWriter<BerufXml>();
writer.setDataSource(datasource);
writer.setSql(
"INSERT INTO beruf(bezeichnung,codeba,typ,ausbildung,kundenid,internalonly,berufsgrupperef,berufskennzeichen,hochschulberuf,bezeichnung_mk,bezeichnung_wk,prufungtermin,ebene,zustand,kuenstler,suchname_nl) VALUES(?,?,?,?,?,?,?,?,?,?,?,?,?,?,?,?)");
writer.setItemPreparedStatementSetter(new BerufpreparedStatementSetter());
return writer;
}
@Bean
public Step step1() {
return stepBuilderFactory.get("step1").<BerufXml, BerufXml>chunk(100).reader(reader()).processor(processor())
.writer(writer()).build();
}
@Bean
public Job exportBerufJob() {
return jobBuilderFactory.get("importBerufJob").incrementer(new RunIdIncrementer()).flow(step1()).end().build();
}
}
Ich werde dankbar , wenn jemandem mir helfen kann.