/**
   * Return opaque object embedded in XQuery Item
   *
   * @param item item
   * @return type
   * @throws XQException XQException
   */
  private Object getItemValue(XQItem item) throws XQException {
    XQItemType itemType = item.getItemType();
    Object itemValue = null;

    switch (itemType.getBaseType()) {
      case XQItemType.XQBASETYPE_BOOLEAN:
        itemValue = item.getBoolean();

        break;

      case XQItemType.XQBASETYPE_DECIMAL:
        itemValue = item.getDouble();

        break;

      case XQItemType.XQBASETYPE_BYTE:
        itemValue = item.getByte();

        break;

      case XQItemType.XQBASETYPE_FLOAT:
        itemValue = item.getFloat();

        break;

      case XQItemType.XQBASETYPE_INT:
      case XQItemType.XQBASETYPE_INTEGER:
        itemValue = item.getInt();

        break;

      case XQItemType.XQBASETYPE_LONG:
        itemValue = item.getLong();

        break;

      case XQItemType.XQBASETYPE_ANYTYPE:
        itemValue = item.getNode();

        break;

      case XQItemType.XQBASETYPE_ANYURI:
        itemValue = item.getNodeUri();

        break;

      case XQItemType.XQBASETYPE_SHORT:
        itemValue = item.getShort();

        break;

      case XQItemType.XQBASETYPE_STRING:
      case XQItemType.XQBASETYPE_ANYATOMICTYPE:
        itemValue = item.getAtomicValue();

        break;
    }

    return itemValue;
  }
  public void testGetItemType() throws XQException {
    XQExpression xqe;
    XQSequence xqs;
    XQItemType xqtype;

    xqe = xqc.createExpression();
    xqs = xqe.executeQuery("'1'");
    try {
      xqs.getItemType();
      fail("A-XQIA-6.1: getItemType() should fail when not positioned on an item");
    } catch (final XQException e) {
      // Expect an XQException
    }
    xqe.close();

    xqe = xqc.createExpression();
    xqs = xqe.executeQuery("'1'");
    xqs.next();
    xqs.close();
    try {
      xqs.getItemType();
      fail("A-XQIA-6.2: closed item accessor supports getItemType()");
    } catch (final XQException e) {
      // Expect an XQException
    }
    xqe.close();

    xqe = xqc.createExpression();
    xqs = xqe.executeQuery("'Hello world!'");
    xqs.next();
    try {
      xqtype = xqs.getItemType();
      assertNotNull("A-XQIA-6.3: getItemType() failed", xqtype);
      assertEquals(
          "A-XQIA-6.3: getItemType() failed", XQItemType.XQITEMKIND_ATOMIC, xqtype.getItemKind());
      assertEquals(
          "A-XQIA-6.3: getItemType() failed", XQItemType.XQBASETYPE_STRING, xqtype.getBaseType());
    } catch (final XQException e) {
      fail("A-XQIA-6.3: getItemType() failed with message: " + e.getMessage());
    }
    xqe.close();

    xqe = xqc.createExpression();
    xqs = xqe.executeQuery("1");
    xqs.next();
    xqs.getItem();
    try {
      xqs.getItemType();
    } catch (final XQException e) {
      fail("A-XQIA-6.4: getItemType() failed with message: " + e.getMessage());
    }
    xqe.close();
  }