Почему происходит странная ошибка

 
 
 
Сообщения:1
Есть xml-файл,
<?xml version="1.0" encoding="UTF-8"?>
<Lift>
    <variables>
        <variable storiesNumber = "25"/>
        <variable elevatorCapacity = "30"/>
        <variable passengerNumber = "13"/>
        <variable animationBoost = "2"/>
    </variables>
</Lift>

и я хочу достать значения из него, из sN я достаю их нормально, а когда достаю из остальных, происходит ошибка.
Код:
.......
final byte storiesNumber = gettingDataFromSourceXml("storiesNumber");
final byte elevatorCapacity = gettingDataFromSourceXml"elevatorCapacity");
byte passengerNumber = gettingDataFromSourceXml("passengerNumber");
byte animationBoost = gettingDataFromSourceXml("animationBoost");
........



public static byte gettingDataFromSourceXml(String x) {



        File fileXml = new File("config.xml");

        try {
            DocumentBuilderFactory dbf = DocumentBuilderFactory.newInstance();
            DocumentBuilder db = dbf.newDocumentBuilder();
            final Document doc = db.parse(new File("config.xml"));

            for (Node n = doc.getFirstChild(); n != null; n = n.getNextSibling()) {
                for (Node d = n.getFirstChild(); d != null; d = d.getNextSibling()) {
                    for (Node m = d.getFirstChild(); m != null; m = m.getNextSibling()) {

                        //изменить по возможности этот кусок кода.
                        final String stringValue;
                        if ("variable".equals(m.getNodeName())) {
                            stringValue = m.getAttributes().getNamedItem(x).getNodeValue().trim();
                            System.out.println(stringValue);
                            return  Byte.valueOf(stringValue);
                        }
                    }
                }
            }

        }
        catch (Exception e) {
            System.out.println("Problem`s in getting data from xml-file");
        }

        return -1;
    }
}

Где String x - serialNumber, elevatorCapacity, и т.п.
Изменен:06 янв 2018 08:36
 
 
Сообщения:1165
больно смотреть на этот код... я надеюсь что на учёбе в конце концов покажут приемлемый вариант.
скажу так - когда вы ловите ошибку - всегда распечатывайте стак. Ещё хорошо бы знать точно название класса ошибки и сообщение.
Другими словами ... если в кратце ваш Catch блок должен выглядить вот так
catch (Excepetion e) {
System.out.println (e.getClass().getName() + " with message : " + e.getMessage();
e.printStackTrace();
}

После чего - если непонятно
1. copy+paste+google
2. Если по прежнему непонятно то дебаг делать...

The meaning of life, universe and everything is 42!
 
 
Сообщения:313
а xml обязательно такой внутренний формат должен иметь ?
если настройки имеют какой фиксированный набор полей, то можно например, использовать JAXB для чтения таких настроек
например, есть класс аналогичный настройкам
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class List {
	@XmlElement
	private int storiesNumber;
	@XmlElement
	private int elevatorCapacity;
	@XmlElement
	private int passengerNumber;
	@XmlElement
	private int animationBoost;

	public List() {
	}

	@Override
	public String toString() {
		return "List{" +
		       "storiesNumber=" + storiesNumber +
		       ", elevatorCapacity=" + elevatorCapacity +
		       ", passengerNumber=" + passengerNumber +
		       ", animationBoost=" + animationBoost +
		       '}';
	}

	public void setStoriesNumber(int storiesNumber) {
		this.storiesNumber = storiesNumber;
	}

	public void setElevatorCapacity(int elevatorCapacity) {
		this.elevatorCapacity = elevatorCapacity;
	}

	public void setPassengerNumber(int passengerNumber) {
		this.passengerNumber = passengerNumber;
	}

	public void setAnimationBoost(int animationBoost) {
		this.animationBoost = animationBoost;
	}
}


создаем тестовый набор
private static void createXml() {
		List list = new List();
		list.setStoriesNumber(25);
		list.setElevatorCapacity(30);
		list.setPassengerNumber(13);
		list.setAnimationBoost(2);
		JAXB.marshal(list, new File("test.xml"));
	}


а xml выглядит так
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<List>
    <storiesNumber>25</storiesNumber>
    <elevatorCapacity>30</elevatorCapacity>
    <passengerNumber>13</passengerNumber>
    <animationBoost>2</animationBoost>
</List>


читаем
private static void loadXml() {
		List list = JAXB.unmarshal(new File("test.xml"), List.class);
		System.out.println(list);
	}


другое дело, когда в xml что угодно и в каком угодно виде приходит, тогда нужно изголяться
Изменен:09 янв 2018 21:27
 
 
Сообщения:313
Tigor:
скажу так - когда вы ловите ошибку - всегда распечатывайте стак. Ещё хорошо бы знать точно название класса ошибки и сообщение.

да, я тоже свой велик всегда использую, чтобы понятно откуда ноги растут у принтов.. типо
	private static void loadXml() {
		List list = JAXB.unmarshal(new File("test.xml"), List.class);
		LOG.debug(list);
	}

выдает
test.Test.loadXml(24): List{storiesNumber=25, elevatorCapacity=30, passengerNumber=13, animationBoost=2}


и сразу понятно точное место в коде

ну или с ошибкой..
public static void main(String[] args) { 
		try {
			loadXml();
		} catch (Exception e) {
			LOG.error(e);
		}
	}

	private static void loadXml() throws Exception {
		List list = JAXB.unmarshal(new File("test.xml"), List.class);
		LOG.debug(list);
	}


test.Test.main(22): javax.xml.bind.UnmarshalException
 - with linked exception:
[java.io.FileNotFoundException: D:\dev\java\projects\test\debug\test.xml (Не удается найти указанный файл)]
javax.xml.bind.JAXB.unmarshal(JAXB.java:156)
test.Test.loadXml(Test.java:27)
test.Test.main(Test.java:20)


и все сразу ясно и понятно что и где не так
Изменен:09 янв 2018 21:46
 
Модераторы:Нет
Сейчас эту тему просматривают:Нет