Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Find Conversations not working #713

Open
girishghoda57 opened this issue Sep 23, 2019 · 2 comments
Open

Find Conversations not working #713

girishghoda57 opened this issue Sep 23, 2019 · 2 comments

Comments

@girishghoda57
Copy link

girishghoda57 commented Sep 23, 2019

Hi team @serious6 @OS-JaR @pkropachev @shibd @atamer,
We used ews java api : <ews.java.api.version>2.1-SNAPSHOT</ews.java.api.version>

We call below code
Collection<Conversation> folderConversations = exchangeService.findConversation( new ConversationIndexedItemView(10), new FolderId(WellKnownFolderName.Inbox));

But its threw below error
The request failed. The expected XML node type was END_ELEMENT, but the actual type is START_ELEMENT.

Please help, we stuck on two days.
Thank you

@girishghoda57
Copy link
Author

For any of user need help on it. The posted solution below:

  1. First replace FindConversationResponse.java with below code
    `/*
  • The MIT License
  • Copyright (c) 2012 Microsoft Corporation
  • Permission is hereby granted, free of charge, to any person obtaining a copy
  • of this software and associated documentation files (the "Software"), to deal
  • in the Software without restriction, including without limitation the rights
  • to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  • copies of the Software, and to permit persons to whom the Software is
  • furnished to do so, subject to the following conditions:
  • The above copyright notice and this permission notice shall be included in
  • all copies or substantial portions of the Software.
  • THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  • IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  • FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  • AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  • LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  • OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
  • THE SOFTWARE.
    */

package microsoft.exchange.webservices.data.core.response;

import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
import microsoft.exchange.webservices.data.core.EwsUtilities;
import microsoft.exchange.webservices.data.core.XmlElementNames;
import microsoft.exchange.webservices.data.core.service.item.Conversation;
import microsoft.exchange.webservices.data.property.complex.HighlightTerm;
import microsoft.exchange.webservices.data.core.enumeration.misc.XmlNamespace;
import microsoft.exchange.webservices.data.security.XmlNodeType;

import java.util.ArrayList;
import java.util.Collection;
import java.util.List;

/**

  • Represents the response to a Conversation search operation.
    */
    public final class FindConversationResponse extends ServiceResponse {
    List conversations = new ArrayList();
    List highlightTerms = new ArrayList();
    int totalCount;

/**

  • Initializes a new instance of the FindConversationResponse class.
    */
    public FindConversationResponse() {
    super();
    }

/**

  • Gets the results of the operation.
    */
    public Collection getConversations() {
return this.conversations;

}

/**

  • Gets the results of the operation.
    */
    public Collection getHighlightTerms() {
return this.highlightTerms;

}

/**

  • Gets the results of the operation.
    */
    public int getCounts() {
return this.totalCount;

}

/**

  • Read Conversations from XML.
  • @param reader The reader.
  • @throws Exception
    */
    @OverRide
    protected void readElementsFromXml(EwsServiceXmlReader reader)
    throws Exception {
    EwsUtilities.ewsAssert(conversations != null, "FindConversationResponse.ReadElementsFromXml",
    "conversations is null.");
reader.readStartElement(XmlNamespace.Messages,
    XmlElementNames.Conversations);
if (!reader.isEmptyElement()) {
  do {
    reader.read();
    if (reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT) {
      Conversation item = EwsUtilities.
          createEwsObjectFromXmlElementName(Conversation.class,
              reader.getService(), reader.getLocalName());

      if (item == null) {
        reader.skipCurrentElement();
      } else {
        item.loadFromXml(
            reader,
            true, /* clearPropertyBag */
            null,
            false  /* summaryPropertiesOnly */);

        conversations.add(item);
      }
    }
  }
  while (!reader.isEndElement(XmlNamespace.Messages,
      XmlElementNames.Conversations));
}
reader.read();

if (reader.isStartElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms) &&
    !reader.isEmptyElement())
{
    do
    {
        reader.read();

        if (reader.getNodeType().getNodeType() == XmlNodeType.START_ELEMENT)
        {
            HighlightTerm term = new HighlightTerm();

            term.loadFromXml(
                reader,
                XmlNamespace.Types,
                XmlElementNames.HighlightTerm);

            this.highlightTerms.add(term);
        }
    }
    while (!reader.isEndElement(XmlNamespace.Messages, XmlElementNames.HighlightTerms));
}

if (reader.isStartElement(XmlNamespace.Messages, XmlElementNames.TotalConversationsInView) && !reader.isEmptyElement())
{
	this.totalCount = Integer.parseInt(reader.readElementValue());
  reader.read();
}

if (reader.isStartElement(XmlNamespace.Messages, XmlElementNames.IndexedOffset) && !reader.isEmptyElement())
{
	this.totalCount = Integer.parseInt(reader.readElementValue());
	reader.read();
}

}
}
`

  1. Create file name "HighlightTerm" in package microsoft.exchange.webservices.data.property.complex and paste below code:
    `package microsoft.exchange.webservices.data.property.complex;

import microsoft.exchange.webservices.data.core.EwsServiceXmlReader;
import microsoft.exchange.webservices.data.core.XmlElementNames;

public class HighlightTerm extends ComplexProperty {

private String scope;

private String value;

public HighlightTerm() {
	
}


/**
  • Tries to read element from XML.
  • @param reader The reader.
  • @return true, if successful
  • @throws Exception the exception
    */
    @OverRide
    public boolean tryReadElementFromXml(EwsServiceXmlReader reader)
    throws Exception {
if (reader.getLocalName().equals(XmlElementNames.HighlightTermScope)) {
  this.scope = reader.readElementValue();
  return true;
} else if (reader.getLocalName().equals(XmlElementNames.HighlightTermValue)) {
  this.value = reader.readElementValue();
  return true;
} else {
  return false;
}

}

}`

  1. Add extra properties name in XmlElementNames.java
    public static final String HighlightTerms = "HighlightTerms"; public static final String HighlightTerm = "Term"; public static final String HighlightTermScope = "Scope"; public static final String HighlightTermValue = "Value"; public static final String TotalConversationsInView = "TotalConversationsInView"; public static final String IndexedOffset = "IndexedOffset";

It resolves "The request failed. The expected XML node type was END_ELEMENT, but the actual type is START_ELEMENT." error for findConversation().

I got this solution from .NET repository.
Thank you.

@vfa-tuantt
Copy link

@girishghoda57 Thank you so much. You saved my life

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

2 participants