通过EWS获取Office 365的待机用户列表

时间:2015-06-23 11:54:09

标签: wsdl ms-office office365 exchangewebservices

我正在使用EWS java api来获取保留的用户列表。我从https://outlook.office365.com/EWS/Services.wsdl下载了wsdl文件 并生成所需的类。我的目标是以下服务,来自wsdl:

    <wsdl:message name="GetHoldOnMailboxesSoapIn">
    <wsdl:part name="request" element="tns:GetHoldOnMailboxes"/>
    <wsdl:part name="RequestVersion" element="t:RequestServerVersion"/>
    <wsdl:part name="ManagementRole" element="t:ManagementRole"/>
    </wsdl:message>
    <wsdl:message name="GetHoldOnMailboxesSoapOut">
    <wsdl:part name="GetHoldOnMailboxesResult" element="tns:GetHoldOnMailboxesResponse"/>
    <wsdl:part name="ServerVersion" element="t:ServerVersionInfo"/>
    </wsdl:message>

以下是我用于生成列表的代码:

import java.util.Iterator;
import java.util.List;

import microsoft.exchange.webservices.data.autodiscover.IAutodiscoverRedirectionUrl;
import microsoft.exchange.webservices.data.core.ExchangeService;
import microsoft.exchange.webservices.data.credential.ExchangeCredentials;
import microsoft.exchange.webservices.data.credential.WebCredentials;
import microsoft.exchange.webservices.data.enumeration.ExchangeVersion;

import com.microsoft.schemas.exchange.services._2006.messages.GetActivityLogResponseMessageType;
import com.microsoft.schemas.exchange.services._2006.messages.GetDiscoverySearchConfigurationResponseMessageType;
import com.microsoft.schemas.exchange.services._2006.messages.GetDiscoverySearchConfigurationType;
import com.microsoft.schemas.exchange.services._2006.messages.GetHoldOnMailboxesResponseMessageType;
import com.microsoft.schemas.exchange.services._2006.messages.GetHoldOnMailboxesType;
import com.microsoft.schemas.exchange.services._2006.messages.ObjectFactory;
import com.microsoft.schemas.exchange.services._2006.types.ArrayOfMailboxHoldStatusType;
import com.microsoft.schemas.exchange.services._2006.types.MailboxHoldStatusType;

//import ews.RedirectionUrlCallback;


    public class InPlace {
@SuppressWarnings("resource")
public static void main(String[] args) {
    GetDiscoverySearchConfigurationType gt = new GetDiscoverySearchConfigurationType();
    ExchangeService service = null;
    service = new ExchangeService(ExchangeVersion.Exchange2010_SP2);
    ExchangeCredentials credentials = new WebCredentials(
            "XXXXXXx", "password");
    service.setCredentials(credentials);

    /*
     * Some additional code
     */

    ObjectFactory objc = new ObjectFactory();
    GetHoldOnMailboxesResponseMessageType gmt = objc.createGetHoldOnMailboxesResponseMessageType();
    ArrayOfMailboxHoldStatusType arm  = gmt.getMailboxHoldResult().getMailboxHoldStatuses();

    List ar = arm.getMailboxHoldStatus();
    Iterator it = ar.iterator();

    while(it.hasNext()){
        MailboxHoldStatusType mst = (MailboxHoldStatusType)it.next();
        System.out.println(mst.getMailbox());
    }

    }
}

class RedirectionUrlCallback1 implements IAutodiscoverRedirectionUrl {
public boolean autodiscoverRedirectionUrlValidationCallback(
        String redirectionUrl) {
    return redirectionUrl.toLowerCase().startsWith("https://");
    } 
}

我知道,我在代码中遗漏了一些内容,我将不得不将服务对象与api类挂钩。请,建议我缺少什么,或者我是否完全走错了路。

1 个答案:

答案 0 :(得分:1)

如果您要使用代理代码,则需要使用ExchangeServiceBinding类来调用该操作,例如

        ExchangeServiceBinding esb = new ExchangeServiceBinding();
        esb.RequestServerVersionValue = new RequestServerVersion();
        esb.RequestServerVersionValue.Version = ExchangeVersionType.Exchange2013_SP1;
        esb.Url = "https://outlook.office365.com/EWS/Exchange.asmx";
        esb.Credentials = new NetworkCredential("username", "password");
        esb.CookieContainer = new CookieContainer();
        GetHoldOnMailboxesType ghold = new GetHoldOnMailboxesType();
        ghold.HoldId = "HoldId2";
        GetHoldOnMailboxesResponseMessageType gholdRespons = esb.GetHoldOnMailboxes(ghold);
        if (gholdRespons.ResponseClass == ResponseClassType.Success)
        {
            Console.WriteLine(gholdRespons.MailboxHoldResult.HoldId);
        }

干杯 格伦

相关问题