Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java JAXB使用名称空间解组。。怎样?_Java_Xml_Jaxb_Unmarshalling - Fatal编程技术网

Java JAXB使用名称空间解组。。怎样?

Java JAXB使用名称空间解组。。怎样?,java,xml,jaxb,unmarshalling,Java,Xml,Jaxb,Unmarshalling,假设我的有效xml如下所示: <A xmlns="something"> <B>4</B> </A> 我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常 这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎 任何帮助都是好的 编辑 堆栈跟踪: javax.xml.bind.UnmarshalException: unexpected element (uri:"somet

假设我的有效xml如下所示:

<A xmlns="something">
   <B>4</B>
</A>
我怎样才能让它工作?如果我的xml标记有一些相关元素,如上面的“xmlns”,则JAXB解组器会抛出异常

这是我第一次这么做,所以我对JAXB、解编等都一无所知。我在苦苦挣扎 任何帮助都是好的

编辑 堆栈跟踪:

javax.xml.bind.UnmarshalException: unexpected element (uri:"something", local:"A"). Expected elements are <{}B>,<{}A>
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:247)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:242)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:109)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1131)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:556)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:538)
at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:153)
at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:613)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3132)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:852)
at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
at   com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
at ...
javax.xml.bind.UnmarshaleException:意外元素(uri:“something”,local:“A”)。预期要素包括:,
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:726)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:247)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:242)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:109)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1131)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.\u startElement(UnmarshallingContext.java:556)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:538)
位于com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:153)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:509)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:374)
位于com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:613)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3132)
在com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:852)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:602)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:112)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:505)
在

如果xml文档中有名称空间,那么jaxb注释中也需要有名称空间

例如,像这样:

@XmlRootElement(name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{

@XmlElement(name = "B")
private String b;

public Data(String b) {
    this.b = b;
}

public Data() {
}
// Getter/setter generated by lombok.
}
@XmlRootElement(name = "A", namespace="something")
@XmlAccessorType (XmlAccessType.FIELD)
public class Data{
@XmlRootElement(namespace="something", name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{
    @XmlElement(namespace="something", name = "B") // <-- mind this
    private String b;

    public Data(String b) {
        this.b = b;
    }

    public Data() {
    }
    // Getter/setter generated by lombok.
}

如果xml文档中有名称空间,那么jaxb注释中也需要有名称空间

例如,像这样:

@XmlRootElement(name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{

@XmlElement(name = "B")
private String b;

public Data(String b) {
    this.b = b;
}

public Data() {
}
// Getter/setter generated by lombok.
}
@XmlRootElement(name = "A", namespace="something")
@XmlAccessorType (XmlAccessType.FIELD)
public class Data{
@XmlRootElement(namespace="something", name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{
    @XmlElement(namespace="something", name = "B") // <-- mind this
    private String b;

    public Data(String b) {
        this.b = b;
    }

    public Data() {
    }
    // Getter/setter generated by lombok.
}

XmlRootElement
的来源:

public@interface XmlRootElement{
/**
*XML元素的命名空间名称。
*
*如果值为“##default”,则派生XML命名空间名称
*从类({@link XmlSchema})的包中
*如果包未命名,则XML命名空间为默认空
*命名空间。
*/
字符串名称空间()默认值“##默认值”;
//其他文件
您还应该记住,此规则也适用于大多数JAXB注释,因此您需要指定根元素,以及其他元素,并显式指定名称空间,如下所示:

@XmlRootElement(name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{

@XmlElement(name = "B")
private String b;

public Data(String b) {
    this.b = b;
}

public Data() {
}
// Getter/setter generated by lombok.
}
@XmlRootElement(name = "A", namespace="something")
@XmlAccessorType (XmlAccessType.FIELD)
public class Data{
@XmlRootElement(namespace="something", name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{
    @XmlElement(namespace="something", name = "B") // <-- mind this
    private String b;

    public Data(String b) {
        this.b = b;
    }

    public Data() {
    }
    // Getter/setter generated by lombok.
}
@XmlRootElement(namespace=“something”,name=“A”)
@XmlAccessorType(XmlAccessType.FIELD)
@盖特//来自龙目岛
公共类数据{

@XmlElement(namespace=“something”,name=“B”)/来自
XmlRootElement
的来源:

public@interface XmlRootElement{
/**
*XML元素的命名空间名称。
*
*如果值为“##default”,则派生XML命名空间名称
*从类({@link XmlSchema})的包中
*如果包未命名,则XML命名空间为默认空
*命名空间。
*/
字符串名称空间()默认值“##默认值”;
//其他文件
您还应该记住,此规则也适用于大多数JAXB注释,因此您需要指定根元素,以及其他元素,并显式指定名称空间,如下所示:

@XmlRootElement(name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{

@XmlElement(name = "B")
private String b;

public Data(String b) {
    this.b = b;
}

public Data() {
}
// Getter/setter generated by lombok.
}
@XmlRootElement(name = "A", namespace="something")
@XmlAccessorType (XmlAccessType.FIELD)
public class Data{
@XmlRootElement(namespace="something", name = "A")
@XmlAccessorType (XmlAccessType.FIELD)
@Getter //from lombok
public class Data{
    @XmlElement(namespace="something", name = "B") // <-- mind this
    private String b;

    public Data(String b) {
        this.b = b;
    }

    public Data() {
    }
    // Getter/setter generated by lombok.
}
@XmlRootElement(namespace=“something”,name=“A”)
@XmlAccessorType(XmlAccessType.FIELD)
@盖特//来自龙目岛
公共类数据{

@xmlement(namespace=“something”,name=“B”)/您所需要的只是向A添加一个@xmldattribute(与相应的getter/setter连接)


编辑:这并不能回答问题,因为问题是关于xml名称空间而不是属性的。

您所需要的只是将@XmlAttribute添加到(与相应的getter/setter连接)


编辑:这并没有回答问题,因为问题是关于xml名称空间而不是属性的。

你能发布你的代码和异常吗?
b
字段不需要getter和setter方法吗?是的,我正在使用lombok.:@getter注释来自lombok。你能发布你的代码和异常吗?
b
field需要getter和setter方法吗?确实需要,我正在使用lombok.:)@getter注释来自lombok。好的..另一个问题,如果我有多个“名称空间”怎么办?好的..另一个问题,如果我有多个“名称空间”怎么办?哦,好的!如果我有多个不同的名称空间怎么办?然后您更改cor的名称空间属性响应
XmlRootElement
XmlElement
xmldattribute
,等等。我的意思是,我假设您的
xsi
引用了XMLSchema实例名称空间。然后您将添加一个字符串字段,并用
@xmldattribute(名称空间=java.xml.xmlstants.W3C_xml_SCHEMA_实例_NS_URI,name=“type”)对其进行注释
获取您在
xsi:type
属性中设置的值。哦!那么名称空间都是一些已经定义为xml格式一部分的元素。好吧。我不知道。非常感谢!我会在解组工作后将此标记为答案。我将