Uploaded image for project: 'WS-Commons'
  1. WS-Commons
  2. WSCOMMONS-531

SchemaBuilder does not parse all the 'key' and 'keyref' definitions when it uses namespace prefix

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Resolved
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: XmlSchema 1.4.5
    • Fix Version/s: XmlSchema 1.4.6
    • Component/s: XmlSchema
    • Labels:
    • Environment:
      Java6 + Windows7

      Description

      SchemaBuilder is ruturning only the first key, keyref and unique element when handling multiple keys, keyrefs or unique definitions inside the same element and the shema elemets are using namespace prefix.

      <xs:element name="Element1" type="Element1Type">

      <xs:keyref name="keyRef1" refer="Key1">
      <xs:selector xpath="xxxxx"/>
      <xs:field xpath="@Name"/>
      </xs:keyref>

      <xs:keyref name="keyRef2" refer="Key1">
      <xs:selector xpath="xxxx"/>
      <xs:field xpath="@Name"/>
      </xs:keyref>

      </xs:element>

      The SchemaBuilder will generate information only for the first keyref for this element.

      XmlSchemaBuilder should use XDOMUtil.getNextSiblingElementNS() method instead XDOMUtil.getNextSiblingElement() like it does when it looks for the first element.

      if ((keyEl = XDOMUtil.getFirstChildElementNS(el, XmlSchema.SCHEMA_NS,
      "key")) != null) {
      while (keyEl != null)

      { element.constraints.add(handleConstraint(keyEl, "Key")); keyEl = XDOMUtil.getNextSiblingElementNS(keyEl, XmlSchema.SCHEMA_NS, "key"); }

      }

      if ((keyrefEl = XDOMUtil.getFirstChildElementNS(el,
      XmlSchema.SCHEMA_NS, "keyref")) != null) {
      while (keyrefEl != null) {
      XmlSchemaKeyref keyRef = (XmlSchemaKeyref) handleConstraint(
      keyrefEl, "Keyref");
      if (keyrefEl.hasAttribute("refer"))

      { String name = keyrefEl.getAttribute("refer"); keyRef.refer = getRefQName(name, el); }

      element.constraints.add(keyRef);
      keyrefEl = XDOMUtil.getNextSiblingElementNS(keyrefEl, XmlSchema.SCHEMA_NS, "keyref");
      }
      }

      if ((uniqueEl = XDOMUtil.getFirstChildElementNS(el,
      XmlSchema.SCHEMA_NS, "unique")) != null) {
      while (uniqueEl != null)

      { element.constraints.add(handleConstraint(uniqueEl, "Unique")); uniqueEl = XDOMUtil.getNextSiblingElementNS(uniqueEl, XmlSchema.SCHEMA_NS, "unique"); }

      }

        Attachments

        1. SchemaBuilder.java-trunk.patch
          0.6 kB
          Martin Kvapil
        2. SchemaBuilder.java-1.4.x.patch
          1 kB
          Martin Kvapil

          Activity

            People

            • Assignee:
              bmargulies Benson Margulies
              Reporter:
              martan Martin Kvapil
            • Votes:
              0 Vote for this issue
              Watchers:
              0 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: