当前位置: 首页 > 知识库问答 >
问题:

xsd 到 jaxb 变量不会相应地生成

江煜
2023-03-14

我有一个xml,我已经生成了xsd文件。

XML文件

<?xml version="1.0" encoding="ISO-8859-1"?>
<RateQuote xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:noNamespaceSchemaLocation="http://www.con-way.com/XML/RateQuote.xsd"
    schemaVersion="1.0">
    <OriginZip country="US">19348</OriginZip>
    <DestinationZip country="US">97202</DestinationZip>
    <ChargeCode>P</ChargeCode>
    <Item>
        <CmdtyClass>775</CmdtyClass>
        <Weight unit="lbs">667</Weight>
        <Rate currency="USD">337.22</Rate>
        <Charge currency="USD">2249.26</Charge>
    </Item>
    <Item>
        <CmdtyClass>100</CmdtyClass>
        <Weight unit="lbs">555</Weight>
        <Rate currency="USD">435.12</Rate>
        <Charge currency="USD">2414.92</Charge>
    </Item>
    <ItemTotal>
        <TotalWeight unit="lbs">1222</TotalWeight>
        <TotalCharge currency="USD">4664.18</TotalCharge>
    </ItemTotal>
    <AccessorialCharges>
        <OtherAccessorialCharges code="GUR"
            name="CON-WAY GUARANTEED!">466.42</OtherAccessorialCharges>
        <OtherAccessorialCharges code="DNC"
            name="DEST NOTIFICATION">41.25</OtherAccessorialCharges>
        <FuelSurcharge code="FSC" name="FUEL SURCHARGE 27.70%"
            rate="27.70">645.99</FuelSurcharge>
        <TotalAccessorialCharges currency="USD">1153.66</TotalAccessorialCharges>
    </AccessorialCharges>

    <Discount rate="50.0">2332.09</Discount>
    <NetCharge currency="USD">3485.75</NetCharge>
    <TransitTime>4</TransitTime>
    <EffectiveDate>11/24/14</EffectiveDate>


    <Disclaimer></Disclaimer>

    <EstDeliverDate>12/02/14</EstDeliverDate>
    <SpecialSavings></SpecialSavings>

</RateQuote>

XSD文件

<?xml version="1.0" encoding="utf-16"?>
<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" version="1.0" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
  <xsd:element name="RateQuote">
    <xsd:complexType>
      <xsd:sequence>
        <xsd:element name="OriginZip">
          <xsd:complexType>
            <xsd:attribute name="country" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="DestinationZip">
          <xsd:complexType>
            <xsd:attribute name="country" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="ChargeCode" type="xsd:string" />
        <xsd:element maxOccurs="unbounded" name="Item">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="CmdtyClass" type="xsd:int" />
              <xsd:element name="Weight">
                <xsd:complexType>
                  <xsd:attribute name="unit" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="Rate">
                <xsd:complexType>
                  <xsd:attribute name="currency" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="Charge">
                <xsd:complexType>
                  <xsd:attribute name="currency" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="ItemTotal">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element name="TotalWeight">
                <xsd:complexType>
                  <xsd:attribute name="unit" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="TotalCharge">
                <xsd:complexType>
                  <xsd:attribute name="currency" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="AccessorialCharges">
          <xsd:complexType>
            <xsd:sequence>
              <xsd:element maxOccurs="unbounded" name="OtherAccessorialCharges">
                <xsd:complexType>
                  <xsd:attribute name="code" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="FuelSurcharge">
                <xsd:complexType>
                  <xsd:attribute name="code" type="xsd:string" />
                  <xsd:attribute name="name" type="xsd:string" />
                  <xsd:attribute name="rate" type="xsd:decimal" />
                </xsd:complexType>
              </xsd:element>
              <xsd:element name="TotalAccessorialCharges">
                <xsd:complexType>
                  <xsd:attribute name="currency" type="xsd:string" />
                </xsd:complexType>
              </xsd:element>
            </xsd:sequence>
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="Discount">
          <xsd:complexType>
            <xsd:attribute name="rate" type="xsd:decimal" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="NetCharge">
          <xsd:complexType>
            <xsd:attribute name="currency" type="xsd:string" />
          </xsd:complexType>
        </xsd:element>
        <xsd:element name="TransitTime" type="xsd:int" />
        <xsd:element name="EffectiveDate" type="xsd:dateTime" />
        <xsd:element name="Disclaimer" type="xsd:string" />
        <xsd:element name="EstDeliverDate" type="xsd:dateTime" />
        <xsd:element name="SpecialSavings" type="xsd:string" />
      </xsd:sequence>
      <xsd:attribute name="xsi:noNamespaceSchemaLocation" type="xsd:string" />
      <xsd:attribute name="schemaVersion" type="xsd:decimal" />
    </xsd:complexType>
  </xsd:element>
</xsd:schema>

但是当我在eclipse中生成JAXB类时。

NetCharge 类是使用变量字符串“货币”创建的,但没有值变量。

所有其他使用值和属性的类都会发生这种情况。

请帮帮忙。

共有1个答案

澹台宾白
2023-03-14

您的XML架构不允许< code>NetCharge中的文本内容,只允许属性。您可能需要一个内容简单的复杂类型:

xsd的含义:simpleContent

请尝试以下操作:

  <xs:complexType>
    <xs:simpleContent>
      <xs:extension base="string">
        <xs:attribute name="currency" type="xs:string" />
      </xs:extension>
    </xs:simpleContent>
  </xs:complexType>

应该生成一个content属性。

 类似资料:
  • Java-jaxb-maven插件 我有基于maven的Web应用程序,在pom我有以下插件,应该生成jaxb. xsd到java类。 当我执行clean、compile时,包xsd类不会生成。当我执行mvn jaxb2:generate manually时,它会在generate source文件夹中生成xsd类,但不会在war中打包。 我如何才能让它在不手动执行“mvn jaxb2:gener

  • 我们试图使用gradle、xsd和xjc生成JAXB类,JAXB类应该具有XmlRootElement注释,以便可以将其作为web服务响应公开。我们正在跟踪这个链接http://azagorneanu.blogspot.com/2011/09/configure-maven-to-generate-classes.html,这很有帮助,但我们无法找到一个只有gradle的特定示例。所以我们想出了一

  • myType也被定义为complexType。然后得到生成的类MyResponse.java和Reference.java。我可以通过以下方式分配“引用”的值: 而且奏效了。 现在我只是删除了maxOccurs=“unbounded”,它不再起作用了。响应不再是List类型,而是JaxBelement类型。我试着用: 谁能告诉我,当它不是一个列表时,什么是正确的做法?

  • 如果 XML 是由 JAXB 类(而不是由 XSD)生成的,那么我没有要验证的 XSD。如何验证 XML?JAXB 在开始取消编组之前是否会自动对 XML 进行验证?

  • 我有我的xml模式定义如下 我使用maven-jaxb2-plugin根据这个xsd生成Java类。 生成代码后,我发现所有元素都有@xmlement注释(required=true)。为什么?我有许多minOccurs=“0”元素。为什么元素上总是添加required=true。

  • 背景:我正在尝试将WSDL/XSD转换为Java类 问题:生成的包名称与命名空间不匹配。数字命名空间的最后一部分丢失,包中缺少02以下的部分 XSD已经-xmlns=“urn:iso:std:iso:20022:tech:XSD:pain.001.001.02” Java类生成——包iso。标准iso_20022.tech.xsd。疼痛001 001; 采取的步骤: 我尝试了2个maven插件,两