线程“主”中的异常javax.xml.bind.JAXBException:提供程序com.sun.xml.bind.v2.ContextFactory无法实例化

Aar*_*ron 5 jaxb marshalling

我正在尝试测试JAXB解组器/编组器。这是我的代码

JAXBContext context = JAXBContext.newInstance(ClientUser.class.getPackage().getName());
Run Code Online (Sandbox Code Playgroud)

还有我实体的代码

@XmlRootElement(name = "user")
public class ClientUser {
    private String name;

    public ClientUser() {}

    public ClientUser(String name) {
        this.name = name;
    }

    @XmlElement(name = "name")
    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }
}
Run Code Online (Sandbox Code Playgroud)

即使我将实体类添加到实体类

@XmlRegistry
class ObjectFactory {
    ClientUser createPerson() {
        return new ClientUser();
    }
}
Run Code Online (Sandbox Code Playgroud)

我仍然不断收到这个例外

Exception in thread "main" javax.xml.bind.JAXBException: Provider com.sun.xml.bind.v2.ContextFactory could not be instantiated: javax.xml.bind.JAXBException: "com.example.ws.poc.entity" doesnt contain ObjectFactory.class or jaxb.index
 - with linked exception:
[javax.xml.bind.JAXBException: "com.example.ws.poc.entity" doesnt contain ObjectFactory.class or jaxb.index]
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:146)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:335)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:431)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:394)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:298)
Run Code Online (Sandbox Code Playgroud)

如何解决此错误?

bdo*_*han 4

JAXB 实现不执行包扫描。如果您从包名称引导,JAXB 将查找一个ObjectFactory(用 注释@XmlRegistry)或一个jaxb.index包含短类名的文件,每个类名都在一个新行上。

如果您没有这两项,您可以JAXBContext自行创建域类。

JAXBContext jc = JAXBContext.newInstance(Foo.class, Bar.class);
Run Code Online (Sandbox Code Playgroud)