How to write Junit test cases for path based sling servlet for pdf generation using output service | Community
Skip to main content
Level 2
February 6, 2023
Solved

How to write Junit test cases for path based sling servlet for pdf generation using output service

  • February 6, 2023
  • 1 reply
  • 781 views

Can anyone please suggest to write Junit test cases for the following path based sling servlet?

-  Servlet for PDF generation, using output service with post method

- Takes two input parameter

  1. xdp from path /content/dam/formsanddocuments .
  2. xml data from postman.

- Using generatePDFOutput method of output service to generate pdf

Code snippet:

@8220494(service = { Servlet.class }, property = { SLING_SERVLET_METHODS + "=POST",

SLING_SERVLET_EXTENSIONS + "=json", SLING_SERVLET_PATHS + "=/bin/generatePDFService" })

 

public class PDFCreationServlet extends SlingAllMethodsServlet {

 

private static final String XDP_PATH = "/content/dam/formsanddocuments/";

 

private static String XML_PATH = "";

 

private static final long serialVersionUID = 1L;

 

private static final String SERVICE_USER_ACCOUNT = "serviceuser";

 

 

 

@3214626

private transient ResourceResolverFactory resourceResolverFactory;

 

@3214626

OutputService outputService;

 

public void doPost(final SlingHttpServletRequest request, final SlingHttpServletResponse response)

throws ServletException, IOException {

 

final Map<String, Object> serviceUserSession = Collections.singletonMap(ResourceResolverFactory.SUBSERVICE,

SERVICE_USER_ACCOUNT);

 

try {

ResourceResolver resolver = resourceResolverFactory.getServiceResourceResolver(serviceUserSession);

Resource res = resolver.getResource(XDP_PATH + "Autumn.xdp");

 

// getting xdp from repository and converting into document

Asset asset = res.adaptTo(Asset.class);

Resource xdp = asset.getOriginal();

InputStream xdpIS = xdp.adaptTo(InputStream.class);

Document xdpDocument = new Document(xdpIS);

 

 

// getting XML data via postman and converting into document

XML_PATH = request.getParameter("formData");

String xmlData=null;

String xmlFile = new String(Files.readAllBytes(Paths.get(XML_PATH)));

// xml parsing

xmlData = com.UticaPoC.parsing.XmlParserData.parseXmlData(xmlFile);

InputStream xmlIS = IOUtils.toInputStream(xmlData, StandardCharsets.UTF_8);

Document xmlDocument = new Document(xmlIS);

 

//output options

PDFOutputOptions outputOptions = new PDFOutputOptions();

outputOptions.setAcrobatVersion(AcrobatVersion.Acrobat_11);

Document doc;

doc = outputService.generatePDFOutput(xdpDocument, xmlDocument, outputOptions);

 

// Save the result in a PDF file

File pdfFile = new File("C:\\PDF's\\GeneratedPDF.pdf");

doc.copyToFile(pdfFile);

 

response.setContentType("application/pdf");

response.addHeader("Content-Disposition", "attachment; filename=output.pdf");

OutputStream responseOutputStream = response.getOutputStream();

IOUtils.copy(doc.getInputStream(), responseOutputStream);

 

responseOutputStream.flush();

responseOutputStream.close();

} catch (OutputServiceException e) {

e.printStackTrace();

response.getWriter().write("OutputServiceException occurred: PDF generation failed. " + e.getMessage());

} catch (LoginException e) {

// TODO Auto-generated catch block

e.printStackTrace();

response.getWriter().write("LoginException occurred: " + e.getMessage());

} catch (Exception e) {

// TODO Auto-generated catch block

e.printStackTrace();

response.getWriter().write("Exception occurred: " + e.getMessage());

}

}

 

Any reference or suggestion will be helpful to write junit test cases for the above servlet.

Thanks.

 

 

 

 

 

 

This post is no longer active and is closed to new replies. Need help? Start a new post to ask your question.
Best answer by Mayank_Gandhi

@chayanika_27 are you not able to mock it like any other servlet? 

 

https://taylor.callsen.me/unit-testing-aem-sling-models-and-servlets/

1 reply

Mayank_Gandhi
Adobe Employee
Mayank_GandhiAdobe EmployeeAccepted solution
Adobe Employee
February 8, 2023

@chayanika_27 are you not able to mock it like any other servlet? 

 

https://taylor.callsen.me/unit-testing-aem-sling-models-and-servlets/