我需要使用Zimbra Soap API来实现我们正在开发的一个新功能。然而,我还没有找到很多使用这个API的Java客户端的例子,我总体上有点迷失了我需要研究的东西。(我对使用SoAP还很陌生)基本上,我需要发送一个用户名并获取用户的某种zimbra ID,用我的java代码修改用户信息,然后将数据推回服务器。我已经在服务器上找到了这个的wsdl文件,但我不确定从这里到哪里去。任何帮助将不胜感激-任何从高层次的解释,以例子,以详细的步骤。先谢谢你了!
rks48beu1#
遗憾的是,API并不是真正的SOAP。它基本上是基于HTTP的XML。所以你必须手动创建你发送到zimbra的xml文档。我不知道有什么Java库,我做了一个Python one。
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); } }
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窗口中给予的.csrfTokenauthToken你在cooke中给予ZM_AUTH_TOKEN
soap的请求必须通过cookiesZM_AUTH_TOKEN、JSESSIONID和ZM_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>
3条答案
按热度按时间rks48beu1#
遗憾的是,API并不是真正的SOAP。它基本上是基于HTTP的XML。所以你必须手动创建你发送到zimbra的xml文档。
我不知道有什么Java库,我做了一个Python one。
bqjvbblv2#
您可以使用Zimbra库来调用SOAP API:
6kkfgxo03#
终点:https://your.domain.for.zimbra/service/soap/GetIdentitiesRequest
信封香皂
csrfToken您在js窗口中给予的.csrfToken
authToken你在cooke中给予ZM_AUTH_TOKEN
soap的请求必须通过cookiesZM_AUTH_TOKEN、JSESSIONID和ZM_TEST
使用Jetty Client API编写代码
而且,还有很多端点
Envelope仅在每个端点的子元素中发生更改