Een wrapper maken voor Acrobat Sign REST API
Er is een aangepaste AEM-bundel ontwikkeld om het webformulier te maken en terug te sturen naar de eindgebruiker
- creeer Overgaand Document . Het document dat via deze oproep wordt geüpload, wordt tijdelijk genoemd omdat het slechts 7 dagen na het uploaden beschikbaar is. De geretourneerde tijdelijke document-id kan worden gebruikt in de API-aanroepen waar naar het geüploade bestand moet worden verwezen. De tijdelijke documentaanvraag bestaat uit drie delen: bestandsnaam, mime-type en de bestandsstroom. In deze aanvraag kunt u slechts één bestand tegelijk uploaden.
- creeer Webvorm .Dit is een primair eindpunt dat wordt gebruikt om een nieuwe Webvorm tot stand te brengen. Het webformulier is gemaakt met de status AcTIVE om het webformulier direct te hosten.
- wint de Webvorm terug.Win het Web van de gebruiker terug. Dit webformulier wordt vervolgens gepresenteerd aan de aanroepende toepassing voor het ondertekenen van het document.
Acrobat Sign OSGi-configuratie maken
Acrobat Sign REST API vereist de integratietoets en e-mail die aan de integratietoets zijn gekoppeld. Deze twee waarden worden verstrekt als OSGi configuratieeigenschappen zoals hieronder getoond
package com.acrobatsign.core.configuration;
import org.osgi.service.metatype.annotations.AttributeDefinition;
import org.osgi.service.metatype.annotations.ObjectClassDefinition;
@ObjectClassDefinition(name="Acrobat Sign Configuration", description = "Acrobat SignConfiguration")
public @interface AcrobatSignConfiguration
{
@AttributeDefinition(name="Acrobat Sign Integration Key", description = "Integration key you created in Acrobat Sign ")
String getIntegrationKey();
@AttributeDefinition(name="X-API-USER", description = "X-API-USER")
String getApiUser();
}
package com.acrobatsign.core.configuration;
import org.osgi.service.component.annotations.Activate;
import org.osgi.service.component.annotations.Component;
import org.osgi.service.metatype.annotations.Designate;
@Component(immediate = true, service = AcrobatSignConfigurationService.class)
@Designate(ocd = AcrobatSignConfiguration.class)
public class AcrobatSignConfigurationService {
private String IntegrationKey;
private String apiUserEmail;
public String getIntegrationKey() {
return IntegrationKey;
}
public String getApiUserEmail() {
return apiUserEmail;
}
@Activate
protected final void activate(AcrobatSignConfiguration config) {
IntegrationKey = config.getIntegrationKey();
apiUserEmail = config.getApiUser();
}
}
Transiente document-id ophalen
De volgende code is geschreven om een tijdelijk document te maken
public String getTransientDocumentID(Document documentForSigning) throws IOException {
String integrationKey = acrobatSignConfig.getIntegrationKey();
String apiUser = acrobatSignConfig.getApiUserEmail();
String url = "https://api.na1.adobesign.com/api/rest/v6/transientDocuments";
MultipartEntityBuilder builder = MultipartEntityBuilder.create();
org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("x-api-user", "email:" + apiUser);
httpPost.addHeader("Authorization", "Bearer " + integrationKey);
builder.addBinaryBody("File", documentForSigning.getInputStream(), ContentType.DEFAULT_BINARY, "NDA.PDF");
builder.addTextBody("File-Name", "NDA.pdf");
HttpEntity entity = builder.build();
log.debug("Build the entity");
httpPost.setEntity(entity);
CloseableHttpResponse response = httpClient.execute(httpPost);
log.debug("Sent the request!!!!");
log.debug("REsponse code " + response.getStatusLine().getStatusCode());
HttpEntity httpEntity = response.getEntity();
String transientDocumentId = JsonParser.parseString(EntityUtils.toString(httpEntity)).getAsJsonObject().get("transientDocumentId").getAsString();
log.debug("Transient ID " + transientDocumentId);
return transientDocumentId;
}
Widget-id ophalen
public String getWidgetID(String transientDocumentID) {
String integrationKey = acrobatSignConfig.getIntegrationKey();
String apiUser = acrobatSignConfig.getApiUserEmail();
String url = "https://api.na1.adobesign.com:443/api/rest/v6/widgets";
org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpPost httpPost = new HttpPost(url);
httpPost.addHeader("x-api-user", "email:" + apiUser);
httpPost.addHeader("Authorization", "Bearer " + integrationKey);
String jsonREquest = "{\r\n" +
" \"fileInfos\": [\r\n" +
" {\r\n" +
" \"transientDocumentId\": \"a\"\r\n" +
" }\r\n" +
" ],\r\n" +
" \"name\": \"Release and Waiver Agreement\",\r\n" +
" \"state\": \"ACTIVE\",\r\n" +
" \"widgetParticipantSetInfo\": {\r\n" +
" \"memberInfos\": [\r\n" +
" {\r\n" +
" \"email\": \"\"\r\n" +
" }\r\n" +
" ],\r\n" +
" \"role\": \"SIGNER\"\r\n" +
" }\r\n" +
"}";
JsonObject jsonReq = JsonParser.parseString(jsonREquest).getAsJsonObject();
jsonReq.getAsJsonArray("fileInfos").get(0).getAsJsonObject().addProperty("transientDocumentId", transientDocumentID);
log.debug("The updated json object is " + jsonReq);
try {
StringEntity stringEntity = new StringEntity(jsonReq.toString());
httpPost.setEntity(stringEntity);
httpPost.addHeader("Content-Type", "application/json");
CloseableHttpResponse response = httpClient.execute(httpPost);
log.debug("The response is " + response.getStatusLine().getStatusCode());
String widgetID = JsonParser.parseString(EntityUtils.toString(response.getEntity())).getAsJsonObject().get("id").getAsString();
log.debug("The widget id is " + widgetID);
return widgetID;
} catch (Exception e) {
log.debug("Error in getting Widget ID:" + e.getMessage());
}
return null;
}
Widget-URL ophalen
public String getWidgetURL(String widgetId) throws ClientProtocolException, IOException {
log.debug("$$$$ in get Widget URL for "+widgetId+ "widget id");
String url = "https://api.na1.adobesign.com:443/api/rest/v6/widgets";
org.apache.http.impl.client.CloseableHttpClient httpClient = HttpClientBuilder.create().build();
HttpGet httpGet = new HttpGet(url);
httpGet.addHeader("x-api-user", "email:"+acrobatSignConfig.getApiUserEmail());
httpGet.addHeader("Authorization", "Bearer "+acrobatSignConfig.getIntegrationKey());
CloseableHttpResponse response = httpClient.execute(httpGet);
JsonObject jsonResponse = JsonParser.parseString(EntityUtils.toString(response.getEntity())).getAsJsonObject();
log.debug("The json response from get widgets is "+jsonResponse.toString());
JsonArray userWidgetList = jsonResponse.get("userWidgetList").getAsJsonArray();
log.debug("The array size is "+userWidgetList.size());
for(int i=0;i<userWidgetList.size();i++)
{
log.debug("Getting widget object "+i);
JsonObject temp = userWidgetList.get(i).getAsJsonObject();
log.debug("The widget object "+i+"is "+temp.toString());
if(temp.get("id").getAsString().equalsIgnoreCase(widgetId))
{
log.debug("Bingo found the matching widget id "+i);
String widgetURL = temp.get("url").getAsString();
return widgetURL;
}
}
return null;
}
8de24117-1378-413c-a581-01e660b7163e