# XML Attribute mit JAVA einlesen mit Spring Batch



## iman (24. Jan 2022)

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.

```
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 : 


```
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 : 



```
@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.


----------

