OfficeDev / ews-java-api

A java client library to access Exchange web services. The API works against Office 365 Exchange Online as well as on premises Exchange.
MIT License
870 stars 560 forks source link

ServiceResponseException: The property has an invalid value. #261

Open eburkland opened 9 years ago

eburkland commented 9 years ago

Trying to loop through appointments and find an appointment with a particular Extended Property associated with it. For some reason I started receiving the following error:

Exception in thread "main" microsoft.exchange.webservices.data.ServiceResponseException: The property has an invalid value.
    at microsoft.exchange.webservices.data.ServiceResponse.internalThrowIfNecessary(ServiceResponse.java:276)
    at microsoft.exchange.webservices.data.ServiceResponse.throwIfNecessary(ServiceResponse.java:265)
    at microsoft.exchange.webservices.data.MultiResponseServiceRequest.execute(MultiResponseServiceRequest.java:155)
    at microsoft.exchange.webservices.data.ExchangeService.findItems(ExchangeService.java:824)
    at microsoft.exchange.webservices.data.ExchangeService.findItems(ExchangeService.java:867)
    at microsoft.exchange.webservices.data.ExchangeService.findItems(ExchangeService.java:943)
    at org.sdcwa.ews.testcase.TestExtendedProperty.main(TestExtendedProperty.java:50)

If you do a trace of the SOAP messages I am receiving a response code of ErrorCalendarInvalidPropertyValue

package org.sdcwa.ews.testcase;

import java.text.SimpleDateFormat;

import microsoft.exchange.webservices.data.Appointment;
import microsoft.exchange.webservices.data.BasePropertySet;
import microsoft.exchange.webservices.data.ConflictResolutionMode;
import microsoft.exchange.webservices.data.DefaultExtendedPropertySet;
import microsoft.exchange.webservices.data.ExtendedProperty;
import microsoft.exchange.webservices.data.ExtendedPropertyDefinition;
import microsoft.exchange.webservices.data.FindItemsResults;
import microsoft.exchange.webservices.data.Item;
import microsoft.exchange.webservices.data.ItemView;
import microsoft.exchange.webservices.data.LegacyFreeBusyStatus;
import microsoft.exchange.webservices.data.MapiPropertyType;
import microsoft.exchange.webservices.data.PropertySet;
import microsoft.exchange.webservices.data.SendInvitationsMode;
import microsoft.exchange.webservices.data.SendInvitationsOrCancellationsMode;
import microsoft.exchange.webservices.data.WellKnownFolderName;

import org.sdcwa.ews.connector.SDCWAExchangeConnector;

public class TestExtendedProperty {

    public static void main(String args[]) throws Exception {

        //Create Connection
        SDCWAExchangeConnector conn = new SDCWAExchangeConnector();
        conn.createExchangeService();
        conn.setTraceEnabled(true);
        conn.setImpUserId("btroche@sdcwa.org");

        Appointment app = new Appointment(conn.getExchangeService());

        Boolean retValue = false;

        int offset = 50;

        ExtendedPropertyDefinition psKeysExtPropDef = new ExtendedPropertyDefinition(DefaultExtendedPropertySet.PublicStrings,"PS_KEYS", MapiPropertyType.String);
        String psKeys = "00543HPKM0043";
        app.setExtendedProperty(psKeysExtPropDef, psKeys);

        ItemView view = new ItemView(offset);
        FindItemsResults<Item>  findResults;        
        PropertySet propertySet = new PropertySet(BasePropertySet.FirstClassProperties,psKeysExtPropDef);
        view.setPropertySet(propertySet);

        resultloop:
        do {
            findResults = conn.getExchangeService().findItems(WellKnownFolderName.Calendar, view);

            for(Item item : findResults.getItems()) {

                for(ExtendedProperty extendedProperty : item.getExtendedProperties()) {
                    if (extendedProperty.getValue().toString().equalsIgnoreCase(psKeys)) {
                        if (extendedProperty.getValue() != null) {
                            app = Appointment.bind(conn.getExchangeService(), item.getId(),propertySet);

                            retValue = true;
                        break resultloop;
                        }
                    }

                }
            }
            view.setOffset(offset += 50);
        } while(findResults.isMoreAvailable());

        if (retValue == true) {
            app.setSubject("Harassment Prevention KM");
            app.setLocation("San Diego");
            app.setIsAllDayEvent(false);
             SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            app.setStart(formatter.parse("2015-03-19 09:00:00"));
            app.setEnd(formatter.parse("2015-03-19 11:00:00"));
            app.setLegacyFreeBusyStatus(LegacyFreeBusyStatus.Busy);
            app.setIsReminderSet(true);
            app.update(ConflictResolutionMode.AlwaysOverwrite,SendInvitationsOrCancellationsMode.SendToNone);
        } else {

            app.setSubject("Harassment Prevention KM");
            app.setLocation("San Diego");

             SimpleDateFormat formatter = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss");
            app.setStart(formatter.parse("2015-03-19 09:00:00"));
            app.setEnd(formatter.parse("2015-03-19 11:30:00"));
            //app.setIsAllDayEvent(true);

            app.setLegacyFreeBusyStatus(LegacyFreeBusyStatus.Tentative);
            app.setIsReminderSet(false);
            app.save(WellKnownFolderName.Calendar, SendInvitationsMode.SendToNone);

        }

    }

}
serious6 commented 9 years ago

Please also enable trace to see the underlying request and response and state which property is invalid.