Quick Start (SOAP mode): Digitally signing a PDF document using the Java API

The following Java code example digitally signs a PDF document that is based on a PDF file named LoanSig.pdf. The alias that is specified for the security credential is secure, and revocation checking is performed. Because no CRL or OCSP server information is specified, the server information is obtained from the certificate used to digitally sign the PDF document. The signed document is saved as a PDF file named LoanSigned.pdf. (See Digitally Signing PDF Documents.)

/* 
    * This Java Quick Start uses the SOAP mode and contains the following JAR files 
    * in the class path: 
    * 1. adobe-signatures-client.jar 
    * 2. adobe-livecycle-client.jar 
    * 3. adobe-usermanager-client.jar 
    * 4. adobe-utilities.jar 
    * 5. jbossall-client.jar (use a different JAR file if the LiveCycle server is not deployed 
    * on JBoss) 
    * 6. activation.jar (required for SOAP mode) 
    * 7. axis.jar (required for SOAP mode) 
    * 8. commons-codec-1.3.jar (required for SOAP mode) 
    * 9.  commons-collections-3.1.jar  (required for SOAP mode) 
    * 10. commons-discovery.jar (required for SOAP mode) 
    * 11. commons-logging.jar (required for SOAP mode) 
    * 12. dom3-xml-apis-2.5.0.jar (required for SOAP mode) 
    * 13. jaxen-1.1-beta-9.jar (required for SOAP mode) 
    * 14. jaxrpc.jar (required for SOAP mode) 
    * 15. log4j.jar (required for SOAP mode) 
    * 16. mail.jar (required for SOAP mode) 
    * 17. saaj.jar (required for SOAP mode) 
    * 18. wsdl4j.jar (required for SOAP mode) 
    * 19. xalan.jar (required for SOAP mode) 
    * 20. xbean.jar (required for SOAP mode) 
    * 21. xercesImpl.jar (required for SOAP mode) 
    *  
    *  These JAR files are located in the following path: 
    * <install directory>/sdk/client-libs/common 
    *  
    * The adobe-utilities.jar file is located in the following path: 
    * <install directory>/sdk/client-libs/jboss 
    *  
    * The jbossall-client.jar file is located in the following path: 
    * <install directory>/jboss/client 
    *  
    * SOAP required JAR files are located in the following path: 
    * <install directory>/sdk/client-libs/thirdparty 
    *  
    * If you want to invoke a remote LiveCycle server instance and there is a 
    * firewall between the client application and the server, then it is  
    * recommended that you use the SOAP mode. When using the SOAP mode,  
    * you have to include these additional JAR files 
    *  
    * For information about the SOAP  
    * mode, see "Setting connection properties" in Programming  
    * with LiveCycle 
    */ 
import java.util.*; 
import java.io.File; 
import java.io.FileInputStream; 
import com.adobe.livecycle.signatures.client.*; 
import com.adobe.livecycle.signatures.client.types.*; 
import com.adobe.livecycle.signatures.pki.client.types.common.HashAlgorithm; 
import com.adobe.idp.Document; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactory; 
import com.adobe.idp.dsc.clientsdk.ServiceClientFactoryProperties; 
 
public class SignDocumentSOAP { 
 
public static void main(String[] args) { 
         
    try 
    { 
      //Set connection properties required to invoke LiveCycle using SOAP mode                                 
        Properties connectionProps = new Properties(); 
        connectionProps.setProperty(ServiceClientFactoryProperties.DSC_DEFAULT_SOAP_ENDPOINT, "http://hiro-xp:8080"); 
        connectionProps.setProperty(ServiceClientFactoryProperties.DSC_TRANSPORT_PROTOCOL,ServiceClientFactoryProperties.DSC_SOAP_PROTOCOL);           
        connectionProps.setProperty(ServiceClientFactoryProperties.DSC_SERVER_TYPE, "JBoss"); 
        connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_USERNAME, "administrator"); 
        connectionProps.setProperty(ServiceClientFactoryProperties.DSC_CREDENTIAL_PASSWORD, "password"); 
     
      //Create a ServiceClientFactory instance 
      ServiceClientFactory myFactory = ServiceClientFactory.createInstance(connectionProps); 
 
      //Create a SignatureServiceClient object 
      SignatureServiceClient signClient = new SignatureServiceClient(myFactory); 
         
      //Specify a PDF document to sign 
      FileInputStream fileInputStream = new FileInputStream("C:\\Adobe\LoanSig.pdf");     
      Document credDoc = new Document (fileInputStream); 
     
      //Specify the name of the signature field 
      String fieldName = "SignatureField1"; 
 
      //Create a Credential object 
      Credential myCred = Credential.getInstance("secure"); 
 
      //Specify the reason to sign the document 
      String reason = "The document was reviewed"; 
 
      //Specify the location of the signer 
      String location  = "New York HQ";  
 
      //Specify contact information 
      String contactInfo = "Tony Blue"; 
 
      //Create a PDFSignatureAppearanceOptions object  
      //and show date information 
      PDFSignatureAppearanceOptionSpec appear = new  PDFSignatureAppearanceOptionSpec();  
      appear.setShowDate(true); 
      appear.setShowReason(true); 
     
      //Set revocation checking to false 
      java.lang.Boolean revCheck = new Boolean(true); 
     
      //Create an OCSPOptionSpec object to pass to the sign method 
           OCSPOptionSpec ocspSpec = new OCSPOptionSpec(); 
          
           //Create a CRLOptionSpec object to pass to the sign method 
           CRLOptionSpec crlSpec = new CRLOptionSpec(); 
          
           //Create a TSPOptionSpec object to pass to the sign method 
           TSPOptionSpec tspSpec = new TSPOptionSpec(); 
 
      //Sign the PDF document 
      Document signedDoc = signClient.sign( 
         credDoc, 
         fieldName, 
         myCred, 
         HashAlgorithm.SHA1, 
         reason, 
         location, 
         contactInfo, 
         appear, 
         revCheck, 
        ocspSpec, 
             crlSpec, 
             tspSpec); 
 
      //Save the signed PDF document                         
      File outFile = new File("C:\\Adobe\LoanSigned.pdf"); 
      signedDoc.copyToFile (outFile); 
      } 
     
    catch (Exception ee) 
      { 
        ee.printStackTrace(); 
      } 
      } 
}