当前位置: 首页 > 知识库问答 >
问题:

当我尝试将java对象转换为xml文件时异常

翟缪文
2023-03-14

我正在尝试将java对象转换为xml文件。

这是对象的类:

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Employee {

    int eId;
    String eName;
    int eSalary;


    public Employee(){

    }

    public Employee(int eId, String eName, int eSalary) {
        this.eId = eId;
        this.eName = eName;
        this.eSalary = eSalary;
    }


    public int geteId() {
        return eId;
    }

    public void seteId(int eId) {
        this.eId = eId;
    }

    public String geteName() {
        return eName;
    }

    public void seteName(String eName) {
        this.eName = eName;
    }

    public int geteSalary() {
        return eSalary;
    }

    public void seteSalary(int eSalary) {
        this.eSalary = eSalary;
    }

    @Override
    public String toString() {
        return "Employee{" +
                "eId=" + eId +
                ", eName=" + eName +
                ", eSalary=" + eSalary +
                '}';
    }
}

这是我用来转换对象的类:

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import java.io.File;

public class XMLConverter {

    public static void main (String[] args){

        try {
            // create `Employee` object
            Employee employee = new Employee();
            employee.seteId(101);
            employee.seteName("John Watson");
            employee.seteSalary(30000);

            // create an instance of `JAXBContext`
            JAXBContext context = JAXBContext.newInstance(Employee.class);

            // create an instance of `Marshaller`
            Marshaller marshaller = context.createMarshaller();

            // enable pretty-print XML output
            marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

            // create XML file
            File file = new File("src//main//resources//employeebean.xml");

            // convert employee object to XML file
            marshaller.marshal(employee, file);

        } catch (JAXBException ex) {
            ex.printStackTrace();
        }


    }
}

当我运行main方法时,我得到了这个堆栈跟踪:

Exception in thread "main" java.lang.ExceptionInInitializerError
    at com.sun.xml.bind.v2.runtime.reflect.opt.AccessorInjector.prepare(AccessorInjector.java:81)
    at com.sun.xml.bind.v2.runtime.reflect.opt.OptimizedAccessorFactory.get(OptimizedAccessorFactory.java:115)
    at com.sun.xml.bind.v2.runtime.reflect.Accessor$GetterSetterReflection.optimize(Accessor.java:402)
    at com.sun.xml.bind.v2.runtime.property.SingleElementNodeProperty.<init>(SingleElementNodeProperty.java:94)
    at java.base/jdk.internal.reflect.DirectConstructorHandleAccessor.newInstance(DirectConstructorHandleAccessor.java:67)
    at java.base/java.lang.reflect.Constructor.newInstanceWithCaller(Constructor.java:499)
    at java.base/java.lang.reflect.Constructor.newInstance(Constructor.java:483)
    at com.sun.xml.bind.v2.runtime.property.PropertyFactory.create(PropertyFactory.java:128)
    at com.sun.xml.bind.v2.runtime.ClassBeanInfoImpl.<init>(ClassBeanInfoImpl.java:181)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.getOrCreate(JAXBContextImpl.java:503)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:320)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl.<init>(JAXBContextImpl.java:139)
    at com.sun.xml.bind.v2.runtime.JAXBContextImpl$JAXBContextBuilder.build(JAXBContextImpl.java:1138)
    at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:162)
    at java.base/jdk.internal.reflect.DirectMethodHandleAccessor.invoke(DirectMethodHandleAccessor.java:104)
    at java.base/java.lang.reflect.Method.invoke(Method.java:577)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:262)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:249)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:456)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:656)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:599)
    at XMLConverter.main(XMLConverter.java:18)
Caused by: java.lang.reflect.InaccessibleObjectException: Unable to make protected final java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int) throws java.lang.ClassFormatError accessible: module java.base does not "opens java.lang" to unnamed module @6833ce2c
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:354)
    at java.base/java.lang.reflect.AccessibleObject.checkCanSetAccessible(AccessibleObject.java:297)
    at java.base/java.lang.reflect.Method.checkCanSetAccessible(Method.java:200)
    at java.base/java.lang.reflect.Method.setAccessible(Method.java:194)
    at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.getMethod(Injector.java:184)
    at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.access$000(Injector.java:69)
    at com.sun.xml.bind.v2.runtime.reflect.opt.Injector$1.run(Injector.java:168)
    at com.sun.xml.bind.v2.runtime.reflect.opt.Injector$1.run(Injector.java:165)
    at java.base/java.security.AccessController.doPrivileged(AccessController.java:318)
    at com.sun.xml.bind.v2.runtime.reflect.opt.Injector.<clinit>(Injector.java:164)
    ... 22 more

Process finished with exit code 1


试图寻找解决方案,但仍然无法解决问题。

每个建议都非常感谢,提前感谢

共有1个答案

左丘阳晖
2023-03-14

您需要将此注释放在员工类@XmlAccessorType(XmlAccessType. FIELD)

 类似资料:
  • 我怎么能转换java对象到xml?我试图转换一个传入的java对象到xml在Spring集成与转换器豆。有没有其他的方法比编组在Jaxb?喜欢使用@TypeConver。或实现转换器类。

  • 问题内容: 按照目前的情况,这个问题不适合我们的问答形式。我们希望答案会得到事实,参考或专业知识的支持,但是这个问题可能会引起辩论,争论,民意调查或扩展讨论。如果您认为此问题可以解决并且可以重新提出,请访问帮助中心以获取指导。 7年前关闭。 将XML转换为Java对象的最佳方法是什么? 我不希望类似表示,但是想从XML中提取某些数据并填充Java对象。我看过XStream,但并不真正喜欢整个“调低

  • 我正在尝试使用JAXB从对象构建XML。 但是我错过了一些东西,因为我得到了一个例外: javax.xml.bind.MarshalExc0019-具有链接异常:[com.sun.istack.internal.SAXException2:类雇员及其任何超级类在此上下文中都是已知的。javax.xml.bind.JAXBExc0019:类雇员及其任何超级类在此上下文中都是已知的。]

  • 问题内容: 有人知道有什么好的库可以将平面文件转换为Java对象吗?我发现了扁虫,但我正在寻找替代品。 问题答案: FFP-平面文件解析库 http://jffp.sourceforge.net/

  • 问题内容: 我目前正在使用Newtonsoft将一些xml转换为json,以从RestExtension返回。 我的xml格式为 我将其转换为json 如果有多个项目,则可以正常工作。 我得到这个-json中的项目数组(这是我需要的): 但是,当只有一个时,可以这样转换(而不是数组): 正在阅读此内容的我的应用程序开发人员需要json返回一组项,无论是否存在一个或多个。 有没有办法欺骗它,以为它是

  • 问题内容: 是的,是的,我知道有关此主题的问题很多。但是我仍然找不到解决我问题的方法。我有一个带属性的Java对象。例如客户,如本例所示。我想要它的字符串表示形式。为此,Google建议使用JAXB。但是在所有示例中,创建的XML文件都会打印到文件或控制台,如下所示: 但是我必须使用该对象并以XML格式通过网络发送。所以我想得到一个表示XML的字符串。 我怎样才能做到这一点? 问题答案: 您可以使