diff --git a/alfresco-mvc-bom/pom.xml b/alfresco-mvc-bom/pom.xml
index d8620be..967c5a1 100644
--- a/alfresco-mvc-bom/pom.xml
+++ b/alfresco-mvc-bom/pom.xml
@@ -44,11 +44,6 @@
UTF-8
-
- alfresco-mvc-rest
- alfresco-mvc-aop
-
-
diff --git a/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/rest/config/DefaultAlfrescoMvcServletContextConfiguration.java b/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/rest/config/DefaultAlfrescoMvcServletContextConfiguration.java
index a358270..97b0603 100644
--- a/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/rest/config/DefaultAlfrescoMvcServletContextConfiguration.java
+++ b/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/rest/config/DefaultAlfrescoMvcServletContextConfiguration.java
@@ -38,6 +38,7 @@
import org.springframework.http.converter.json.MappingJackson2HttpMessageConverter;
import org.springframework.lang.Nullable;
import org.springframework.web.method.support.HandlerMethodArgumentResolver;
+import org.springframework.web.multipart.MultipartResolver;
import org.springframework.web.multipart.commons.CommonsMultipartResolver;
import org.springframework.web.servlet.config.annotation.WebMvcConfigurer;
@@ -51,6 +52,8 @@
import com.gradecak.alfresco.mvc.rest.jackson.Jackson2QnameDeserializer;
import com.gradecak.alfresco.mvc.rest.jackson.Jackson2QnameSerializer;
+import javax.servlet.http.HttpServletRequest;
+
@Configuration
public class DefaultAlfrescoMvcServletContextConfiguration implements WebMvcConfigurer {
@@ -75,15 +78,20 @@ public AlfrescoApiResponseInterceptor alfrescoResponseInterceptor(ResourceWebScr
}
@Bean
- public CommonsMultipartResolver multipartResolver() {
- final CommonsMultipartResolver resolver = new CommonsMultipartResolver();
+ public MultipartResolver multipartResolver() {
+ MultipartResolver resolver = createMultipartResolver();
+ configureMultipartResolver(resolver);
+ return resolver;
+ }
+
+ protected MultipartResolver createMultipartResolver() {
+ CommonsMultipartResolver resolver = new CommonsMultipartResolver();
resolver.setMaxUploadSize(-1);
resolver.setDefaultEncoding("utf-8");
- configureMultipartResolver(resolver);
return resolver;
}
- void configureMultipartResolver(final CommonsMultipartResolver resolver) {
+ protected void configureMultipartResolver(final MultipartResolver resolver) {
}
@Bean
diff --git a/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/webscript/DispatcherWebscript.java b/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/webscript/DispatcherWebscript.java
index 9fd80b2..16f56e0 100644
--- a/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/webscript/DispatcherWebscript.java
+++ b/alfresco-mvc-rest/src/main/java/com/gradecak/alfresco/mvc/webscript/DispatcherWebscript.java
@@ -17,6 +17,9 @@
package com.gradecak.alfresco.mvc.webscript;
import java.io.IOException;
+import java.io.UnsupportedEncodingException;
+import java.net.URLDecoder;
+import java.nio.charset.StandardCharsets;
import java.util.Arrays;
import java.util.Collections;
import java.util.EnumSet;
@@ -52,6 +55,7 @@
import org.springframework.extensions.webscripts.AbstractWebScript;
import org.springframework.extensions.webscripts.WebScriptRequest;
import org.springframework.extensions.webscripts.WebScriptResponse;
+import org.springframework.extensions.webscripts.WrappingWebScriptRequest;
import org.springframework.extensions.webscripts.WrappingWebScriptResponse;
import org.springframework.extensions.webscripts.servlet.WebScriptServletRequest;
import org.springframework.extensions.webscripts.servlet.WebScriptServletResponse;
@@ -94,10 +98,14 @@ public DispatcherWebscript(final String servletName, boolean inheritGlobalProper
}
public void execute(WebScriptRequest req, WebScriptResponse res) throws IOException {
+ WebScriptServletRequest origReq;
+ if(req instanceof WrappingWebScriptRequest) {
+ origReq = (WebScriptServletRequest)((WrappingWebScriptRequest) req).getNext();
+ } else {
+ origReq = (WebScriptServletRequest) req;
+ }
- final WebScriptServletRequest origReq = (WebScriptServletRequest) req;
-
- WebScriptServletResponse wsr = null;
+ WebScriptServletResponse wsr;
if (res instanceof WrappingWebScriptResponse) {
wsr = (WebScriptServletResponse) ((WrappingWebScriptResponse) res).getNext();
} else {
@@ -113,6 +121,7 @@ public void execute(WebScriptRequest req, WebScriptResponse res) throws IOExcept
s.service(wrapper, sr);
} catch (Throwable e) {
+ LOGGER.error("Failed to call {}", origReq.getURL());
throw new IOException(e);
}
}
@@ -253,6 +262,15 @@ public WebscriptRequestWrapper(WebScriptServletRequest request) {
@Override
public String getRequestURI() {
String uri = super.getRequestURI();
+ try {
+ uri = URLDecoder.decode(uri, StandardCharsets.UTF_8.toString());
+ } catch (UnsupportedEncodingException e) {
+ LOGGER.error(e.getMessage(), e);
+ return "";
+ }
+
+ LOGGER.debug("Processing [{}] {}", super.getMethod(), uri);
+
if (uri.contains("$")) {
uri = uri.replaceAll("\\$", "%24");
}
@@ -263,12 +281,17 @@ public String getRequestURI() {
}
Pattern pattern = Pattern
- .compile("(^" + origReq.getServiceContextPath() + "/)(.*)(/" + Pattern.quote(origUri) + ")");
+ .compile(
+ "(^" + origReq.getServiceContextPath() + "/)" +
+ "(.*)" +
+ "(/" + Pattern.quote(origUri) + ")"
+ );
Matcher matcher = pattern.matcher(uri);
-
if (matcher.find()) {
try {
- return matcher.group(EXTENSION_PATH_REGEXP_GROUP_INDEX);
+ String result = matcher.group(EXTENSION_PATH_REGEXP_GROUP_INDEX);
+ LOGGER.debug("Found [{}] {} ---> {}", super.getMethod(), uri, result);
+ return result;
} catch (Exception e) {
// let an empty string be returned
LOGGER.warn("no such group (3) in regexp while URI evaluation", e);