Merge pull request #74 from roxspring/support-post-requests

Add POST support plus PSystemError diagrams results generate 400 Bad Request status codes
This commit is contained in:
arnaudroques 2018-04-19 18:47:03 +02:00 committed by GitHub
commit cb2cb80931
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 85 additions and 7 deletions

View File

@ -99,6 +99,9 @@ class DiagramResponse {
addHeaderForCache(blockUml);
}
final Diagram diagram = blockUml.getDiagram();
if (diagram instanceof PSystemError) {
response.setStatus(HttpServletResponse.SC_BAD_REQUEST);
}
final ImageData result = diagram.exportDiagram(response.getOutputStream(), idx, new FileFormatOption(format));
}

View File

@ -23,17 +23,18 @@
*/
package net.sourceforge.plantuml.servlet;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;
import javax.imageio.IIOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import net.sourceforge.plantuml.FileFormat;
import net.sourceforge.plantuml.servlet.utility.UmlExtractor;
import java.io.BufferedReader;
import java.io.IOException;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
/**
* Common service servlet to produce diagram from compressed UML source contained in the end part of the requested URI.
@ -46,6 +47,7 @@ public abstract class UmlDiagramService extends HttpServlet {
// build the UML source from the compressed request parameter
final String[] sourceAndIdx = getSourceAndIdx(request);
final int idx = Integer.parseInt(sourceAndIdx[1]);
final String uml;
try {
uml = UmlExtractor.getUmlSource(sourceAndIdx[0]);
@ -55,9 +57,38 @@ public abstract class UmlDiagramService extends HttpServlet {
return;
}
doDiagramResponse(request, response, uml, idx);
}
@Override
public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException {
// build the UML source from the compressed request parameter
final String[] sourceAndIdx = getSourceAndIdx(request);
final int idx = Integer.parseInt(sourceAndIdx[1]);
final StringBuilder uml = new StringBuilder();
final BufferedReader in = request.getReader();
while (true) {
final String line = in.readLine();
if (line == null) {
break;
}
uml.append(line).append('\n');
}
doDiagramResponse(request, response, uml.toString(), idx);
}
private void doDiagramResponse(
HttpServletRequest request,
HttpServletResponse response,
String uml,
int idx)
throws IOException {
// generate the response
DiagramResponse dr = new DiagramResponse(response, getOutputFormat(), request);
final int idx = Integer.parseInt(sourceAndIdx[1]);
try {
dr.sendDiagram(uml, idx);
} catch (IIOException iioe) {

View File

@ -1,10 +1,13 @@
package net.sourceforge.plantuml.servlet;
import com.meterware.httpunit.GetMethodWebRequest;
import com.meterware.httpunit.PostMethodWebRequest;
import com.meterware.httpunit.WebConversation;
import com.meterware.httpunit.WebRequest;
import com.meterware.httpunit.WebResponse;
import java.io.ByteArrayInputStream;
import java.nio.charset.Charset;
import java.util.Scanner;
public class TestSVG extends WebappTestCase {
@ -25,6 +28,47 @@ public class TestSVG extends WebappTestCase {
assertTrue(diagramLen < 3000);
}
/**
* Verifies the generation of the SVG for the Bob -> Alice sample
*/
public void testPostedSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
PostMethodWebRequest request = new PostMethodWebRequest(
getServerUrl() + "svg/",
new ByteArrayInputStream("@startuml\nBob -> Alice\n@enduml".getBytes(Charset.defaultCharset())),
"text/plain");
WebResponse response = conversation.getResource(request);
assertEquals(200, response.getResponseCode());
// Analyze response
// Verifies the Content-Type header
assertEquals("Response content type is not SVG", "image/svg+xml", response.getContentType());
// Get the content and verify its size
String diagram = response.getText();
int diagramLen = diagram.length();
assertTrue(diagramLen > 1000);
assertTrue(diagramLen < 3000);
}
/**
* Verifies the generation of the SVG for the Bob -> Alice sample
*/
public void testPostedInvalidSequenceDiagram() throws Exception {
WebConversation conversation = new WebConversation();
PostMethodWebRequest request = new PostMethodWebRequest(
getServerUrl() + "svg/",
new ByteArrayInputStream("@startuml\n[Bob\n@enduml".getBytes(Charset.defaultCharset())),
"text/plain");
WebResponse response = conversation.getResource(request);
assertEquals(400, response.getResponseCode());
}
/**
* Check the content of the SVG
*/