ошибка синтаксического анализатора дайджеста java.lang.NoSuchMethodException: Employee.‹init›()

Я пытаюсь разобрать xml с помощью дайджеста.

Мой XML

<root>
<Employee>
    <Id>1</Id>
    <FirstName>Charles</FirstName>
    <LastName>Madigen</LastName>
    <Location>Louisiana</Location>
    <Skill>Accountant</Skill>
</Employee>
</root>

Мой класс сотрудников

public class Employee { 
    private int empId;
    private String fName;
    private String lName;
    private String location;
    private String skill;   
    public Employee(int empId, String fName, String lName, String location,
            String skill) {
        this.empId = empId;
        this.fName = fName;
        this.lName = lName;
        this.location = location;
        this.skill = skill;
    }
    @Override
    public String toString() {
        return "Employee [empId=" + empId + ", fName=" + fName + ", lName="
                + lName + ", location=" + location + ", skill=" + skill + "]";
    }

    public void setEmpId(int empId) {
        this.empId = empId;
    }

    public void setfName(String fName) {
        this.fName = fName;
    }

    public void setlName(String lName) {
        this.lName = lName;
    }

    public void setLocation(String location) {
        this.location = location;
    }
    public void setSkill(String skill) {
        this.skill = skill;
    }

}

и мой класс читателей

public class CSVtoXMLTransformer {

    public static void main(String[] args) throws IOException  {        
        CSVtoXMLTransformer cx=new CSVtoXMLTransformer();
        //cx.transfromer();
        cx.validator();
    }                               

    void validator() throws IOException{                        
        String itemTag = "root/Employee";
        Digester digester = new Digester();
        digester.setValidating(false);
        digester.addObjectCreate(itemTag, "assignment3.Employee");
        digester.addCallMethod(itemTag + "/Id", "setEmpId", 0);
        digester.addCallMethod(itemTag + "/FirstName", "setfName", 0);
        digester.addCallMethod(itemTag + "/LastName", "setlName", 0);
        digester.addCallMethod(itemTag + "/Location", "setLocation", 0);
        digester.addCallMethod(itemTag + "/Skill", "setSkill", 0);   

          File inputFile = new File( "generatedEmployee.xml" );
          Employee emp;
        try {
            emp = (Employee)digester.parse( inputFile );
             System.out.println(emp);
        } catch (SAXException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }                               
    }        
}

Но во время работы я получаю эту ошибку, может ли кто-нибудь помочь мне в этом

org.xml.sax.SAXParseException; systemId: file:/D:/workspace/poc2/generatedEmployee.xml; lineNumber: 2; columnNumber: 11; Error at line 2 char 11: assignment3.Employee
    at org.apache.commons.digester.Digester.createSAXException(Digester.java:3363).......
Caused by: java.lang.NoSuchMethodException: assignment3.Employee.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)
    ... 17 more.....

person user3123372    schedule 11.01.2016    source источник


Ответы (2)


Caused by: java.lang.NoSuchMethodException: assignment3.Employee.<init>()
    at java.lang.Class.getConstructor0(Unknown Source)

Метод с сигнатурой assignment3.Employee.<init>() не найден в вашем скомпилированном коде, поэтому JVM вызвала java.lang.NoSuchMethodException Exception.

В вашем классе вы создали параметризованный конструктор, когда вы создаете параметризованный конструктор, компилятор не будет создавать конструктор по умолчанию, поэтому вам также необходимо реализовать конструктор по умолчанию.

person atish shimpi    schedule 11.01.2016

Вам нужен конструктор по умолчанию в вашем классе сотрудников:

public class Employee { 
    private int empId;
    private String fName;
    private String lName;
    private String location;
    private String skill;   

    public Employee(){}; //Default constructor

    public Employee(int empId, String fName, String lName, String location,
            String skill) {
        this.empId = empId;
        this.fName = fName;
        this.lName = lName;
        this.location = location;
        this.skill = skill;
    }
    @Override
    public String toString() {
        return "Employee [empId=" + empId + ", fName=" + fName + ", lName="
                + lName + ", location=" + location + ", skill=" + skill + "]";
    }
...
}
person Jens    schedule 11.01.2016