【问题标题】:jaxb2 SAXParseException: Invalid content was foundjaxb2 SAXParseException:发现无​​效内容
【发布时间】:2018-07-03 17:59:57
【问题描述】:

我正在使用 spring.oxm 和带有 SAX Parser 的 jaxb2 将 java 对象编组为 xml。

我的 marshaller 抛出 org.xml.sax.SAXParseException 时遇到问题,说明存在:

发现从元素“ns59:ArtID”开始的无效内容。之一 应为 {[...],http://www.bipro.net/namespace/gevo":ArtID, [...]}。

在我的 org.springframework.oxm.jaxb.JAXBMarshaller.graph 中,一切似乎都很好,至少就我的理解而言。 该图在调试模式下显示了这些变量: 这是 jaxax.xml.transform.result.writer 在中断错误并留下如下输出字符串之前:

    <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
    <ns43:getShipmentResponse 
xmlns="http://www.bipro.net/namespace/basis" 
xmlns:ns2="http://www.bipro.net/namespace/nachrichten" 
xmlns:ns3="http://www.bipro.net/namespace/abrechnung" 
xmlns:ns4="http://www.bipro.net/namespace/allgemein" 
xmlns:ns5="http://www.bipro.net/namespace/schaden-leistung" 
xmlns:ns6="http://www.bipro.net/namespace/partner" 
xmlns:ns7="http://www.bipro.net/namespace/sachen" 
xmlns:ns8="http://www.bipro.net/namespace/versicherung/produktmodell/rechtsschutz" 
xmlns:ns9="http://www.bipro.net/namespace/produktmodell" 
xmlns:ns10="http://www.bipro.net/namespace/versicherung/produktmodell" 
xmlns:ns11="http://www.bipro.net/namespace/kapitalanlage/basis" 
xmlns:ns12="http://www.bipro.net/namespace/versicherung/produktmodell/komposit" 
xmlns:ns13="http://www.bipro.net/namespace/kapitalanlage/transaktion" 
xmlns:ns14="http://www.bipro.net/namespace/provision" 
xmlns:ns15="http://www.bipro.net/namespace/beteiligungsverhaeltnis" 
xmlns:ns16="http://www.bipro.net/namespace/kapitalanlage" 
xmlns:ns17="http://www.bipro.net/namespace/versicherung/produktmodell/kraftfahrt" 
xmlns:ns18="http://www.bipro.net/namespace/fragen" 
xmlns:ns19="http://www.bipro.net/namespace/versicherung/produktmodell/kranken" 
xmlns:ns20="http://www.bipro.net/namespace/vertrag" 
xmlns:ns21="http://www.bipro.net/namespace/foerderung" 
xmlns:ns22="http://www.bipro.net/namespace/versicherung/produktmodell/leben" 
xmlns:ns23="http://www.bipro.net/namespace/versicherung/unfall" 
xmlns:ns24="http://www.bipro.net/namespace/sepa" 
xmlns:ns25="http://www.bipro.net/namespace/versicherung/haftpflicht" 
xmlns:ns26="http://www.bipro.net/namespace/schaden-objekte" 
xmlns:ns27="http://www.bipro.net/namespace/schaden-details" 
xmlns:ns28="http://www.bipro.net/namespace/versicherung/sach" 
xmlns:ns29="http://www.bipro.net/namespace/fahrzeug"
xmlns:ns30="http://www.bipro.net/namespace/gevo" 
xmlns:ns32="http://www.bipro.net/namespace/evb" 
xmlns:ns33="http://www.bipro.net/namespace/prozesse/foerderdaten" 
xmlns:ns34="http://www.bipro.net/namespace/prozesse/partner" 
xmlns:ns35="http://www.bipro.net/namespace/prozesse/schaden" 
xmlns:ns36="http://www.bipro.net/namespace/prozesse/vertrag" 
xmlns:ns37="http://www.bipro.net/namespace/prozesse/versicherung/vertrag/komposit" 
xmlns:ns38="http://www.bipro.net/namespace/prozesse/versicherung/vertrag/kraftfahrt" 
xmlns:ns39="http://www.bipro.net/namespace/prozesse/versicherung/vertrag/kranken" 
xmlns:ns40="http://www.bipro.net/namespace/prozesse/versicherung/vertrag/leben" 
xmlns:ns41="http://www.bipro.net/namespace/versicherung/tarifierung" 
xmlns:ns42="http://www.bipro.net/namespace/tools/iban" 
xmlns:ns43="http://www.bipro.net/namespace/transfer" 
xmlns:ns44="http://www.bipro.net/namespace/transfer/abrechnung" 
xmlns:ns45="http://www.bipro.net/namespace/transfer/gevo" 
xmlns:ns46="http://www.bipro.net/namespace/transfer/inkassostoerfall" 
xmlns:ns47="http://www.bipro.net/namespace/transfer/schaden-leistung" 
xmlns:ns48="http://www.bipro.net/namespace/transfer/schadenrueckfrage" 
xmlns:ns49="http://www.bipro.net/namespace/transfer/sepa" 
xmlns:ns50="http://www.bipro.net/namespace/transfer/vertrag" 
xmlns:ns51="http://www.bipro.net/namespace/kontext/beruf" 
xmlns:ns52="http://www.bipro.net/namespace/kontext/betriebsart" 
xmlns:ns53="http://www.bipro.net/namespace/kontext/fahrzeug" 
xmlns:ns54="http://www.bipro.net/namespace/kontext/partner" 
xmlns:ns55="http://www.bipro.net/namespace/kontext/schaden" 
xmlns:ns56="http://www.bipro.net/namespace/kontext/unternehmen" 
xmlns:ns57="http://www.bipro.net/namespace/kontext/vertrag" 
xmlns:xmime="http://www.w3.org/2005/05/xmlmime">             <ns43:Response>
            <ns2:BiPROVersion>2.6.1.0.0</ns2:BiPROVersion>
            <ns2:Status>
                <ns2:ProzessID>1530635989611</ns2:ProzessID>
                <ns2:Zeitstempel>2018-07-03T18:41:12</ns2:Zeitstempel>
                <ns2:StatusID>OK</ns2:StatusID>
                <ns2:Schwebe>false</ns2:Schwebe>
                <ns2:Meldung>
                    <ns2:ArtID>Hinweis</ns2:ArtID>
                    <ns2:MeldungID>04000</ns2:MeldungID>
                </ns2:Meldung>
            </ns2:Status>
            <ns43:Lieferung>
                <ns43:ID>1530636072667</ns43:ID>
                <ns43:Einstellzeitpunkt>2016-12-05T00:00:00</ns43:Einstellzeitpunkt>
                <ns43:Kategorie>120000000</ns43:Kategorie>
                <ns43:VerfuegbarBis>2019-12-05</ns43:VerfuegbarBis>
                <ns43:Transfer xsi:type="ns45:CT_GeVoTransfer" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"

有没有人有想法可以指出正确的方向?

Lexicore 要求做两件事。 1. 完整的 XSD,您可以从我在https://github.com/JoBieker/soap-bipro/tree/master/securess-bipro/src/main/resources/xsd 的开放 github 存储库中获取。 2. 完整的 xml,我没有,因为我想创建它。但如果我能成功的话,应该会出现这样的事情。这是另一个gevo-transfer case,但结构应该相同。你可以在这里下载:https://github.com/JoBieker/soap-bipro/blob/master/securess-bipro/src/main/resources/target-xml.xml

最后,lexicores 问题告诉我,我完全忘了提到我想编组一个 xml。所以在这里,我的公共 github 存储库上有代码:https://github.com/JoBieker/soap-bipro 这是控制台提供的完整异常:

2018-07-04 22:19:46.407 错误 12986 --- [主] os.boot.SpringApplication
: 应用程序运行失败

org.springframework.beans.factory.UnsatisfiedDependencyException: 创建名为“securessBiproApplication”的 bean 时出错:不满意 通过字段“marshaller”表达的依赖关系;嵌套异常是 org.springframework.beans.factory.BeanCreationException:错误 使用在类路径中定义的名称“createJaxb2Marshaller”创建 bean 资源 [de/securess/bipro/config/Jaxb2Config.class]:意外 bean 创建期间的异常;嵌套异常是 java.lang.IllegalArgumentException:无法解析占位符 'context.path' 在值 "${context.path}" 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:587) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.annotation.InjectionMetadata.inject(InjectionMetadata.java:91) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor.postProcessPropertyValues(AutowiredAnnotationBeanPostProcessor.java:373) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.populateBean(AbstractAutowireCapableBeanFactory.java:1350) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:580) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:760) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:869) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:550) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.boot.SpringApplication.refresh(SpringApplication.java:759) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.refreshContext(SpringApplication.java:395) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:327) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1255) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 org.springframework.boot.SpringApplication.run(SpringApplication.java:1243) [spring-boot-2.0.3.RELEASE.jar:2.0.3.RELEASE] 在 de.securess.bipro.SecuressBiproApplication.main(SecuressBiproApplication.java:43) [classes/:na] 由以下原因引起: org.springframework.beans.factory.BeanCreationException:错误 使用在类路径中定义的名称“createJaxb2Marshaller”创建 bean 资源 [de/securess/bipro/config/Jaxb2Config.class]:意外 bean 创建期间的异常;嵌套异常是 java.lang.IllegalArgumentException:无法解析占位符 'context.path' 在值 "${context.path}" 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:516) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.lambda$doGetBean$0(AbstractBeanFactory.java:317) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:222) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:315) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:199) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.config.DependencyDescriptor.resolveCandidate(DependencyDescriptor.java:251) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1138) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.annotation.AutowiredAnnotationBeanPostProcessor$AutowiredFieldElement.inject(AutowiredAnnotationBeanPostProcessor.java:584) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] ... 18个常用框架 省略引起:java.lang.IllegalArgumentException:不能 在值“$ {context.path}”中解析占位符“context.path” org.springframework.util.PropertyPlaceholderHelper.parseStringValue(PropertyPlaceholderHelper.java:172) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.util.PropertyPlaceholderHelper.replacePlaceholders(PropertyPlaceholderHelper.java:124) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.core.env.AbstractPropertyResolver.doResolvePlaceholders(AbstractPropertyResolver.java:237) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.core.env.AbstractPropertyResolver.resolveRequiredPlaceholders(AbstractPropertyResolver.java:211) ~[spring-core-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.context.support.PropertySourcesPlaceholderConfigurer.lambda$processProperties$0(PropertySourcesPlaceholderConfigurer.java:175) ~[spring-context-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractBeanFactory.resolveEmbeddedValue(AbstractBeanFactory.java:839) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.doResolveDependency(DefaultListableBeanFactory.java:1086) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.DefaultListableBeanFactory.resolveDependency(DefaultListableBeanFactory.java:1065) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.resolveAutowiredArgument(ConstructorResolver.java:818) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.createArgumentArray(ConstructorResolver.java:724) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.ConstructorResolver.instantiateUsingFactoryMethod(ConstructorResolver.java:474) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.instantiateUsingFactoryMethod(AbstractAutowireCapableBeanFactory.java:1256) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBeanInstance(AbstractAutowireCapableBeanFactory.java:1105) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:543) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] 在 org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:503) ~[spring-beans-5.0.7.RELEASE.jar:5.0.7.RELEASE] ... 26个常用框架 省略

最好的问候,jcb

【问题讨论】:

  • 请发布您的完整 XML 和相关 XSD 部分。
  • 啊,你在编组。请发布相关代码。你如何构造你的对象以及你如何编组。尤其是相关的ArtID 部分。以及完整的异常详情。
  • 嗨 Lexicore,我添加了请求的信息。只需转到github.com/JoBieker/soap-bipro 上的 github 存储库,您就可以将完整的 maven 项目安装到您的 ide 中。期待您的回音。 JCB

标签: xml marshalling sax jaxb2 bipro


【解决方案1】:

我想通了。

问题不在于编组,而在于验证。

您已配置 JAXB 以根据指定的模式验证编组的 XML:

    marshaller.setSchemas(
            new ClassPathResource("/xsd/bipro-nachrichten-2.6.0.xsd"),
            new ClassPathResource("/xsd/bipro-transfer-2.6.0.xsd"),
            new ClassPathResource("/xsd/bipro-transfer-gevo-2.6.0.xsd"),
            new ClassPathResource("/xsd/bipro-gevo-2.6.0.xsd"),
            new ClassPathResource("/xsd/bipro-prozesse-vertrag-2.6.0.xsd"),
            new ClassPathResource("/xsd/bipro-basis-2.6.0.xsd")
            );

问题出现在CT_Geschaeftsvorgang 类型的ArtID 元素中。这就是您在 Java 代码中设置此元素的方式:

    JAXBElement<String> value = new JAXBElement<String>(
            new QName("http://wwww.bipro.net/namespace/transfer/gevo","ArtID"), String.class, "value"
            );
    value.setValue("120000000");
    CTGeschaeftsvorgang ctVertragsauskunft = new CTVertragsauskunft();
    ctVertragsauskunft.setArtID(value);

注意命名空间 URI:http://wwww.bipro.net/namespace/transfer/gevo,在 gevo 之前有四个 ws 和 transfer

现在,如果您仔细检查您的架构 bipro-gevo-2.6.0.xsd,您会发现它具有不同的命名空间:

正确的命名空间是http://www.bipro.net/namespace/gevo

您的 Java 代码中的Changing http://wwww.bipro.net/namespace/transfer/gevohttp://www.bipro.net/namespace/gevo 可以解决问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-03-20
    • 2018-02-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多