Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Diskuze: marshaller.marshal - ObjectFactory is abstract; cannot be instantiated

V předchozím kvízu, Online test znalostí Java, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Ivana Učňová:13.11.2023 13:42

Nevím si rady se středně těžkým příkladem z lekce https://www.itnetwork.cz/…chemata-java - vytvořte program, který pomocí pluginu jaxb2 převede seznam do XML formátu
Vytvořím POM, stáhnu Dependencies, vytvořím XML schéma, nabuilduju, mám složku Target...

marshaller.marshal(new ObjectFactory().createObjednavky(getObjednavky()), System.out);

Zde mi Netbeans hlásí "ObjectFactory is abstract; cannot be instantiated"

--- jaxb2:2.5.0:xjc (objednavky) @ KnihaObjednavek ---
Ignored given or default xjbSources [C:\Users\acer­c\Dropbox\Net­Beans Project\Kniha­Objednavek\src\ma­in\xjb], since it is not an existent file or directory.
No changes detected in schema or binding files - skipping JAXB generation.

--- resources:3.3­.1:resources (default-resources) @ KnihaObjednavek ---
skip non existing resourceDirectory C:\Users\acer­c\Dropbox\Net­Beans Project\Kniha­Objednavek\src\ma­in\resources

--- compiler:3.11­.0:compile (default-compile) @ KnihaObjednavek ---
Changes detected - recompiling the module! :source
Compiling 4 source files with javac [debug target 17] to target\classes


COMPILATION ERROR :


cz/itnetwork/Kni­haObjednavek.ja­va javax.naming.spi­.ObjectFactory is abstract; cannot be instantiated
1 error

package cz.itnetwork;

import cz.itnetwork.objednavky.xml.Objednavka;
import cz.itnetwork.objednavky.xml.Objednavky;
import java.io.IOException;
import java.nio.file.Files;
import java.nio.file.Path;
import java.nio.file.Paths;
import java.util.ArrayList;
import java.util.List;
import javax.naming.spi.ObjectFactory;
import javax.xml.XMLConstants;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.validation.Schema;
import javax.xml.validation.SchemaFactory;
import org.xml.sax.SAXException;


public class KnihaObjednavek {
    static ArrayList<Objednavka> seznamObjednavek = new ArrayList<>();

    public static void main(String[] args) throws IOException, JAXBException, SAXException {
        Objednavka objednavka = new Objednavka();
        Path cesta = Paths.get("Objednavky.txt");

        // načtení dat ze souboru
        List<String> radky = Files.readAllLines(cesta);
        for (String radek : radky) {
            String[] rozdeleno = radek.split(" ");
            objednavka.setDatumObjednavky(rozdeleno[0]);
            objednavka.setEmail(rozdeleno[1]);
            objednavka.setAdresaDoruceni(rozdeleno[2]);
            objednavka.setDatumObjednavky(rozdeleno[3]);
            objednavka.setCena(Integer.parseInt(rozdeleno[4]));
            objednavka.setPocetKusu(Integer.parseInt(rozdeleno[5]));

            seznamObjednavek.add(objednavka);
        }

        String xsdFile = "src/main/resource/xsd/objednavky.xsd";

        JAXBContext jaxbContext = JAXBContext.newInstance(ObjectFactory.class);
        Marshaller marshaller = jaxbContext.createMarshaller();
        SchemaFactory sf = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI);
        Schema uzivateleSchema = sf.newSchema(KnihaObjednavek.class.getResource(xsdFile));

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setSchema(uzivateleSchema);
        marshaller.marshal(new ObjectFactory().createObjednavky(getObjednavky()), System.out);
    }

    private static Objednavky getObjednavky() {
        Objednavky objednavky = new Objednavky();
        final List<Objednavka> kolekceObjednavek = objednavky.getObjednavka();
        kolekceObjednavek.addAll(seznamObjednavek);

        return objednavky;
    }
}

Zkusil jsem: Najít chybu v POM, ve schématu, prošla jsem znovu lekce, stáhla jsem řešení a hledala, kde mám chybu.

Chci docílit: Program by měl vypsat XML strukturu včetně dat načtených z txt souboru.

 
Odpovědět
13.11.2023 13:42
Avatar
Atrament
Tvůrce
Avatar
Odpovídá na Ivana Učňová
Atrament:14.11.2023 19:31

Importuješ špatnou ObjectFactory, musíš importovat tu ObjectFactory, která se ti vytvořila v balíčku, který jsi nastavila v pom.xml v nastavení jaxb2-maven-plugin pluginu

Akceptované řešení
+20 Zkušeností
+2,50 Kč
Řešení problému
 
Nahoru Odpovědět
14.11.2023 19:31
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 2 zpráv z 2.