public void MSOXWSCORE_S04_TC23_VerifyPublicFolderItem()
        {
            FolderIdType folderId = null;

            FindFolderType findRequest = new FindFolderType();
            findRequest.FolderShape = new FolderResponseShapeType();
            findRequest.FolderShape.BaseShape = DefaultShapeNamesType.AllProperties;
            DistinguishedFolderIdType id = new DistinguishedFolderIdType();
            id.Id = DistinguishedFolderIdNameType.publicfoldersroot;
            findRequest.ParentFolderIds = new DistinguishedFolderIdType[] { id };
            findRequest.Traversal = FolderQueryTraversalType.Shallow;

            BaseFolderType[] folders = null;
            FindFolderResponseType findFolderResponse = this.SRCHAdapter.FindFolder(findRequest);
            FindFolderResponseMessageType findFolderResponseMessageType = new FindFolderResponseMessageType();
            if (findFolderResponse != null && findFolderResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
            {
                findFolderResponseMessageType = findFolderResponse.ResponseMessages.Items[0] as FindFolderResponseMessageType;
                folders = findFolderResponseMessageType.RootFolder.Folders;
                foreach (BaseFolderType folder in folders)
                {
                    if (folder.DisplayName.Equals(Common.GetConfigurationPropertyValue("PublicFolderName", this.Site)))
                    {
                        folderId = folder.FolderId;
                    }
                }
            }

            Site.Assert.IsNotNull(
                folderId,
                "The destination public folder {0} in should exist!",
                Common.GetConfigurationPropertyValue("PublicFolderName", this.Site));

            MessageType message = new MessageType();
            MessageType[] items = new MessageType[] { message };
            CreateItemType requestItem = new CreateItemType();
            requestItem.MessageDispositionSpecified = true;
            requestItem.MessageDisposition = MessageDispositionType.SaveOnly;
            requestItem.Items = new NonEmptyArrayOfAllItemsType();
            requestItem.Items.Items = items;

            requestItem.SavedItemFolderId = new TargetFolderIdType();

            requestItem.SavedItemFolderId.Item = folderId;

            CreateItemResponseType createItemResponse = this.COREAdapter.CreateItem(requestItem);

            Common.CheckOperationSuccess(createItemResponse, 1, this.Site);

            ItemInfoResponseMessageType itemInfo = (ItemInfoResponseMessageType)createItemResponse.ResponseMessages.Items[0];
            ItemIdId itemId = this.ITEMIDAdapter.ParseItemId(itemInfo.Items.Items[0].ItemId);

            // Add the debug information
            Site.Log.Add(LogEntryKind.Debug, "Verify MS-OXWSITEMID_R62");

            // Verify MS-OXWSITEMID requirement: MS-OXWSITEMID_R62
            Site.CaptureRequirementIfAreEqual<IdStorageType>(
                IdStorageType.PublicFolderItem,
                itemId.StorageType,
                "MS-OXWSITEMID",
                62,
                @"[In Id Storage Type (byte)] Its [Id Storage Type's] value maps to the following enumeration value.
                    /// <summary>
                    /// Indicates which type of storage is used for the item/folder represented by this Id.
                    /// </summary>
                    internal enum IdStorageType : byte
                    {
                [        /// <summary>
                        /// The Id represents an item or folder in a mailbox and 
                        /// it contains a primary SMTP address. 
                        /// </summary>
                        MailboxItemSmtpAddressBased = 0,

                        /// <summary>
                        /// The Id represents a folder in a PublicFolder store.
                        /// </summary>
                        PublicFolder = 1,]

                        /// <summary>
                        /// The Id represents an item in a PublicFolder store.
                        /// </summary>
                        PublicFolderItem = 2,
                [
                        /// <summary>
                        /// The Id represents an item or folder in a mailbox and contains a mailbox GUID.
                        /// </summary>
                        MailboxItemMailboxGuidBased = 3,

                        /// <summary>
                        /// The Id represents a conversation in a mailbox and contains a mailbox GUID.
                        /// </summary>
                        ConversationIdMailboxGuidBased = 4,

                        /// <summary>
                        /// The Id represents (by objectGuid) an object in the Active Directory.
                        /// </summary>
                        ActiveDirectoryObject = 5,]
                }");
        }
        /// <summary>
        /// Find all the sub folders in the specified folder.
        /// </summary>
        /// <param name="parentFolderName">Name of the specified parent folder.</param>
        /// <returns>An array of found sub folders.</returns>
        private BaseFolderType[] FindAllSubFolders(DistinguishedFolderIdNameType parentFolderName)
        {
            // Create an array of BaseFolderType.
            BaseFolderType[] folders = null;

            // Create the request and specify the traversal type.
            FindFolderType findFolderRequest = new FindFolderType();
            findFolderRequest.Traversal = FolderQueryTraversalType.Deep;

            // Define the properties to be returned in the response.
            FolderResponseShapeType responseShape = new FolderResponseShapeType();
            responseShape.BaseShape = DefaultShapeNamesType.Default;
            findFolderRequest.FolderShape = responseShape;

            // Identify which folders to search.
            DistinguishedFolderIdType[] folderIDArray = new DistinguishedFolderIdType[1];
            folderIDArray[0] = new DistinguishedFolderIdType();
            folderIDArray[0].Id = parentFolderName;

            // Add the folders to search to the request.
            findFolderRequest.ParentFolderIds = folderIDArray;

            FindFolderResponseType findFolderResponse = this.exchangeServiceBinding.FindFolder(findFolderRequest);
            FindFolderResponseMessageType findFolderResponseMessageType = new FindFolderResponseMessageType();
            if (findFolderResponse != null && findFolderResponse.ResponseMessages.Items[0].ResponseClass == ResponseClassType.Success)
            {
                findFolderResponseMessageType = findFolderResponse.ResponseMessages.Items[0] as FindFolderResponseMessageType;
                folders = findFolderResponseMessageType.RootFolder.Folders;
            }

            return folders;
        }