SealClient

import java.io.BufferedReader;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.HttpURLConnection;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLEncoder;
import java.security.KeyStore;

import javax.net.ssl.HostnameVerifier;
import javax.net.ssl.HttpsURLConnection;
import javax.net.ssl.KeyManagerFactory;
import javax.net.ssl.SSLContext;
import javax.net.ssl.SSLSession;
import javax.net.ssl.TrustManagerFactory;

import cfca.seal.util.Base64;
import cfca.seal.util.StringUtil;

public class SealClient
{
  public static final String ASSIST_SEAL_SERVLET = "AssistSealServlet";
  public static final String MAKE_SEAL_SERVLET = "MakeSealServlet";
  public static final String WEB_SEAL_SERVLET = "WebSealServlet";
  public static final String PDF_SEAL_SERVLET = "PdfSealServlet";
  public static final String BUSINESS_SEAL_SERVLET = "BusinessSealServlet";
  public static final String DEFAULT_CHARSET = "UTF-8";
  public static final String SLASH = "/";
  private String urlString;
  private int connectTimeout = 30000;
  private int readTimeout = 30000;

  private String keyStorePath = "";
  private String keyStorePassword = "";
  private String trustStorePath = "";
  private String trustStorePassword = "";

  public SealClient(String urlString, String keyStorePath, String keyStorePassword, String trustStorePath, String trustStorePassword) {
    this.keyStorePath = keyStorePath;
    this.keyStorePassword = keyStorePassword;
    this.trustStorePath = trustStorePath;
    this.trustStorePassword = trustStorePassword;
    this.urlString = urlString;
  }

  public SealClient(String urlString) {
    this.urlString = urlString;
  }

  public SealClient(String urlString, int connectTimeout, int readTimeout) {
    this.urlString = urlString;
    this.connectTimeout = connectTimeout;
    this.readTimeout = readTimeout;
  }

  public String reqAndRes(String urlString, String parameterData) throws Exception {
    String result = "";

    if ((StringUtil.isNotEmpty(urlString)) && (urlString.startsWith("https://")))
      result = reqAndResForHttps(urlString, parameterData);
    else if ((StringUtil.isNotEmpty(urlString)) && (urlString.startsWith("http://"))) {
      result = reqAndResForHttp(urlString, parameterData);
    }

    return result;
  }

  public String reqAndResForHttps(String urlString, String parameterData) throws Exception
  {
    OutputStream outputStream = null;
    OutputStreamWriter outputStreamWriter = null;
    InputStream inputStream = null;
    InputStreamReader inputStreamReader = null;
    BufferedReader reader = null;
    StringBuffer resultBuffer = new StringBuffer();
    try
    {
      SSLContext sslContext = getSSLContext(this.keyStorePath, this.keyStorePassword, this.trustStorePath, this.trustStorePassword);
      URL url = new URL(urlString);
      HttpsURLConnection conn = (HttpsURLConnection)url.openConnection();
      conn.setSSLSocketFactory(sslContext.getSocketFactory());
      conn.setRequestMethod("POST");
      conn.setDoInput(true);
      conn.setDoOutput(true);
      conn.setRequestProperty("Accept-Charset", "utf-8");
      conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
      System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(this.connectTimeout));
      System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(this.readTimeout));
      conn.setHostnameVerifier(new HostnameVerifier() {
        public boolean verify(String hostname, SSLSession session) {
          return true;
        }
      });
      conn.setRequestProperty("Content-Length", String.valueOf(parameterData.length()));
      outputStream = conn.getOutputStream();

      outputStreamWriter = new OutputStreamWriter(outputStream);
      outputStreamWriter.write(parameterData);
      outputStreamWriter.flush();

      inputStream = conn.getInputStream();
      inputStreamReader = new InputStreamReader(inputStream);
      reader = new BufferedReader(inputStreamReader);
      String tempLine = null;
      while ((tempLine = reader.readLine()) != null)
        resultBuffer.append(tempLine);
    }
    catch (MalformedURLException e) {
      throw e;
    } catch (IOException e) {
      throw e;
    } finally {
      if (outputStreamWriter != null) {
        outputStreamWriter.close();
      }

      if (outputStream != null) {
        outputStream.close();
      }

      if (reader != null) {
        reader.close();
      }

      if (inputStreamReader != null) {
        inputStreamReader.close();
      }

      if (inputStream != null) {
        inputStream.close();
      }
    }
    return resultBuffer.toString();
  }

  public String reqAndResForHttp(String urlString, String parameterData) throws Exception {
        OutputStream outputStream = null;
        OutputStreamWriter outputStreamWriter = null;
        InputStream inputStream = null;
        InputStreamReader inputStreamReader = null;
        BufferedReader reader = null;
        StringBuffer resultBuffer = new StringBuffer();
        try
        {
          URL url = new URL(urlString);
          HttpURLConnection conn = (HttpURLConnection)url.openConnection();
          conn.setDoOutput(true);
          conn.setDoInput(true);
          conn.setRequestMethod("POST");
          conn.setRequestProperty("Accept-Charset", "utf-8");
          conn.setRequestProperty("Content-Type", "application/x-www-form-urlencoded");
          conn.setRequestProperty("Content-Length", String.valueOf(parameterData.length()));
          System.setProperty("sun.net.client.defaultConnectTimeout", String.valueOf(this.connectTimeout));
          System.setProperty("sun.net.client.defaultReadTimeout", String.valueOf(this.readTimeout));
          outputStream = conn.getOutputStream();
          outputStreamWriter = new OutputStreamWriter(outputStream);
          outputStreamWriter.write(parameterData);
          outputStreamWriter.flush();
          inputStream = conn.getInputStream();
          inputStreamReader = new InputStreamReader(inputStream);
          reader = new BufferedReader(inputStreamReader);
          String tempLine = null;
          while ((tempLine = reader.readLine()) != null)
            resultBuffer.append(tempLine);
        }
        catch (MalformedURLException e) {
          throw e;
        } catch (IOException e) {
          throw e;
        } finally {
          if (outputStreamWriter != null) {
            outputStreamWriter.close();
          }

          if (outputStream != null) {
            outputStream.close();
          }

          if (reader != null) {
            reader.close();
          }

          if (inputStreamReader != null) {
            inputStreamReader.close();
          }

          if (inputStream != null) {
            inputStream.close();
          }
        }
        return resultBuffer.toString();
      }

  public SSLContext getSSLContext(String keyStorePath, String keyStorePassword, String trustStorePath, String trustStorePassword) throws Exception
  {
    SSLContext ctx = SSLContext.getInstance("SSL");

    String jdkvs = System.getProperty("java.vm.vendor");

    KeyManagerFactory kmf = null;
    TrustManagerFactory tmf = null;
    if ((null != jdkvs) && (jdkvs.startsWith("IBM"))) {
      kmf = KeyManagerFactory.getInstance("IbmX509");
      tmf = TrustManagerFactory.getInstance("IbmPKIX");
    } else {
      kmf = KeyManagerFactory.getInstance("SunX509");
      tmf = TrustManagerFactory.getInstance("SunX509");
    }

    KeyStore ks = null;

    if (keyStorePath.indexOf("jks") >= 0)
      ks = KeyStore.getInstance("JKS");
    else if (keyStorePath.indexOf("pfx") >= 0) {
      ks = KeyStore.getInstance("PKCS12");
    }
    KeyStore tks = KeyStore.getInstance("JKS");

    ks.load(new FileInputStream(keyStorePath), keyStorePassword.toCharArray());
    tks.load(new FileInputStream(trustStorePath), trustStorePassword.toCharArray());

    kmf.init(ks, keyStorePassword.toCharArray());
    tmf.init(tks);

    ctx.init(kmf.getKeyManagers(), tmf.getTrustManagers(), null);

    return ctx;
  }

  public String makeSeal(byte[] pfx, String pfxPassword, byte[] image, String sealInfoXML)
    throws Exception
  {
    try
    {
      String pfxString = new String(Base64.encode(pfx), "UTF-8");
      pfxString = URLEncoder.encode(pfxString, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      String imageString = new String(Base64.encode(image), "UTF-8");
      imageString = URLEncoder.encode(imageString, "UTF-8");

      sealInfoXML = new String(Base64.encode(sealInfoXML.getBytes("UTF-8")), "UTF-8");
      sealInfoXML = URLEncoder.encode(sealInfoXML, "UTF-8");

      String parameterData = "type=makeSeal&pfx=" + pfxString + "&pfxPassword=" + pfxPassword + "&image=" + imageString + "&sealInfoXML=" + sealInfoXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String makeNamedSeal(byte[] pfx, String pfxPassword, String sealInfoXML)
    throws Exception
  {
    try
    {
      String pfxString = new String(Base64.encode(pfx), "UTF-8");
      pfxString = URLEncoder.encode(pfxString, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      sealInfoXML = new String(Base64.encode(sealInfoXML.getBytes("UTF-8")), "UTF-8");
      sealInfoXML = URLEncoder.encode(sealInfoXML, "UTF-8");

      String parameterData = "type=makeNamedSeal&pfx=" + pfxString + "&pfxPassword=" + pfxPassword + "&sealInfoXML=" + sealInfoXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String updateSeal(byte[] pfx, String pfxPassword, byte[] image, String sealInfoXML)
    throws Exception
  {
    try
    {
      String pfxString = new String(Base64.encode(pfx), "UTF-8");
      pfxString = URLEncoder.encode(pfxString, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      String imageString = new String(Base64.encode(image), "UTF-8");
      imageString = URLEncoder.encode(imageString, "UTF-8");

      sealInfoXML = new String(Base64.encode(sealInfoXML.getBytes("UTF-8")), "UTF-8");
      sealInfoXML = URLEncoder.encode(sealInfoXML, "UTF-8");

      String parameterData = "type=updateSeal&pfx=" + pfxString + "&pfxPassword=" + pfxPassword + "&image=" + imageString + "&sealInfoXML=" + sealInfoXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String updateNamedSeal(byte[] pfx, String pfxPassword, String sealInfoXML)
    throws Exception
  {
    try
    {
      String pfxString = new String(Base64.encode(pfx), "UTF-8");
      pfxString = URLEncoder.encode(pfxString, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      sealInfoXML = new String(Base64.encode(sealInfoXML.getBytes("UTF-8")), "UTF-8");
      sealInfoXML = URLEncoder.encode(sealInfoXML, "UTF-8");

      String parameterData = "type=updateNamedSeal&pfx=" + pfxString + "&pfxPassword=" + pfxPassword + "&sealInfoXML=" + sealInfoXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] sealAutoPdf(byte[] pdf, String sealStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");
      sealStrategyXML = new String(Base64.encode(sealStrategyXML.getBytes("UTF-8")), "UTF-8");
      sealStrategyXML = URLEncoder.encode(sealStrategyXML, "UTF-8");

      String parameterData = "type=sealAutoPdf&pdf=" + pdfString + "&sealStrategyXML=" + sealStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] batchSealAutoPdf(byte[] pdf, String batchSealStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      batchSealStrategyXML = new String(Base64.encode(batchSealStrategyXML.getBytes("UTF-8")), "UTF-8");
      batchSealStrategyXML = URLEncoder.encode(batchSealStrategyXML, "UTF-8");

      String parameterData = "type=batchSealAutoPdf&pdf=" + pdfString + "&batchSealStrategyXML=" + batchSealStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String sealBase64PdfFunction(String pdfBase64, String pfxBase64, String pfxPassword, String imageBase64, String sealFunctionStrategyXML)
    throws Exception
  {
    try
    {
      pdfBase64 = new String(Base64.encode(pdfBase64.getBytes("UTF-8")), "UTF-8");
      pdfBase64 = URLEncoder.encode(pdfBase64, "UTF-8");

      pfxBase64 = new String(Base64.encode(pfxBase64.getBytes("UTF-8")), "UTF-8");
      pfxBase64 = URLEncoder.encode(pfxBase64, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      imageBase64 = new String(Base64.encode(imageBase64.getBytes("UTF-8")), "UTF-8");
      imageBase64 = URLEncoder.encode(imageBase64, "UTF-8");

      sealFunctionStrategyXML = new String(Base64.encode(sealFunctionStrategyXML.getBytes("UTF-8")), "UTF-8");
      sealFunctionStrategyXML = URLEncoder.encode(sealFunctionStrategyXML, "UTF-8");

      String parameterData = "type=sealBase64PdfFunction&pdfBase64=" + pdfBase64 + "&pfxBase64=" + pfxBase64 + "&pfxPassword=" + pfxPassword + "&imageBase64=" + imageBase64 + "&sealFunctionStrategyXML=" + sealFunctionStrategyXML;

      return reqAndRes(this.urlString, parameterData);
    }
    catch (Exception e)
    {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] sealPdfFunction(byte[] pdf, byte[] pfx, String pfxPassword, byte[] image, String sealFunctionStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      String pfxString = new String(Base64.encode(pfx), "UTF-8");
      pfxString = URLEncoder.encode(pfxString, "UTF-8");

      pfxPassword = new String(Base64.encode(pfxPassword.getBytes("UTF-8")), "UTF-8");
      pfxPassword = URLEncoder.encode(pfxPassword, "UTF-8");

      String imageString = new String(Base64.encode(image), "UTF-8");
      imageString = URLEncoder.encode(imageString, "UTF-8");

      sealFunctionStrategyXML = new String(Base64.encode(sealFunctionStrategyXML.getBytes("UTF-8")), "UTF-8");
      sealFunctionStrategyXML = URLEncoder.encode(sealFunctionStrategyXML, "UTF-8");

      String parameterData = "type=sealPdfFunction&pdfString=" + pdfString + "&pfxString=" + pfxString + "&pfxPassword=" + pfxPassword + "&imageString=" + imageString + "&sealFunctionStrategyXML=" + sealFunctionStrategyXML;

      return Base64.decode(reqAndRes(this.urlString, parameterData));
    }
    catch (Exception e)
    {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] sealAutoCrossPdf(byte[] pdf, String crossSealStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      crossSealStrategyXML = new String(Base64.encode(crossSealStrategyXML.getBytes("UTF-8")), "UTF-8");
      crossSealStrategyXML = URLEncoder.encode(crossSealStrategyXML, "UTF-8");

      String parameterData = "type=sealAutoCrossPdf&pdf=" + pdfString + "&crossSealStrategyXML=" + crossSealStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] sealAutoSynthesizedBusinessPdf(byte[] pdf, String businessXML, String sealStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      businessXML = new String(Base64.encode(businessXML.getBytes("UTF-8")), "UTF-8");
      businessXML = URLEncoder.encode(businessXML, "UTF-8");

      sealStrategyXML = new String(Base64.encode(sealStrategyXML.getBytes("UTF-8")), "UTF-8");
      sealStrategyXML = URLEncoder.encode(sealStrategyXML, "UTF-8");

      String parameterData = "type=sealAutoSynthesizedBusinessPdf&pdf=" + pdfString + "&businessXML=" + businessXML + "&sealStrategyXML=" + sealStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] addWaterMark2Pdf(byte[] pdf, String waterMarkStrategyXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      waterMarkStrategyXML = new String(Base64.encode(waterMarkStrategyXML.getBytes("UTF-8")), "UTF-8");
      waterMarkStrategyXML = URLEncoder.encode(waterMarkStrategyXML, "UTF-8");

      String parameterData = "type=addWaterMark2Pdf&pdf=" + pdfString + "&waterMarkStrategyXML=" + waterMarkStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] signWebSeal(String sourceBase64, String sealStrategyXml)
    throws Exception
  {
    try
    {
      sourceBase64 = new String(Base64.encode(sourceBase64.getBytes("UTF-8")), "UTF-8");
      sourceBase64 = URLEncoder.encode(sourceBase64, "UTF-8");

      sealStrategyXml = new String(Base64.encode(sealStrategyXml.getBytes("UTF-8")), "UTF-8");
      sealStrategyXml = URLEncoder.encode(sealStrategyXml, "UTF-8");

      String parameterData = "type=signWebSeal&sourceBase64=" + sourceBase64 + "&sealStrategyXml=" + sealStrategyXml;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String verifyPdfSeal(byte[] sealedPdf, String verifyStrategyXML)
    throws Exception
  {
    try
    {
      String sealedPdfString = new String(Base64.encode(sealedPdf), "UTF-8");
      sealedPdfString = URLEncoder.encode(sealedPdfString, "UTF-8");

      verifyStrategyXML = new String(Base64.encode(verifyStrategyXML.getBytes("UTF-8")), "UTF-8");
      verifyStrategyXML = URLEncoder.encode(verifyStrategyXML, "UTF-8");

      String parameterData = "type=verifyPdfSeal&sealedPdf=" + sealedPdfString + "&verifyStrategyXML=" + verifyStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String verifyWebSeal(String webSealSource, String sourceBase64, String verifyStrategyXML)
    throws Exception
  {
    try
    {
      webSealSource = new String(Base64.encode(webSealSource.getBytes("UTF-8")), "UTF-8");
      webSealSource = URLEncoder.encode(webSealSource, "UTF-8");

      sourceBase64 = new String(Base64.encode(sourceBase64.getBytes("UTF-8")), "UTF-8");
      sourceBase64 = URLEncoder.encode(sourceBase64, "UTF-8");

      verifyStrategyXML = new String(Base64.encode(verifyStrategyXML.getBytes("UTF-8")), "UTF-8");
      verifyStrategyXML = URLEncoder.encode(verifyStrategyXML, "UTF-8");

      String parameterData = "type=verifyWebSeal&webSealSource=" + webSealSource + "&sourceBase64=" + sourceBase64 + "&verifyStrategyXML=" + verifyStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] synthesizeAutoBusinessPdf(byte[] pdf, String businessXML)
    throws Exception
  {
    try
    {
      String pdfString = new String(Base64.encode(pdf), "UTF-8");
      pdfString = URLEncoder.encode(pdfString, "UTF-8");

      businessXML = new String(Base64.encode(businessXML.getBytes("UTF-8")), "UTF-8");
      businessXML = URLEncoder.encode(businessXML, "UTF-8");

      String parameterData = "type=synthesizeAutoBusinessPdf&pdf=" + pdfString + "&businessXML=" + businessXML;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public byte[] transformToPdf(byte[] source, String fileType)
    throws Exception
  {
    try
    {
      String sourceString = new String(Base64.encode(source), "UTF-8");
      sourceString = URLEncoder.encode(sourceString, "UTF-8");

      fileType = new String(Base64.encode(fileType.getBytes("UTF-8")), "UTF-8");
      fileType = URLEncoder.encode(fileType, "UTF-8");

      String parameterData = "type=transformToPdf&sourceString=" + sourceString + "&fileType=" + fileType;

      String resultString = reqAndRes(this.urlString, parameterData);
      return Base64.decode(resultString.getBytes("UTF-8"));
    }
    catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String p1Sign(byte[] source, String signStrategyXML)
    throws Exception
  {
    try
    {
      String sourceString = new String(Base64.encode(source), "UTF-8");
      sourceString = URLEncoder.encode(sourceString, "UTF-8");

      signStrategyXML = new String(Base64.encode(signStrategyXML.getBytes("UTF-8")), "UTF-8");
      signStrategyXML = URLEncoder.encode(signStrategyXML, "UTF-8");

      String parameterData = "type=p1Sign&source=" + sourceString + "&signStrategyXML=" + signStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String p7SignDetached(byte[] source, String signStrategyXML)
    throws Exception
  {
    try
    {
      String sourceString = new String(Base64.encode(source), "UTF-8");
      sourceString = URLEncoder.encode(sourceString, "UTF-8");

      signStrategyXML = new String(Base64.encode(signStrategyXML.getBytes("UTF-8")), "UTF-8");
      signStrategyXML = URLEncoder.encode(signStrategyXML, "UTF-8");

      String parameterData = "type=p7SignDetached&source=" + sourceString + "&signStrategyXML=" + signStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String p7VerifyDetached(String signatureBase64, byte[] source, String verifyStrategyXML)
    throws Exception
  {
    try
    {
      signatureBase64 = new String(Base64.encode(signatureBase64.getBytes("UTF-8")), "UTF-8");
      signatureBase64 = URLEncoder.encode(signatureBase64, "UTF-8");

      String sourceString = new String(Base64.encode(source), "UTF-8");
      sourceString = URLEncoder.encode(sourceString, "UTF-8");

      verifyStrategyXML = new String(Base64.encode(verifyStrategyXML.getBytes("UTF-8")), "UTF-8");
      verifyStrategyXML = URLEncoder.encode(verifyStrategyXML, "UTF-8");

      String parameterData = "type=p7VerifyDetached&signatureBase64=" + signatureBase64 + "&source=" + sourceString + "&verifyStrategyXML=" + verifyStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String getSealInfo(String sealCode)
    throws Exception
  {
    try
    {
      sealCode = new String(Base64.encode(sealCode.getBytes("UTF-8")), "UTF-8");
      sealCode = URLEncoder.encode(sealCode, "UTF-8");

      String parameterData = "type=getSealInfo&sealCode=" + sealCode;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String bindSeal(String bindSealXML)
    throws Exception
  {
    try
    {
      bindSealXML = new String(Base64.encode(bindSealXML.getBytes("UTF-8")), "UTF-8");
      bindSealXML = URLEncoder.encode(bindSealXML, "UTF-8");

      String parameterData = "type=bindSeal&bindSealXML=" + bindSealXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }

  public String autoGenerateImage(String imageStrategyXML)
    throws Exception
  {
    try
    {
      imageStrategyXML = new String(Base64.encode(imageStrategyXML.getBytes("UTF-8")), "UTF-8");
      imageStrategyXML = URLEncoder.encode(imageStrategyXML, "UTF-8");

      String parameterData = "type=autoGenerateImage&imageStrategyXML=" + imageStrategyXML;

      String resultString = reqAndRes(this.urlString, parameterData);

      return new String(Base64.decode(resultString.getBytes("UTF-8")));
    } catch (Exception e) {
      e.printStackTrace();
      throw e;
    }
  }
}
原文地址:https://www.cnblogs.com/yy123/p/5301660.html