Zimbra SOAP API - java?

6za6bjd0  于 2023-05-27  发布在  Java
关注(0)|答案(3)|浏览(152)

我需要使用Zimbra Soap API来实现我们正在开发的一个新功能。然而,我还没有找到很多使用这个API的Java客户端的例子,我总体上有点迷失了我需要研究的东西。(我对使用SoAP还很陌生)
基本上,我需要发送一个用户名并获取用户的某种zimbra ID,用我的java代码修改用户信息,然后将数据推回服务器。
我已经在服务器上找到了这个的wsdl文件,但我不确定从这里到哪里去。任何帮助将不胜感激-任何从高层次的解释,以例子,以详细的步骤。
先谢谢你了!

rks48beu

rks48beu1#

遗憾的是,API并不是真正的SOAP。它基本上是基于HTTP的XML。所以你必须手动创建你发送到zimbra的xml文档。
我不知道有什么Java库,我做了一个Python one

bqjvbblv

bqjvbblv2#

您可以使用Zimbra库来调用SOAP API:

package com.example.test
import com.zimbra.common.account.ZAttrProvisioning;
import com.zimbra.common.service.ServiceException;
import com.zimbra.common.soap.AdminConstants;
import com.zimbra.common.soap.Element;
import com.zimbra.common.soap.SoapHttpTransport;
import com.zimbra.cs.account.AccountServiceException;
import java.io.IOException;
import java.net.MalformedURLException;
import java.net.URISyntaxException;
import java.net.URL;

public class ZimbraApi {
  private static SoapHttpTransport soapHttpTransport = null;
  private String baseUrl = "https://mail.example.com:7071/service/admin/soap/";

  public String getAdminToken(String username, String password) {
    URL url = new URL(baseUrl);
    soapHttpTransport = new SoapHttpTransport(url.toURI().toString());
    soapHttpTransport.setVoidOnExpired(true);
    Element request = Element.XMLElement.mFactory.createElement(AdminConstants.AUTH_REQUEST);
    request.addAttribute(AdminConstants.E_NAME, username);
    request.addAttribute(AdminConstants.E_PASSWORD, password);
    Element response = soapHttpTransport.invoke(request);
    String token = response.getAttribute(AdminConstants.E_AUTH_TOKEN);
    soapHttpTransport.setAuthToken(token);
    return token;
  }

  public void createAccount(String username, String password) {
    Element request = Element.XMLElement.mFactory.createElement(AdminConstants.CREATE_ACCOUNT_REQUEST);
    request.addAttribute(AdminConstants.E_NAME, username);
    request.addAttribute(AdminConstants.E_PASSWORD, password);
    soapHttpTransport.invoke(request);

  }

}
6kkfgxo0

6kkfgxo03#

终点:https://your.domain.for.zimbra/service/soap/GetIdentitiesRequest

信封香皂

<soap:Envelope xmlns:soap="http://www.w3.org/2003/05/soap-envelope">
   <soap:Header>
    <context xmlns="urn:zimbra">
        <format type="xml"/>
        <csrfToken>????????</csrfToken>
    </context>
   </soap:Header>
   <soap:Body>
       <GetIdentitiesRequest xmlns="urn:zimbraAccount">
          <authToken>??????</authToken>
       </GetIdentitiesRequest>
   </soap:Body>
</soap:Envelope>

csrfToken您在js窗口中给予的.csrfToken
authToken你在cooke中给予ZM_AUTH_TOKEN

soap的请求必须通过cookiesZM_AUTH_TOKENJSESSIONIDZM_TEST
使用Jetty Client API编写代码

ContentResponse contentResponse = client.POST(endpoint)
                .content(new StringContentProvider("XML envelope"))
                .cookie(new HttpCookie("JSESSIONID", jSessionIdCookieValue))
                .cookie(new HttpCookie("ZM_AUTH_TOKEN", authToken))
                .cookie(new HttpCookie("ZM_TEST", "true"))
                .send();

而且,还有很多端点

https://your.domain.for.zimbra/service/soap/GetInfoRequest 
https://your.domain.for.zimbra/service/soap/GetRightsRequest
https://your.domain.for.zimbra/service/soap/CheckRightsRequest

Envelope仅在每个端点的子元素中发生更改

<GetIdentitiesRequest>
<GetInfoRequest>
<GetRightsRequest>
<CheckRightsRequest>

相关问题