Java 类sabir.test.jms.entity.Message或其任何超类在此上下文中都是已知的

Java 类sabir.test.jms.entity.Message或其任何超类在此上下文中都是已知的,java,xml,jaxb,Java,Xml,Jaxb,我在学习教程,我需要创建一个类,在这个类中它有一个将任何对象转换为xml的函数 在该示例中,使用了以下代码: import java.io.FileOutputStream; import javax.xml.bind.JAXBContext; import javax.xml.bind.Marshaller; public class ObjectToXml { public static void main(String[] args) throws Excep

我在学习教程,我需要创建一个类,在这个类中它有一个将任何对象转换为xml的函数

在该示例中,使用了以下代码:

    import java.io.FileOutputStream;  

import javax.xml.bind.JAXBContext;  
import javax.xml.bind.Marshaller;  


public class ObjectToXml {  
public static void main(String[] args) throws Exception{  
    JAXBContext contextObj = JAXBContext.newInstance(Employee.class);  

    Marshaller marshallerObj = contextObj.createMarshaller();  
    marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  

    Employee emp1=new Employee(1,"Vimal Jaiswal",50000);  

    marshallerObj.marshal(emp1, new FileOutputStream("employee.xml"));  

}  
}  
这是我的密码:

package sabir.test.jms.services;



import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.IOException;

import javax.xml.bind.JAXBContext;
import javax.xml.bind.JAXBException;
import javax.xml.bind.Marshaller;
import javax.xml.bind.PropertyException;

import sabir.test.jms.entity.Message;  



public class ObjectToXml {
    public static void convertObjectToXml (Object object) throws IOException, JAXBException
    {


    JAXBContext contextObj = JAXBContext.newInstance(object.ExCourse.class);  

    Marshaller marshallerObj = contextObj.createMarshaller();  
    marshallerObj.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);  

    FileOutputStream xmlFile = new FileOutputStream(object.getClass().getName() + ".xml");

    marshallerObj.marshal(object, xmlFile);  

    } 

    public static void main (String[] args)
    {
        Message msg = new Message ("1","MT 103", "Sabir","Banda","CIMB","May Bank", 1000);
        try {
            convertObjectToXml (msg);
        } catch (IOException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        } catch (JAXBException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }
    }
}
我希望能够将任何消息转换为XML,当我实现时,我遇到以下错误:

javax.xml.bind.JAXBException:class sabir.test.jms.entity.Message及其任何超类在此上下文中都是未知的。 位于com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:582) 位于com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482) 位于com.sun.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323) 位于com.sun.xml.bind.v2.runtime.MarshallerImpl.marshall(MarshallerImpl.java:251) 位于javax.xml.bind.helpers.AbstractMarshallerImpl.marshall(AbstractMarshallerImpl.java:95) 位于sabir.test.jms.services.ObjectToXml.convertObjectToXml(ObjectToXml.java:31) 位于sabir.test.jms.services.ObjectToXml.main(ObjectToXml.java:39)

为什么我会犯这个错误

编辑 我将这行代码编辑为以下内容:

    JAXBContext contextObj = JAXBContext.newInstance(object.getClass());  
现在我没有收到任何错误,但是我的程序被终止了

这是我的消息类:

package sabir.test.jms.entity;
import javax.xml.bind.annotation.XmlAttribute;  
import javax.xml.bind.annotation.XmlElement;  
import javax.xml.bind.annotation.XmlRootElement;


import java.io.Serializable;


@XmlRootElement  
public class Message implements Serializable{


    private String id; 
    private String type;

    private String senderName;
    private String recieverName;

    private String senderBankName;
    private String recieverBankName;

    private long amount;

    public Message() {} 
    public Message(String id, String type, String senderName, String recieverName, String senderBankName,
            String recieverBankName, long amount) {
        super();
        this.id = id;
        this.type = type;
        this.senderName = senderName;
        this.recieverName = recieverName;
        this.senderBankName = senderBankName;
        this.recieverBankName = recieverBankName;
        this.amount = amount;
    }

    @XmlAttribute  
    public String getId() {
        return id;
    }

    public void setId(String id) {
        this.id = id;
    }

    @XmlElement
    public String getType() {
        return type;
    }

    public void setType(String type) {
        this.type = type;
    }

    @XmlElement
    public String getSenderName() {
        return senderName;
    }

    public void setSenderName(String senderName) {
        this.senderName = senderName;
    }

    @XmlElement
    public String getRecieverName() {
        return recieverName;
    }


    public void setRecieverName(String recieverName) {
        this.recieverName = recieverName;
    }

    @XmlElement
    public String getSenderBankName() {
        return senderBankName;
    }

    public void setSenderBankName(String senderBankName) {
        this.senderBankName = senderBankName;
    }

    @XmlElement
    public String getRecieverBankName() {
        return recieverBankName;
    }

    public void setRecieverBankName(String recieverBankName) {
        this.recieverBankName = recieverBankName;
    }

    @XmlElement
    public long getAmount() {
        return amount;
    }

    public void setAmount(long amount) {
        this.amount = amount;
    }


}

你不认为你错过了教程中使用的注释吗@XmlRootElement和@XmlAttribute分别位于类和方法之前???@ShayHaned否,我编辑了这个问题以包含我的消息类。另外,我不再收到错误,但是我的应用程序在运行时被终止。显然,编辑至少有助于删除异常,但是为什么要在Message类的构造函数中调用super()?因为你的类实现了可序列化?仅仅因为要实现Serializable而调用super()没有任何区别。应用程序终止,因为您没有在屏幕上打印任何内容console@ShayHaned一件事是使用object.getClass().getSimpleName()是的,我在前面的评论中正要指出这一点,但在其他方面我很着急,事实上object.getClass().getSimpleName()将是最佳实践:)