mirror of
https://github.com/Alfresco/alfresco-transform-core.git
synced 2025-05-26 17:24:47 +00:00
Merge branch 'feature/ATS-68' into 'master'
ATS-68 : ATS-16: Fix error status code mapping for expected invalid requests See merge request Repository/alfresco-docker-transformers!12
This commit is contained in:
commit
624fed06d5
@ -35,6 +35,7 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
@ -102,5 +103,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro
|
||||
{
|
||||
transformRequest.setSourceExtension("pdf");
|
||||
transformRequest.setTargetExtension("png");
|
||||
transformRequest.setSourceMediaType(MediaType.APPLICATION_PDF_VALUE);
|
||||
transformRequest.setTargetMediaType(MediaType.IMAGE_PNG_VALUE);
|
||||
}
|
||||
}
|
||||
|
@ -37,6 +37,7 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
|
||||
@ -176,5 +177,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest
|
||||
{
|
||||
transformRequest.setSourceExtension("png");
|
||||
transformRequest.setTargetExtension("png");
|
||||
transformRequest.setSourceMediaType(MediaType.IMAGE_PNG_VALUE);
|
||||
transformRequest.setTargetMediaType(MediaType.IMAGE_PNG_VALUE);
|
||||
}
|
||||
}
|
||||
|
@ -48,6 +48,7 @@ import org.junit.runner.RunWith;
|
||||
import org.mockito.stubbing.Answer;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||
@ -133,5 +134,7 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
|
||||
{
|
||||
transformRequest.setSourceExtension("doc");
|
||||
transformRequest.setTargetExtension("pdf");
|
||||
transformRequest.setSourceMediaType("application/msword");
|
||||
transformRequest.setTargetMediaType(MediaType.IMAGE_PNG_VALUE);
|
||||
}
|
||||
}
|
||||
|
@ -67,6 +67,7 @@ import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||
import org.springframework.http.MediaType;
|
||||
import org.springframework.mock.web.MockMultipartFile;
|
||||
import org.springframework.test.context.junit4.SpringRunner;
|
||||
import org.springframework.test.web.servlet.MvcResult;
|
||||
@ -398,8 +399,10 @@ public class TikaControllerTest extends AbstractTransformerControllerTest
|
||||
{
|
||||
transformRequest.setSourceExtension(sourceExtension);
|
||||
transformRequest.setTargetExtension(targetExtension);
|
||||
transformRequest.getTransformationRequestOptions().put("transform", "PdfBox");
|
||||
transformRequest.getTransformationRequestOptions().put("targetMimetype", "text/plain");
|
||||
transformRequest.getTransformationRequestOptions().put("targetEncoding", "UTF-8");
|
||||
transformRequest.setSourceMediaType(MediaType.APPLICATION_PDF_VALUE);
|
||||
transformRequest.setTargetMediaType(MediaType.TEXT_PLAIN_VALUE);
|
||||
transformRequest.getTransformRequestOptions().put("transform", "PdfBox");
|
||||
transformRequest.getTransformRequestOptions().put("targetMimetype", MediaType.TEXT_PLAIN_VALUE);
|
||||
transformRequest.getTransformRequestOptions().put("targetEncoding", "UTF-8");
|
||||
}
|
||||
}
|
||||
|
@ -39,12 +39,14 @@ import java.util.Collection;
|
||||
import java.util.HashMap;
|
||||
import java.util.Map;
|
||||
import java.util.StringJoiner;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
import org.alfresco.transform.client.model.TransformReply;
|
||||
import org.alfresco.transform.client.model.TransformRequest;
|
||||
import org.alfresco.transform.client.model.TransformRequestValidator;
|
||||
import org.alfresco.transformer.model.FileRefResponse;
|
||||
import org.alfresco.util.TempFileProvider;
|
||||
import org.alfresco.util.exec.RuntimeExec;
|
||||
@ -59,6 +61,8 @@ import org.springframework.http.MediaType;
|
||||
import org.springframework.http.ResponseEntity;
|
||||
import org.springframework.ui.Model;
|
||||
import org.springframework.util.StringUtils;
|
||||
import org.springframework.validation.DirectFieldBindingResult;
|
||||
import org.springframework.validation.Errors;
|
||||
import org.springframework.web.bind.MissingServletRequestParameterException;
|
||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||
import org.springframework.web.bind.annotation.GetMapping;
|
||||
@ -108,6 +112,9 @@ public abstract class AbstractTransformerController
|
||||
@Autowired
|
||||
private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
|
||||
|
||||
@Autowired
|
||||
private TransformRequestValidator transformRequestValidator;
|
||||
|
||||
protected static Log logger;
|
||||
|
||||
protected RuntimeExec transformCommand;
|
||||
@ -158,6 +165,17 @@ public abstract class AbstractTransformerController
|
||||
transformReply.setSchema(transformRequest.getSchema());
|
||||
transformReply.setClientData(transformRequest.getClientData());
|
||||
|
||||
Errors errors = validateTransformRequest(transformRequest);
|
||||
if (!errors.getAllErrors().isEmpty())
|
||||
{
|
||||
transformReply.setStatus(HttpStatus.BAD_REQUEST.value());
|
||||
transformReply.setErrorDetails(errors.getAllErrors().stream().map(Object::toString)
|
||||
.collect(Collectors.joining(", ")));
|
||||
|
||||
return new ResponseEntity<>(transformReply,
|
||||
HttpStatus.valueOf(transformReply.getStatus()));
|
||||
}
|
||||
|
||||
// Load the source file
|
||||
File sourceFile;
|
||||
try
|
||||
@ -197,7 +215,7 @@ public abstract class AbstractTransformerController
|
||||
try
|
||||
{
|
||||
processTransform(sourceFile, targetFile,
|
||||
transformRequest.getTransformationRequestOptions(), timeout);
|
||||
transformRequest.getTransformRequestOptions(), timeout);
|
||||
}
|
||||
catch (TransformException te)
|
||||
{
|
||||
@ -253,6 +271,13 @@ public abstract class AbstractTransformerController
|
||||
return new ResponseEntity<>(transformReply, HttpStatus.valueOf(transformReply.getStatus()));
|
||||
}
|
||||
|
||||
private Errors validateTransformRequest(TransformRequest transformRequest)
|
||||
{
|
||||
DirectFieldBindingResult errors = new DirectFieldBindingResult(transformRequest, "request");
|
||||
transformRequestValidator.validate(transformRequest, errors);
|
||||
return errors;
|
||||
}
|
||||
|
||||
protected abstract void processTransform(File sourceFile, File targetFile,
|
||||
Map<String, String> transformOptions, Long timeout);
|
||||
|
||||
|
@ -30,13 +30,14 @@ import org.springframework.context.annotation.Configuration;
|
||||
import org.springframework.web.client.RestTemplate;
|
||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||
import org.alfresco.transform.client.model.TransformRequestValidator;
|
||||
|
||||
@Configuration
|
||||
public class WebApplicationConfig extends WebMvcConfigurerAdapter {
|
||||
|
||||
@Override
|
||||
public void addInterceptors(InterceptorRegistry registry) {
|
||||
registry.addInterceptor(transformInterceptor()).addPathPatterns("/transform", "/live", "/ready");;
|
||||
registry.addInterceptor(transformInterceptor()).addPathPatterns("/transform", "/live", "/ready");
|
||||
}
|
||||
|
||||
@Bean
|
||||
@ -55,4 +56,10 @@ public class WebApplicationConfig extends WebMvcConfigurerAdapter {
|
||||
public AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient(){
|
||||
return new AlfrescoSharedFileStoreClient();
|
||||
}
|
||||
|
||||
@Bean
|
||||
public TransformRequestValidator transformRequestValidator()
|
||||
{
|
||||
return new TransformRequestValidator();
|
||||
}
|
||||
}
|
||||
|
@ -407,16 +407,11 @@ public abstract class AbstractTransformerControllerTest
|
||||
transformRequest.setRequestId("1");
|
||||
transformRequest.setSchema(1);
|
||||
transformRequest.setClientData("Alfresco Digital Business Platform");
|
||||
transformRequest.setTransformationRequestOptions(new HashMap<>());
|
||||
|
||||
transformRequest.setTransformRequestOptions(new HashMap<>());
|
||||
transformRequest.setSourceReference(sourceFileRef);
|
||||
transformRequest.setSourceExtension(sourceExtension);
|
||||
// TODO: ATS-53
|
||||
transformRequest.setSourceMediaType("TODO");
|
||||
transformRequest.setSourceSize(sourceFile.length());
|
||||
|
||||
transformRequest.setTargetExtension(targetExtension);
|
||||
transformRequest.setTargetMediaType("TODO");
|
||||
|
||||
// HTTP Request
|
||||
HttpHeaders headers = new HttpHeaders();
|
||||
@ -447,5 +442,25 @@ public abstract class AbstractTransformerControllerTest
|
||||
assertEquals(transformRequest.getSchema(), transformReply.getSchema());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testEmptyPojoTransform() throws Exception
|
||||
{
|
||||
// Transformation Request POJO
|
||||
TransformRequest transformRequest = new TransformRequest();
|
||||
|
||||
// Serialize and call the transformer
|
||||
String tr = objectMapper.writeValueAsString(transformRequest);
|
||||
String transformationReplyAsString = mockMvc.perform(MockMvcRequestBuilders.post("/transform")
|
||||
.header(HttpHeaders.ACCEPT, MediaType.APPLICATION_JSON_VALUE)
|
||||
.header(HttpHeaders.CONTENT_TYPE, MediaType.APPLICATION_JSON_VALUE).content(tr))
|
||||
.andExpect(status().is(HttpStatus.BAD_REQUEST.value()))
|
||||
.andReturn().getResponse().getContentAsString();
|
||||
|
||||
TransformReply transformReply = objectMapper.readValue(transformationReplyAsString, TransformReply.class);
|
||||
|
||||
// Assert the reply
|
||||
assertEquals(HttpStatus.BAD_REQUEST.value(), transformReply.getStatus());
|
||||
}
|
||||
|
||||
protected abstract void updateTransformRequestWithSpecificOptions(TransformRequest transformRequest);
|
||||
}
|
||||
|
2
pom.xml
2
pom.xml
@ -24,7 +24,7 @@
|
||||
<dependency.alfresco-jodconverter-core.version>3.0.1.1</dependency.alfresco-jodconverter-core.version>
|
||||
<dependency.ch-qos-logback.version>1.2.3</dependency.ch-qos-logback.version>
|
||||
<env.project_version>${project.version}</env.project_version>
|
||||
<alfresco-transform-data-model.version>0.0.4</alfresco-transform-data-model.version>
|
||||
<alfresco-transform-data-model.version>0.0.7</alfresco-transform-data-model.version>
|
||||
</properties>
|
||||
|
||||
<modules>
|
||||
|
Loading…
x
Reference in New Issue
Block a user