Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/xml/14.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_Xsd_Jaxb - Fatal编程技术网

如果在java类中找不到字段,则jaxb捕获异常

如果在java类中找不到字段,则jaxb捕获异常,java,xml,xsd,jaxb,Java,Xml,Xsd,Jaxb,如果在xml文件中找到的字段及其属性未在java类中定义,则当xml解组到java类时,我需要捕获异常。我无法完全构造xsd,不同的xml文件动态地放大xsd,xsd中有不同的标记。这就是为什么我们需要抓住指定的exc 提前感谢。默认情况下,如果遇到未映射的元素/属性,则实现不会引发异常,除非已覆盖默认的ValidationEventHandler,或者已在解组器上发送了Schema的实例 Java模型(根) 演示 package forum15875338; import java.io.S

如果在xml文件中找到的字段及其属性未在java类中定义,则当xml解组到java类时,我需要捕获异常。我无法完全构造xsd,不同的xml文件动态地放大xsd,xsd中有不同的标记。这就是为什么我们需要抓住指定的exc

提前感谢。

默认情况下,如果遇到未映射的元素/属性,则实现不会引发异常,除非已覆盖默认的
ValidationEventHandler
,或者已在
解组器上发送了
Schema
的实例

Java模型(根)

演示

package forum15875338;

import java.io.StringReader;
import javax.xml.bind.*;

public class Demo {

    private static final String XML = "<root><foo>Hello</foo><bar>World</bar></root>";

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Root.class);
        Unmarshaller unmarshaller = jc.createUnmarshaller();
        Marshaller marshaller = jc.createMarshaller();
        marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);

        // Unmarshal #1 = Default Unmarshal
        System.out.println("Unmarshal #1");
        Root root = (Root) unmarshaller.unmarshal(new StringReader(XML));
        marshaller.marshal(root, System.out);

        // Unmarshal #2 - Override Default ValidationEventHandler
        System.out.println("Unmarshal #2");
        unmarshaller.setEventHandler(new ValidationEventHandler() {
            @Override
            public boolean handleEvent(ValidationEvent event) {
                System.out.println(event.getMessage());
                return false;
            }
        });
        unmarshaller.unmarshal(new StringReader(XML));
    }

}
用于UM15875338的包;
导入java.io.StringReader;
导入javax.xml.bind.*;
公开课演示{
私有静态最终字符串XML=“HelloWorld”;
公共静态void main(字符串[]args)引发异常{
JAXBContext jc=JAXBContext.newInstance(Root.class);
Unmarshaller Unmarshaller=jc.createUnmarshaller();
Marshaller=jc.createMarshaller();
setProperty(marshaller.JAXB_格式化的_输出,true);
//解组#1=默认解组
System.out.println(“Unmarshal#1”);
Root=(Root)unmarshaller.unmarshal(新StringReader(XML));
marshaller.marshall(root,System.out);
//解组#2-覆盖默认ValidationEventHandler
System.out.println(“Unmarshal#2”);
unmarshaller.setEventHandler(新的ValidationEventHandler(){
@凌驾
公共布尔handleEvent(ValidationEvent事件){
System.out.println(event.getMessage());
返回false;
}
});
unmarshaler.unmarshal(新StringReader(XML));
}
}
输出

package forum15875338;

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Root {

    private String foo;

    public String getFoo() {
        return foo;
    }

    public void setFoo(String foo) {
        this.foo = foo;
    }

}
Unmarshal #1
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<root>
    <foo>Hello</foo>
</root>
Unmarshal #2
unexpected element (uri:"", local:"bar"). Expected elements are <{}foo>
Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"", local:"bar"). Expected elements are <{}foo>
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
    at com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101)
    at com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:243)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:478)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
    at com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
    at com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
    at com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
    at com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
    at com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
    at com.sun.org.apache.xerces.internal.jaxp.SAXParserImpl$JAXPSAXParser.parse(SAXParserImpl.java:568)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
    at com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
    at forum15875338.Demo.main(Demo.java:31)
Unmarshal#1
你好
拆封#2
意外元素(uri:,本地:“条”)。预期的要素是
线程“main”javax.xml.bind.UnmarshaleException中出现异常:意外元素(uri:,local:“bar”)。预期的要素是
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:642)
位于com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:254)
位于com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:249)
位于com.sun.xml.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:116)
位于com.sun.xml.bind.v2.runtime.unmarshaller.Loader.childElement(Loader.java:101)
位于com.sun.xml.bind.v2.runtime.unmarshaller.StructureLoader.childElement(StructureLoader.java:243)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.\u startElement(UnmarshallingContext.java:478)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:459)
位于com.sun.xml.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:148)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.startElement(AbstractSAXParser.java:506)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.scanStartElement(XMLNSDocumentScannerImpl.java:376)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:2715)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl.next(XMLDocumentScannerImpl.java:607)
在com.sun.org.apache.xerces.internal.impl.XMLNSDocumentScannerImpl.next(XMLNSDocumentScannerImpl.java:116)
位于com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl.scanDocument(XMLDocumentFragmentScannerImpl.java:488)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:835)
位于com.sun.org.apache.xerces.internal.parsers.XML11Configuration.parse(XML11Configuration.java:764)
位于com.sun.org.apache.xerces.internal.parsers.XMLParser.parse(XMLParser.java:123)
位于com.sun.org.apache.xerces.internal.parsers.AbstractSAXParser.parse(AbstractSAXParser.java:1210)
位于com.sun.org.apache.xerces.internal.jaxp.saxpasserimpl$jaxpsaxpasser.parse(saxpasserimpl.java:568)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:211)
位于com.sun.xml.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:184)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
位于javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
位于forum15875338.Demo.main(Demo.java:31)

您用来解析xml的服务应该抛出一个TagNotMappedException(例如),这样您就可以很容易地捕捉到它伟大的答案!谢谢!