javax.xml.bind.UnmarshalException:意外元素.预期要素是(无)

 我们的生活小窍门 发布于 2023-02-10 13:53

我正在解决这个错误,同时解组一个字符串.我使用JAXB创建了Java文件.

JAXBContext jaxbContext = JAXBContext.newInstance(DocumentType.class);
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
// Input string posted below
DocumentType dType = (DocumentType) unmarshaller.unmarshal(new StringReader("input string"));

堆栈跟踪:

Exception in thread "main" javax.xml.bind.UnmarshalException: unexpected element (uri:"http://ocrsdk.com/schema/recognizedBusinessCard-1.0.xsd", local:"document"). Expected elements are (none)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.handleEvent(UnmarshallingContext.java:647)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:243)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportError(Loader.java:238)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.Loader.reportUnexpectedChildElement(Loader.java:105)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext$DefaultRootLoader.childElement(UnmarshallingContext.java:1048)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext._startElement(UnmarshallingContext.java:483)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallingContext.startElement(UnmarshallingContext.java:465)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.SAXConnector.startElement(SAXConnector.java:135)
    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.XMLNSDocumentScannerImpl$NSContentDriver.scanRootElementHook(XMLNSDocumentScannerImpl.java:602)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentFragmentScannerImpl$FragmentContentDriver.next(XMLDocumentFragmentScannerImpl.java:3065)
    at com.sun.org.apache.xerces.internal.impl.XMLDocumentScannerImpl$PrologDriver.next(XMLDocumentScannerImpl.java:881)
    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:489)
    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.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal0(UnmarshallerImpl.java:203)
    at com.sun.xml.internal.bind.v2.runtime.unmarshaller.UnmarshallerImpl.unmarshal(UnmarshallerImpl.java:175)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:157)
    at javax.xml.bind.helpers.AbstractUnmarshallerImpl.unmarshal(AbstractUnmarshallerImpl.java:214)
    at JaxbTest.main(JaxbTest.java:19)

XSD:




    

    
        
            
        
    

    
        
            
        
    

    
        
            
            
            
            
        
        
    

    
        
            
            
            
            
            
            
            
            
            
            
        
    

    
        
            
        
    

    
        
            
                
            
        
    

    
      
        
      
    


    
      
        
        
      
      
    

    
      
        
        
        
        
        
        
        
        
        
        
        
        
        
        
        
      
    


输入字符串:





  783-37-00


  783-37-01


  783-26-63


  john_sm@abbyy.com


  www.abbyy.com


  Otradnaya str., 2b, bld.6, 127273, Moscow, Russia


  John Smith


  ABBYY Headquarters


  Product Analyst


  ABBYY ABBYY Headquarters John Smith Product Analyst ABBYY Headquarters Otradnaya str., 2b, bld.6, 127273, Moscow, Russia Tel: 783-37-00 Fax: 783-26-63 john_sm@abbyy.com www.abbyy.com 



bdoughan.. 114

从XML模式生成JAXB模型时,与命名复杂类型对应的全局元素将捕获该元数据作为类中@XmlElementDeclcreate方法的注释ObjectFactory.由于您JAXBContext仅在DocumentType类上创建此元数据,因此未处理此元数据.如果从XML Schema生成JAXB模型,则应JAXBContext在生成的包名称或ObjectFactory类上创建,以确保处理所有必需的元数据.

示例解决方案

JAXBContext jaxbContext = JAXBContext.newInstance(my.generatedschema.dir.ObjectFactory.class);
DocumentType documentType = ((JAXBElement) jaxbContext.createUnmarshaller().unmarshal(inputStream)).getValue();

工作良好.unmarshaller.unmarshal()将返回JAXBElement 而不是DocumentType.调用getValue()来获取包装对象. (6认同)

第二步看起来像这样:`DocumentType doc =((JAXBElement )jaxbContext.createUnmarshaller().unmarshal(inputStream)).getValue();` (4认同)


bvdb.. 30

或者,如果您想坚持使用DocumentType该类.然后,您可以在DocumentType类的顶部添加以下注释.

    @XmlRootElement(name="document")

注意:String值"document"指的是xml消息的根标记的名称.

2 个回答
  • 从XML模式生成JAXB模型时,与命名复杂类型对应的全局元素将捕获该元数据作为类中@XmlElementDeclcreate方法的注释ObjectFactory.由于您JAXBContext仅在DocumentType类上创建此元数据,因此未处理此元数据.如果从XML Schema生成JAXB模型,则应JAXBContext在生成的包名称或ObjectFactory类上创建,以确保处理所有必需的元数据.

    示例解决方案

    JAXBContext jaxbContext = JAXBContext.newInstance(my.generatedschema.dir.ObjectFactory.class);
    DocumentType documentType = ((JAXBElement<DocumentType>) jaxbContext.createUnmarshaller().unmarshal(inputStream)).getValue();
    

    2023-02-10 13:55 回答
  • 或者,如果您想坚持使用DocumentType该类.然后,您可以在DocumentType类的顶部添加以下注释.

        @XmlRootElement(name="document")
    

    注意:String值"document"指的是xml消息的根标记的名称.

    2023-02-10 13:56 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有