【问题标题】:cannot generate classes with JAXB无法使用 JAXB 生成类
【发布时间】:2012-05-25 15:29:10
【问题描述】:

我尝试使用 JAXB 生成类,但出现异常: IllegalArgumentException:非法模式字符“g” 我使用了一个复杂的 XSD 文件和一个绑定文件,如下所示。 有人可以提供调查地点的线索吗?

<jxb:bindings version="1.0"
           xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
           xmlns:xs="http://www.w3.org/2001/XMLSchema"
           xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
           jxb:extensionBindingPrefixes="xjc">
        <jxb:bindings schemaLocation="IFX170_XSD.xsd" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package name="cy.com.netinfo.netteller.ifx"/>
            </jxb:schemaBindings> 
        </jxb:bindings>
        <jxb:bindings schemaLocation="RemitDetail_Type.xsd" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package name="cy.com.netinfo.netteller.ifx.remitdetailinfo"/>
            </jxb:schemaBindings> 
        </jxb:bindings>
        <jxb:bindings schemaLocation="$pain.001.001.01.xsd" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package name="cy.com.netinfo.netteller.ifx.swift.pain_001_001_1"/>
            </jxb:schemaBindings> 
        </jxb:bindings>
        <jxb:bindings schemaLocation="$pain.002.001.01.xsd" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package name="cy.com.netinfo.netteller.ifx.swift.pain_002_001_1"/>
            </jxb:schemaBindings> 
        </jxb:bindings>
        <jxb:bindings schemaLocation="$pain.004.001.01.xsd" node="/xs:schema">
            <jxb:schemaBindings>
                <jxb:package name="cy.com.netinfo.netteller.ifx.swift.pain_004_001_1"/>
            </jxb:schemaBindings> 
        </jxb:bindings>

【问题讨论】:

  • 你如何调用 xjc(参数)以及架构是什么?
  • 看起来 annox 在他们的示例中使用 'g' 作为命名空间前缀。你确定你已经在你的架构顶部定义了这个命名空间吗?
  • 您好,这里是 5 个 xsd 文件的命名空间声明:ifxforum.org/RemitDetailInfo/2004/07" xmlns:xsd="w3.org/2001/XMLSchema" xmlns="ifxforum.org/RemitDetailInfo/2004/07" elementFormDefault= “合格”属性FormDefault="unqualified">
  • 抱歉,这是正确的。嗨 tdrury 这里是主 xsd 文件的命名空间声明: w3.org/2001/XMLSchema" xmlns:remit="ifxforum.org/RemitDetailInfo/2004/07" xmlns:pain001=" urn:swift:xsd:$pain.001.001.01" xmlns:pain002="urn:swift:xsd:$pain.002.001.01" xmlns:pain004="urn:swift:xsd:$pain.004.001.01">我想展示整个 xsd 的东西,但所有 5 个 xsd 都是 800kb。我不知道如何发布它们。
  • 这是我使用的命令: C:\deda\JAXB\jaxb-ri-20120516\bin\xjc.bat -d C:\deda\JAXB\ifx-src -xmlschema C: \deda\JAXB\IFX170_XSD.xsd -b C:\deda\JAXB\binding.xjb

标签: jaxb


【解决方案1】:

我终于找到了答案。 问题是由于 com.sun.tools.xjc 包中的 Options 类有错误。 在方法 getPrologComment 中,该类构建一个本地化消息,从本地化资源包获取参数 fot 日期和时间,然后使用固定的 Locale.ENGLISH 格式化日期。此行为在 JAXB 2.2.6 中。 我解决了这个问题,只需更新 jar 文件 jaxb-xjc.jar 的包 com\sun\tools\xjc\ 中的文件 MessageBundle_it.properties(在我的情况下为意大利语)。 我所做的更改是: Driver.DateFormat = aaaa.MM.gg(原始)到 Driver.DateFormat = yyyy/MM/dd(新)和 Driver.TimeFormat = hh:mm:ss a z(原始)到 Driver.TimeFormat = HH:mm:ss(新) 通过这些更改,我能够根据需要生成类。 高温高压 弗拉维奥

【讨论】:

    【解决方案2】:

    我可能猜想您的其中一个 xsd 文件具有附加到类型/元素的基于正则表达式的限制。您是否验证了这些文件?

    【讨论】:

      猜你喜欢
      • 2015-09-02
      • 2016-08-06
      • 2016-05-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-05-22
      相关资源
      最近更新 更多