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.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||||
|
|
||||||
@ -102,5 +103,7 @@ public class AlfrescoPdfRendererControllerTest extends AbstractTransformerContro
|
|||||||
{
|
{
|
||||||
transformRequest.setSourceExtension("pdf");
|
transformRequest.setSourceExtension("pdf");
|
||||||
transformRequest.setTargetExtension("png");
|
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.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||||
|
|
||||||
@ -176,5 +177,7 @@ public class ImageMagickControllerTest extends AbstractTransformerControllerTest
|
|||||||
{
|
{
|
||||||
transformRequest.setSourceExtension("png");
|
transformRequest.setSourceExtension("png");
|
||||||
transformRequest.setTargetExtension("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.mockito.stubbing.Answer;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.mock.web.MockMultipartFile;
|
import org.springframework.mock.web.MockMultipartFile;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
import org.springframework.test.web.servlet.request.MockMvcRequestBuilders;
|
||||||
@ -133,5 +134,7 @@ public class LibreOfficeControllerTest extends AbstractTransformerControllerTest
|
|||||||
{
|
{
|
||||||
transformRequest.setSourceExtension("doc");
|
transformRequest.setSourceExtension("doc");
|
||||||
transformRequest.setTargetExtension("pdf");
|
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.junit.runner.RunWith;
|
||||||
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
import org.springframework.boot.test.autoconfigure.web.servlet.WebMvcTest;
|
||||||
import org.springframework.boot.test.mock.mockito.SpyBean;
|
import org.springframework.boot.test.mock.mockito.SpyBean;
|
||||||
|
import org.springframework.http.MediaType;
|
||||||
import org.springframework.mock.web.MockMultipartFile;
|
import org.springframework.mock.web.MockMultipartFile;
|
||||||
import org.springframework.test.context.junit4.SpringRunner;
|
import org.springframework.test.context.junit4.SpringRunner;
|
||||||
import org.springframework.test.web.servlet.MvcResult;
|
import org.springframework.test.web.servlet.MvcResult;
|
||||||
@ -398,8 +399,10 @@ public class TikaControllerTest extends AbstractTransformerControllerTest
|
|||||||
{
|
{
|
||||||
transformRequest.setSourceExtension(sourceExtension);
|
transformRequest.setSourceExtension(sourceExtension);
|
||||||
transformRequest.setTargetExtension(targetExtension);
|
transformRequest.setTargetExtension(targetExtension);
|
||||||
transformRequest.getTransformationRequestOptions().put("transform", "PdfBox");
|
transformRequest.setSourceMediaType(MediaType.APPLICATION_PDF_VALUE);
|
||||||
transformRequest.getTransformationRequestOptions().put("targetMimetype", "text/plain");
|
transformRequest.setTargetMediaType(MediaType.TEXT_PLAIN_VALUE);
|
||||||
transformRequest.getTransformationRequestOptions().put("targetEncoding", "UTF-8");
|
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.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
import java.util.StringJoiner;
|
import java.util.StringJoiner;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
|
|
||||||
import org.alfresco.transform.client.model.TransformReply;
|
import org.alfresco.transform.client.model.TransformReply;
|
||||||
import org.alfresco.transform.client.model.TransformRequest;
|
import org.alfresco.transform.client.model.TransformRequest;
|
||||||
|
import org.alfresco.transform.client.model.TransformRequestValidator;
|
||||||
import org.alfresco.transformer.model.FileRefResponse;
|
import org.alfresco.transformer.model.FileRefResponse;
|
||||||
import org.alfresco.util.TempFileProvider;
|
import org.alfresco.util.TempFileProvider;
|
||||||
import org.alfresco.util.exec.RuntimeExec;
|
import org.alfresco.util.exec.RuntimeExec;
|
||||||
@ -59,6 +61,8 @@ import org.springframework.http.MediaType;
|
|||||||
import org.springframework.http.ResponseEntity;
|
import org.springframework.http.ResponseEntity;
|
||||||
import org.springframework.ui.Model;
|
import org.springframework.ui.Model;
|
||||||
import org.springframework.util.StringUtils;
|
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.MissingServletRequestParameterException;
|
||||||
import org.springframework.web.bind.annotation.ExceptionHandler;
|
import org.springframework.web.bind.annotation.ExceptionHandler;
|
||||||
import org.springframework.web.bind.annotation.GetMapping;
|
import org.springframework.web.bind.annotation.GetMapping;
|
||||||
@ -108,6 +112,9 @@ public abstract class AbstractTransformerController
|
|||||||
@Autowired
|
@Autowired
|
||||||
private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
|
private AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient;
|
||||||
|
|
||||||
|
@Autowired
|
||||||
|
private TransformRequestValidator transformRequestValidator;
|
||||||
|
|
||||||
protected static Log logger;
|
protected static Log logger;
|
||||||
|
|
||||||
protected RuntimeExec transformCommand;
|
protected RuntimeExec transformCommand;
|
||||||
@ -158,6 +165,17 @@ public abstract class AbstractTransformerController
|
|||||||
transformReply.setSchema(transformRequest.getSchema());
|
transformReply.setSchema(transformRequest.getSchema());
|
||||||
transformReply.setClientData(transformRequest.getClientData());
|
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
|
// Load the source file
|
||||||
File sourceFile;
|
File sourceFile;
|
||||||
try
|
try
|
||||||
@ -197,7 +215,7 @@ public abstract class AbstractTransformerController
|
|||||||
try
|
try
|
||||||
{
|
{
|
||||||
processTransform(sourceFile, targetFile,
|
processTransform(sourceFile, targetFile,
|
||||||
transformRequest.getTransformationRequestOptions(), timeout);
|
transformRequest.getTransformRequestOptions(), timeout);
|
||||||
}
|
}
|
||||||
catch (TransformException te)
|
catch (TransformException te)
|
||||||
{
|
{
|
||||||
@ -253,6 +271,13 @@ public abstract class AbstractTransformerController
|
|||||||
return new ResponseEntity<>(transformReply, HttpStatus.valueOf(transformReply.getStatus()));
|
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,
|
protected abstract void processTransform(File sourceFile, File targetFile,
|
||||||
Map<String, String> transformOptions, Long timeout);
|
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.client.RestTemplate;
|
||||||
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
import org.springframework.web.servlet.config.annotation.InterceptorRegistry;
|
||||||
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
import org.springframework.web.servlet.config.annotation.WebMvcConfigurerAdapter;
|
||||||
|
import org.alfresco.transform.client.model.TransformRequestValidator;
|
||||||
|
|
||||||
@Configuration
|
@Configuration
|
||||||
public class WebApplicationConfig extends WebMvcConfigurerAdapter {
|
public class WebApplicationConfig extends WebMvcConfigurerAdapter {
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void addInterceptors(InterceptorRegistry registry) {
|
public void addInterceptors(InterceptorRegistry registry) {
|
||||||
registry.addInterceptor(transformInterceptor()).addPathPatterns("/transform", "/live", "/ready");;
|
registry.addInterceptor(transformInterceptor()).addPathPatterns("/transform", "/live", "/ready");
|
||||||
}
|
}
|
||||||
|
|
||||||
@Bean
|
@Bean
|
||||||
@ -55,4 +56,10 @@ public class WebApplicationConfig extends WebMvcConfigurerAdapter {
|
|||||||
public AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient(){
|
public AlfrescoSharedFileStoreClient alfrescoSharedFileStoreClient(){
|
||||||
return new AlfrescoSharedFileStoreClient();
|
return new AlfrescoSharedFileStoreClient();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Bean
|
||||||
|
public TransformRequestValidator transformRequestValidator()
|
||||||
|
{
|
||||||
|
return new TransformRequestValidator();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
@ -407,16 +407,11 @@ public abstract class AbstractTransformerControllerTest
|
|||||||
transformRequest.setRequestId("1");
|
transformRequest.setRequestId("1");
|
||||||
transformRequest.setSchema(1);
|
transformRequest.setSchema(1);
|
||||||
transformRequest.setClientData("Alfresco Digital Business Platform");
|
transformRequest.setClientData("Alfresco Digital Business Platform");
|
||||||
transformRequest.setTransformationRequestOptions(new HashMap<>());
|
transformRequest.setTransformRequestOptions(new HashMap<>());
|
||||||
|
|
||||||
transformRequest.setSourceReference(sourceFileRef);
|
transformRequest.setSourceReference(sourceFileRef);
|
||||||
transformRequest.setSourceExtension(sourceExtension);
|
transformRequest.setSourceExtension(sourceExtension);
|
||||||
// TODO: ATS-53
|
|
||||||
transformRequest.setSourceMediaType("TODO");
|
|
||||||
transformRequest.setSourceSize(sourceFile.length());
|
transformRequest.setSourceSize(sourceFile.length());
|
||||||
|
|
||||||
transformRequest.setTargetExtension(targetExtension);
|
transformRequest.setTargetExtension(targetExtension);
|
||||||
transformRequest.setTargetMediaType("TODO");
|
|
||||||
|
|
||||||
// HTTP Request
|
// HTTP Request
|
||||||
HttpHeaders headers = new HttpHeaders();
|
HttpHeaders headers = new HttpHeaders();
|
||||||
@ -447,5 +442,25 @@ public abstract class AbstractTransformerControllerTest
|
|||||||
assertEquals(transformRequest.getSchema(), transformReply.getSchema());
|
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);
|
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.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>
|
<dependency.ch-qos-logback.version>1.2.3</dependency.ch-qos-logback.version>
|
||||||
<env.project_version>${project.version}</env.project_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>
|
</properties>
|
||||||
|
|
||||||
<modules>
|
<modules>
|
||||||
|
Loading…
x
Reference in New Issue
Block a user