NOVINKA: Získej 40 hodin praktických dovedností s AI – ZDARMA ke každému akreditovanému kurzu!
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: Cannot invoke "java.net.URL.toExternalForm()" because "schema" is null

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

Aktivity
Avatar
Ivana Učňová:15.11.2023 16:49

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
NetBeans nehlásí žádný problém, ale při spuštění programu to vyhodí následující chybu:
Exception in thread "main" java.lang.NullPo­interException: Cannot invoke "java.net.URL­.toExternalFor­m()" because "schema" is null
at java.xml/javax­.xml.validati­on.SchemaFacto­ry.newSchema(Sche­maFactory.java:644)
at cz.itnetwork.Kni­haObjednavek.ma­in(KnihaObjed­navek.java:48)

s odkazem na tento řádek kódu:

Schema objednavkySchema = sf.newSchema(KnihaObjednavek.class.getResource(xsdFile));
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 cz.itnetwork.objednavky.xml.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 = "/xsd/objednavky.xsd";


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

        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        marshaller.setProperty(Marshaller.JAXB_ENCODING, "UTF-8");
        marshaller.setSchema(objednavkySchema);
        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: Zkoušela jsem zkontrolovat cestu k souboru schématu, najít chybu ve schématu - porovnávala jsem se staženým řešením

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

 
Odpovědět
15.11.2023 16:49
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 1 zpráv z 1.