簡體   English   中英

線程“主”中的異常javax.xml.bind.JAXBException:此上下文已知類或其任何超類

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM