![](/img/trans.png)
[英]javax.xml.bind.MarshalException - with linked exception: [javax.xml.bind.JAXBException: class ** nor any of its super class is known to this context
[英]Exception in thread “main” javax.xml.bind.JAXBException: class nor any of its super class is known to this context
可以幫我為什么下面拋出
線程“主”中的異常javax.xml.bind.JAXBException:此上下文已知com.jaxb.model.copy.copy.Snapshot類或其任何超類。 在com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)在com.sun.xml.bind.v2.runtime.XMLSerializer.childAsRoot(XMLSerializer.java:482)在com.sun.xml.bind.v2.runtime.JAXBContextImpl.getBeanInfo(JAXBContextImpl.java:588) com.sun.xml.bind.v2.runtime.MarshallerImpl.marshal(MarshallerImpl.java:251)上的.xml.bind.v2.runtime.MarshallerImpl.write(MarshallerImpl.java:323)在javax.xml.bind.helpers .AbstractMarshallerImpl.marshal(未知源),位於com.jaxb.model.copy.copy.Demo.main(Demo.java:29)
示范課
package com.jaxb.model.copy.copy;
import javax.xml.bind.JAXBContext;
import javax.xml.bind.Marshaller;
public class Demo
{
public static void main(String[] args) throws Exception {
JAXBContext jc = JAXBContext.newInstance("com.jaxb.model.copy.copy");
Snapshot snapshot = new Snapshot();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(snapshot, System.out);
}
}
對象工廠類
package com.jaxb.model.copy.copy;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.*;
import javax.xml.namespace.QName;
@XmlRegistry
public class ObjectFactory {
@XmlElementDecl(namespace = "http://soma/201407",name="bar")
public JAXBElement<Foo.Detail.Bar> createBar(Foo.Detail.Bar bar) {
return new JAXBElement<Foo.Detail.Bar>(new QName("bar"), Foo.Detail.Bar.class, bar);
}
}
快照類包com.jaxb.model.copy.copy;
import java.util.Date;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlType;
import com.fasterxml.jackson.annotation.JsonIgnore;
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
import com.guthyrenker.soma.ws.rest.v1.adapter.JsonDateTimeSerializer;
/**
* @author Srinivasa Kankipati
* @since 1.0
*/
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(propOrder = { "mask", "xmlns", "currentAsOf","foo" })
@XmlRootElement(name = "snapshot")
public class Snapshot
{
@XmlAttribute
public String mask;
@XmlElement
public Date currentAsOf;
@XmlAttribute
@JsonIgnore
public String xmlns;
@XmlElement(name = "foo")
private Foo foo;
public String getMask() {
return mask;
}
public void setMask(String mask) {
this.mask = mask;
}
public Date getCurrentAsOf() {
return currentAsOf;
}
public void setCurrentAsOf(Date currentAsOf) {
this.currentAsOf = currentAsOf;
}
public String getXmlns() {
return xmlns;
}
public void setXmlns(String xmlns) {
this.xmlns = xmlns;
}
public Foo getFoo() {
return foo;
}
public void setFoo(Foo foo) {
this.foo = foo;
}
}
富班
package com.jaxb.model.copy.copy;
import java.math.BigDecimal;
import javax.xml.bind.JAXBElement;
import javax.xml.bind.annotation.XmlAccessType;
import javax.xml.bind.annotation.XmlAccessorType;
import javax.xml.bind.annotation.XmlAttribute;
import javax.xml.bind.annotation.XmlElement;
import javax.xml.bind.annotation.XmlElementRef;
import javax.xml.bind.annotation.XmlRootElement;
import javax.xml.bind.annotation.XmlSeeAlso;
import javax.xml.bind.annotation.XmlType;
import javax.xml.bind.annotation.XmlValue;
import com.guthyrenker.soma.ws.rest.v1.model.ObjectFactory;
import com.guthyrenker.soma.ws.rest.v1.model.WSMarketingOfferOP;
import com.guthyrenker.soma.ws.rest.v1.model.WSMarketingOfferWEB;
import com.jaxb.model.copy.Snapshot;
import com.jverstry.annotations.generics.Market;
@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlSeeAlso({Snapshot.class})
public class Foo {
@XmlElement
protected Detail detail;
public Detail getDetail() {
return detail;
}
public void setDetail(Detail detail) {
this.detail = detail;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "bar"})
public static class Detail
{
@XmlElementRef(name="bar")
private JAXBElement<Foo.Detail.Bar> bar;
public JAXBElement<Foo.Detail.Bar> getBar() {
return bar;
}
public void setBar(JAXBElement<Foo.Detail.Bar> bar) {
this.bar = bar;
}
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "", propOrder = { "value" })
public static class Bar
{
@XmlAttribute
protected String baz;
@XmlValue
protected BigDecimal value;
public String getBaz() {
return baz;
}
public void setBaz(String baz) {
this.baz = baz;
}
public BigDecimal getValue() {
return value;
}
public void setValue(BigDecimal value) {
this.value = value;
}
}
}
}
在當前設置中,您的JAXBContext
將不知道您的Snapshot
類。 當您在上下文路徑上創建JAXBContext
時,JAXB將首先為從ObjectFactory
引用的類(或在jaxb.index
文件中列出)創建的類創建元數據,然后它將拉入可以傳遞到達的每個類。
您可以執行以下操作:
JAXBContext.newInstance(ObjectFactory.class, Snapshot.class);
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.