ixes for sonarcube ce scan results and new unit test
This commit is contained in:
parent
410a4d5bc8
commit
1d2de80027
@ -6,6 +6,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
||||
|
||||
## [Unreleased]
|
||||
|
||||
## [0.10.1] - 2022-09-02
|
||||
### Changed
|
||||
- fixes for sonarcube ce scan results
|
||||
- add units tests for servlet with mokito
|
||||
|
||||
## [0.9.9] - 2022-06-18
|
||||
### Changed
|
||||
- automated github release build
|
||||
|
||||
67
pom.xml
67
pom.xml
@ -6,7 +6,7 @@
|
||||
|
||||
<groupId>de.pdv.apex</groupId>
|
||||
<artifactId>fop4apex</artifactId>
|
||||
<version>0.9.10-SNAPSHOT</version>
|
||||
<version>0.10.1-SNAPSHOT</version>
|
||||
<name>fop4apex</name>
|
||||
<packaging>war</packaging>
|
||||
<url>https://www.pdv.de</url>
|
||||
@ -25,6 +25,12 @@
|
||||
<version>4.0.1</version>
|
||||
<scope>provided</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>junit</groupId>
|
||||
<artifactId>junit</artifactId>
|
||||
<version>4.13.2</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<dependency>
|
||||
<groupId>org.junit.jupiter</groupId>
|
||||
<artifactId>junit-jupiter-api</artifactId>
|
||||
@ -44,6 +50,14 @@
|
||||
<version>2.0.26</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
<!-- https://mvnrepository.com/artifact/org.mockito/mockito-core -->
|
||||
<dependency>
|
||||
<groupId>org.mockito</groupId>
|
||||
<artifactId>mockito-core</artifactId>
|
||||
<version>4.7.0</version>
|
||||
<scope>test</scope>
|
||||
</dependency>
|
||||
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.xmlgraphics/fop-core -->
|
||||
<dependency>
|
||||
@ -104,22 +118,6 @@
|
||||
<version>3.3.2</version>
|
||||
</plugin>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.owasp/dependency-check-maven -->
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>org.owasp</groupId>
|
||||
<artifactId>dependency-check-maven</artifactId>
|
||||
<version>7.1.1</version>
|
||||
<executions>
|
||||
<execution>
|
||||
<goals>
|
||||
<goal>check</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
</plugin>
|
||||
-->
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/org.apache.maven.plugins/maven-surefire-plugin -->
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
@ -157,24 +155,23 @@
|
||||
</plugin>
|
||||
|
||||
<!-- https://mvnrepository.com/artifact/com.google.cloud.tools/jib-maven-plugin -->
|
||||
<!--
|
||||
<plugin>
|
||||
<groupId>com.google.cloud.tools</groupId>
|
||||
<artifactId>jib-maven-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<configuration>
|
||||
<from>
|
||||
<image>compile.pdv.lan:8001/product/base/vis-tomcat:9.0</image>
|
||||
</from>
|
||||
<to>
|
||||
<image>fop4apex</image>
|
||||
</to>
|
||||
<container>
|
||||
<appRoot>/opt/pdv/webapps/fop4apex</appRoot>
|
||||
</container>
|
||||
</configuration>
|
||||
</plugin>
|
||||
-->
|
||||
<plugin>
|
||||
<groupId>com.google.cloud.tools</groupId>
|
||||
<artifactId>jib-maven-plugin</artifactId>
|
||||
<version>3.2.1</version>
|
||||
<configuration>
|
||||
<from>
|
||||
<image>compile.pdv.lan:8001/product/base/vis-tomcat:9.0</image>
|
||||
</from>
|
||||
<to>
|
||||
<image>fop4apex</image>
|
||||
</to>
|
||||
<container>
|
||||
<appRoot>/opt/pdv/webapps/fop4apex</appRoot>
|
||||
</container>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
<distributionManagement>
|
||||
|
||||
@ -3,10 +3,9 @@ package de.pdv.apex;
|
||||
import org.apache.fop.apps.FOUserAgent;
|
||||
import org.apache.fop.apps.Fop;
|
||||
import org.apache.fop.apps.FopFactory;
|
||||
import org.apache.fop.apps.MimeConstants;
|
||||
import static org.apache.xmlgraphics.util.MimeConstants.MIME_PDF;
|
||||
|
||||
import javax.servlet.ServletContext;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.annotation.WebServlet;
|
||||
import javax.servlet.http.HttpServlet;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
@ -17,7 +16,9 @@ import javax.xml.transform.Transformer;
|
||||
import javax.xml.transform.TransformerFactory;
|
||||
import javax.xml.transform.sax.SAXResult;
|
||||
import javax.xml.transform.stream.StreamSource;
|
||||
import java.io.*;
|
||||
import java.io.File;
|
||||
import java.io.InputStream;
|
||||
import java.io.StringReader;
|
||||
import java.util.logging.Level;
|
||||
import java.util.logging.Logger;
|
||||
|
||||
@ -31,9 +32,6 @@ public class PdfServlet extends HttpServlet {
|
||||
|
||||
private final TransformerFactory tFactory = TransformerFactory.newInstance();
|
||||
|
||||
public void init() {
|
||||
}
|
||||
|
||||
// <editor-fold default state="collapsed" desc="HttpServlet methods. Click on the + sign on the left to edit the code.">
|
||||
|
||||
/**
|
||||
@ -43,8 +41,7 @@ public class PdfServlet extends HttpServlet {
|
||||
* @param response servlet response
|
||||
*/
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException {
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) {
|
||||
logger.log(Level.FINEST,"Finest output");
|
||||
logger.log(Level.FINER,"Finer output");
|
||||
logger.log(Level.FINE,"Fine output");
|
||||
@ -52,9 +49,8 @@ public class PdfServlet extends HttpServlet {
|
||||
logger.log(Level.INFO,"doGet");
|
||||
try {
|
||||
response.setContentType("application/pdf");
|
||||
// response.setDateHeader("Expires", System.currentTimeMillis() + cacheExpiringDuration * 1000);
|
||||
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
|
||||
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, response.getOutputStream());
|
||||
Fop fop = fopFactory.newFop(MIME_PDF, response.getOutputStream());
|
||||
Transformer transformer = tFactory.newTransformer();
|
||||
InputStream inputStream = this.getClass().getClassLoader().getResourceAsStream("samples/helloWorld.fo");
|
||||
Source src = new StreamSource(inputStream);
|
||||
@ -62,21 +58,18 @@ public class PdfServlet extends HttpServlet {
|
||||
transformer.transform(src, res);
|
||||
logger.log(Level.INFO,"Process complete");
|
||||
} catch (Exception ex) {
|
||||
throw new ServletException(ex);
|
||||
logger.log(Level.SEVERE,String.format("Error while processing fop transformation %s", ex.getMessage()));
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Handles the HTTP <code>POST</code> method.
|
||||
*
|
||||
* @param request servlet request
|
||||
* @param response servlet response
|
||||
* @throws ServletException if a servlet-specific error occurs
|
||||
*/
|
||||
@Override
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response)
|
||||
throws ServletException {
|
||||
protected void doPost(HttpServletRequest request, HttpServletResponse response) {
|
||||
ServletContext context = getServletContext();
|
||||
logger.log(Level.FINEST,"Finest output");
|
||||
logger.log(Level.FINER,"Finer output");
|
||||
@ -87,29 +80,30 @@ public class PdfServlet extends HttpServlet {
|
||||
String contentType = request.getContentType();
|
||||
String templateFile = "template.fo";
|
||||
String templateData = "xml data";
|
||||
// String pdfFileName = "";
|
||||
|
||||
if (request.getParameter("template") != null)
|
||||
templateFile = request.getParameter("template");
|
||||
if (request.getParameter("xml") != null)
|
||||
templateData = request.getParameter("xml");
|
||||
logger.log(Level.FINEST,"Working directory: " + (new File("dummy1.txt")).getAbsolutePath());
|
||||
logger.log(Level.FINEST,"Template file: " + templateFile);
|
||||
logger.log(Level.FINEST,"Template data: " + templateData);
|
||||
logger.log(Level.FINEST,"Content type: " + contentType);
|
||||
|
||||
if (logger.isLoggable(Level.FINEST)) {
|
||||
logger.log(Level.FINEST, String.format("Working directory: %s", new File("dummy1.txt").getAbsolutePath()));
|
||||
logger.log(Level.FINEST, String.format("Template file: %s", templateFile));
|
||||
logger.log(Level.FINEST, String.format("Template data: %s", templateData));
|
||||
logger.log(Level.FINEST, String.format("Content type: %s", contentType));
|
||||
}
|
||||
|
||||
String pdfFileName = "Kostenblatt.pdf";
|
||||
response.setContentType("application/pdf");
|
||||
response.setHeader("Content-disposition", "attachment; filename=" + pdfFileName);
|
||||
// response.setDateHeader("Expires", System.currentTimeMillis() + cacheExpiringDuration * 1000);
|
||||
|
||||
FopFactory fopFactory = FopFactory.newInstance(new File(".").toURI());
|
||||
|
||||
FOUserAgent foUserAgent = fopFactory.newFOUserAgent();
|
||||
// Construct fop with desired output format
|
||||
Fop fop = fopFactory.newFop(MimeConstants.MIME_PDF, foUserAgent, response.getOutputStream());
|
||||
Fop fop = fopFactory.newFop(MIME_PDF, foUserAgent, response.getOutputStream());
|
||||
|
||||
// Setup XSLT
|
||||
TransformerFactory factory = TransformerFactory.newInstance();
|
||||
Transformer transformer = factory.newTransformer( new StreamSource(new StringReader(templateFile)));
|
||||
Transformer transformer = tFactory.newTransformer( new StreamSource(new StringReader(templateFile)));
|
||||
// Set the value of a <param> in the stylesheet
|
||||
transformer.setParameter("versionParam", "2.0");
|
||||
|
||||
@ -123,11 +117,10 @@ public class PdfServlet extends HttpServlet {
|
||||
transformer.transform(src, res);
|
||||
logger.log(Level.INFO,"Process complete");
|
||||
|
||||
} catch (Exception e) {
|
||||
context.log(e.getMessage(), e);
|
||||
throw new ServletException(e.getMessage());
|
||||
} catch (Exception ex) {
|
||||
context.log(ex.getMessage(), ex);
|
||||
logger.log(Level.SEVERE,String.format("Error while processing fop transformation %s", ex.getMessage()));
|
||||
}
|
||||
// processRequest(request, response);
|
||||
}
|
||||
|
||||
/**
|
||||
@ -140,8 +133,4 @@ public class PdfServlet extends HttpServlet {
|
||||
return "APEX FOP Server";
|
||||
}// </editor-fold>
|
||||
|
||||
@Override
|
||||
public void destroy() {
|
||||
}
|
||||
|
||||
}
|
||||
@ -9,23 +9,19 @@
|
||||
</head>
|
||||
<body>
|
||||
<main class="container">
|
||||
<hgroup>
|
||||
<header>
|
||||
<h1>Apache FOP integration for Oracle APEX</h1>
|
||||
<h2>FOP = Formatting Objects Processor</h2>
|
||||
</hgroup>
|
||||
<p>FOP = Formatting Objects Processor</p>
|
||||
</header>
|
||||
<ul>
|
||||
<li>Demo: <a href="pdf" data-tooltip="Run pdf servlet with demo data">pdf servlet / fo2pdf</a></li>
|
||||
<li>Monitoring: <a href="monitoring" data-tooltip="Go to JavaMelody Monitoring page">JavaMelody</a></li>
|
||||
</ul>
|
||||
|
||||
<!-- <a href="pdf">pdf Servlet / Hello World / fo2pdf</a><br/> -->
|
||||
<%--suppress HtmlUnknownTarget --%>
|
||||
<!-- <a href="monitoring">JavaMelody Monitoring</a> -->
|
||||
<hgroup>
|
||||
<header>
|
||||
<h2>Sample APEX Settings</h2>
|
||||
<h3>Internal Workspace / Instance Settings / Report Printing</h3>
|
||||
</hgroup>
|
||||
</header>
|
||||
<table role="grid">
|
||||
<caption>Internal Workspace / Instance Settings / Report Printing</caption>
|
||||
<thead>
|
||||
<tr>
|
||||
<th scope="col">Parameter</th>
|
||||
@ -58,10 +54,10 @@
|
||||
</tr>
|
||||
</table>
|
||||
|
||||
<hgroup>
|
||||
<header>
|
||||
<h2>Debugging</h2>
|
||||
<h3>Add to tomcat conf/logging.properties</h3>
|
||||
</hgroup>
|
||||
<p>Add to tomcat conf/logging.properties</p>
|
||||
</header>
|
||||
<pre>org.apache.tomcat.util.http.Parameters.level = ALL
|
||||
de.pdv.apex.level = ALL</pre>
|
||||
|
||||
|
||||
@ -4,8 +4,10 @@ import org.apache.fop.apps.*;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.apache.pdfbox.text.PDFTextStripper;
|
||||
import org.apache.pdfbox.text.PDFTextStripperByArea;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import javax.xml.XMLConstants;
|
||||
import javax.xml.transform.Result;
|
||||
import javax.xml.transform.Source;
|
||||
import javax.xml.transform.Transformer;
|
||||
@ -46,6 +48,7 @@ class ExampleFO2PDFTest {
|
||||
|
||||
// Setup JAXP using identity transformer
|
||||
TransformerFactory factory = TransformerFactory.newInstance();
|
||||
factory.setFeature(XMLConstants.FEATURE_SECURE_PROCESSING, true);
|
||||
Transformer transformer = factory.newTransformer(); // identity transformer
|
||||
|
||||
// Setup input stream
|
||||
@ -106,17 +109,18 @@ class ExampleFO2PDFTest {
|
||||
throw new Exception("result file missing");
|
||||
|
||||
try (PDDocument document = PDDocument.load(pdfFile)) {
|
||||
document.getClass();
|
||||
//document.getClass();
|
||||
if (!document.isEncrypted()) {
|
||||
PDFTextStripperByArea stripper = new PDFTextStripperByArea();
|
||||
stripper.setSortByPosition(true);
|
||||
PDFTextStripper tStripper = new PDFTextStripper();
|
||||
String pdfFileInText = tStripper.getText(document);
|
||||
String lines[] = pdfFileInText.split("\\r?\\n");
|
||||
String[] lines = pdfFileInText.split("\\r?\\n");
|
||||
for (String line : lines) {
|
||||
System.out.println(line);
|
||||
}
|
||||
System.out.println("Pages: " + document.getNumberOfPages());
|
||||
Assertions.assertEquals(Integer.valueOf(1).intValue(), document.getNumberOfPages());
|
||||
}
|
||||
}
|
||||
System.out.println("Filesize (Bytes): " + Files.size(pdfFile.toPath()));
|
||||
|
||||
@ -5,6 +5,7 @@ import org.apache.fop.apps.Fop;
|
||||
import org.apache.fop.apps.FopFactory;
|
||||
import org.apache.fop.apps.MimeConstants;
|
||||
import org.apache.pdfbox.pdmodel.PDDocument;
|
||||
import org.junit.jupiter.api.Assertions;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import javax.xml.transform.Result;
|
||||
@ -82,6 +83,7 @@ class ExampleXML2PDFTest {
|
||||
PDDocument document = PDDocument.load(pdfFile);
|
||||
System.out.println("Pages: " + document.getNumberOfPages());
|
||||
System.out.println("Filesize (Bytes): " + Files.size(pdfFile.toPath()));
|
||||
Assertions.assertEquals(Integer.valueOf(1).intValue(), document.getNumberOfPages());
|
||||
System.out.println("Success!");
|
||||
}
|
||||
}
|
||||
70
src/test/java/de/pdv/apex/PdfServletTest.java
Normal file
70
src/test/java/de/pdv/apex/PdfServletTest.java
Normal file
@ -0,0 +1,70 @@
|
||||
package de.pdv.apex;
|
||||
|
||||
import org.apache.commons.io.IOUtils;
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.Mockito;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.mockito.Spy;
|
||||
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
import java.io.InputStream;
|
||||
import java.io.PrintWriter;
|
||||
import java.io.StringWriter;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
|
||||
public class PdfServletTest extends Mockito {
|
||||
@Spy private PdfServlet servlet;
|
||||
@Mock private ServletConfig servletConfig;
|
||||
@Mock private HttpServletRequest request;
|
||||
@Mock private HttpServletResponse response;
|
||||
@Mock private ServletOutputStream outputStream;
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.openMocks(this);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void assertThatNoMethodHasBeenCalled() {
|
||||
when(servlet.getServletConfig()).thenReturn(servletConfig);
|
||||
Mockito.verifyNoInteractions(servlet);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServletGet() throws Exception {
|
||||
when(servlet.getServletConfig()).thenReturn(servletConfig);
|
||||
when(response.getOutputStream()).thenReturn(outputStream);
|
||||
when(response.getWriter()).thenReturn(new PrintWriter(new StringWriter()));
|
||||
servlet.doGet(request, response);
|
||||
System.out.println("Check for header %PDF-1.4%...");
|
||||
byte[] b = {0x25,0x50,0x44,0x46,0x2D,0x31,0x2E,0x34,0x0A}; //
|
||||
verify(outputStream, atLeastOnce()).write(b);
|
||||
System.out.println("Success!");
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testServletPost() throws Exception {
|
||||
PdfServletTest app = new PdfServletTest();
|
||||
InputStream xsltFile = app.getClass().getClassLoader().getResourceAsStream("samples/kostenblatt_2014.xsl");
|
||||
assert xsltFile != null;
|
||||
String xsltFileContent = IOUtils.toString(xsltFile, StandardCharsets.UTF_8.name());
|
||||
InputStream xmlFile = app.getClass().getClassLoader().getResourceAsStream("samples/kostenblatt_2014.xml");
|
||||
assert xmlFile != null;
|
||||
String xmlFileContent = IOUtils.toString(xmlFile, StandardCharsets.UTF_8.name());
|
||||
when(servlet.getServletConfig()).thenReturn(servletConfig);
|
||||
when(response.getOutputStream()).thenReturn(outputStream);
|
||||
when(request.getParameter("template")).thenReturn(xsltFileContent);
|
||||
when(request.getParameter("xml")).thenReturn(xmlFileContent);
|
||||
when(response.getWriter()).thenReturn(new PrintWriter(new StringWriter()));
|
||||
servlet.doPost(request, response);
|
||||
System.out.println("Check for header %PDF-1.4%...");
|
||||
byte[] b = {0x25,0x50,0x44,0x46,0x2D,0x31,0x2E,0x34,0x0A}; //
|
||||
verify(outputStream, atLeastOnce()).write(b);
|
||||
System.out.println("Success!");
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
x
Reference in New Issue
Block a user