p:fileUpload doesn't work using #Autowired bean annotation - spring

I recived error when try upload file using p:fileUpload.
I tried maven clean and maven install for update dependeces.
I changed web.xml many times. I belive the problem is relationship with my anotation, i m using #Autowired (Spring) but i change it an donsen't work.
How i resolve this problem?
I m using:
Primefaces 6.0,
Java 8,
Spring Data,
Spring MVC
my web xml:
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<url-pattern>*.jsf</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ASYNC</dispatcher>
</filter-mapping>
JSF:
<p:fileUpload id="fileDescAto" auto="true" multiple="false"
invalidFileMessage="Tipo de Arquivo Inválido:"
disabled="#{not empty searchDocumentoBean.descAtoArquivoFileName}"
update="messagesDialog #this panelGroupFileDescription"
allowTypes="/(\.|\/)(pdf)$/" sizeLimit="10485760"
invalidSizeMessage="Tamanho de arquivo excedido (10MB):"
fileUploadListener="#{searchDocumentoBean.adicionaArquivoUpload}"
label="Escolher Arquivo..." mode="advanced" />
Bean:
public void adicionaArquivoUpload(FileUploadEvent ev) {
String[] name = ev.getFile().getFileName().split("\\\\");
descAtoArquivo = ev.getFile().getContents();
descAtoArquivoFileName = name[name.length-1];
}
public void removeArquivoUpload() {
descAtoArquivo = null;
descAtoArquivoFileName = null;
}// GET AND SET OMITED
Head annotation My bean:
#Component
#Scope("view")
#ManagedBean(name = "searchDocumentoBean")
#URLMappings(mappings = {
#URLMapping(id ="searchDocumento", pattern = "/searchDocumento", viewId = "/resources/pages/documento/searchDocumento.jsf")
})
ERROR CONSOLE WHEN I TRY USE FILE UPLOAD
javax.faces.event.AbortProcessingException error obtained during the processing of RENDER_RESPONSE 6: UIComponent-ClientId
08:43:55,231 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:8080-2) Error Rendering View[/resources/pages/documento/searchDocumento.xhtml]: javax.faces.event.AbortProcessingException: java.lang.NullPointerException
at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:303) [primefaces-6.0.jar:6.0]
at org.primefaces.context.PrimePartialResponseWriter.startUpdate(PrimePartialResponseWriter.java:142) [primefaces-6.0.jar:6.0]
Caused by: java.lang.NullPointerException
at org.primefaces.util.ResourceUtils.filterStylesheets(ResourceUtils.java:96) [primefaces-6.0.jar:6.0]
at org.primefaces.context.PrimePartialResponseWriter.startMetadataIfNecessary(PrimePartialResponseWriter.java:287) [primefaces-6.0.jar:6.0]
... 49 more
08:43:55,246 SEVERE [javax.enterprise.resource.webcontainer.jsf.context] (http-/0.0.0.0:8080-2) JSF1073: javax.faces.event.AbortProcessingException obtido durante o processamento de RENDER_RESPONSE 6: UIComponent-ClientId=, Message=java.lang.NullPointerException
08:43:55,240 SEVERE [javax.enterprise.resource.webcontainer.jsf.application] (http-/0.0.0.0:8080-5) Error Rendering View[/resources/pages/documento/searchDocumento.xhtml]: javax.faces.event.AbortProcessingException: java.lang.NullPointerException
UPDATE 27/09/2017
I recive error:
JBWEB000281: Servlet mapping specifies an unknown Servlet name Faces Servlet´
Where an error in my web.xml?
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<filter>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<filter-class>org.primefaces.webapp.filter.FileUploadFilter</filter-class>
<init-param>
<param-name>thresholdSize</param-name>
<param-value>51200</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>PrimeFaces FileUpload Filter</filter-name>
<servlet-name>Faces Servlet</servlet-name>
</filter-mapping>
<filter-mapping>
<filter-name>openEntityManager</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>

This solve my problem:
Listener method in p:fileUpload is never invoked in primefaces
Besides That.
i need especify location the Faces Servlet:
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
</servlet>
javax.faces.webapp.FacesServlet
I needed especify resource primefaces depends for fileupload works fine>
<context-param>
<param-name>primefaces.UPLOADER</param-name>
<param-value>commons</param-value>
</context-param>
In some versions of primefaces it is not necessary to specify this configuration. I am currently using version 6.0, which believed that this specification was not necessary in web.xml because it is a newer version, but it was necessary.

Related

Spring MVC - ContextLoaderListener loaded twice

So my head really hurts - I have read about Role/Purpose of ContextLoaderListener in Spring and I cannot go one step further.
I have a really old project and I'm upgrading it. So far I've managed to bring it from spring 2.x to spring 4.x and from Java 7 to Java 8, but I stuck on running application on tomcat 8. It loades ContextLoaderListener twice!? On tomcat 7 starts without problem.
Tomcat 7: apache-tomcat-7.0.29
Tomcat 8: apache-tomcat-8.5.11
web.xml
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE web-app PUBLIC
"-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN"
"http://java.sun.com/dtd/web-app_2_3.dtd">
<web-app version="2.4" xmlns="http://java.sun.com/xml/ns/j2ee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee
http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
<display-name>VERSION-1.7.1</display-name>
<context-param>
<param-name>listenPort_http</param-name>
<param-value>80</param-value>
</context-param>
<context-param>
<param-name>listenPort_https</param-name>
<param-value>8443</param-value>
</context-param>
<context-param>
<param-name>daoType</param-name>
<param-value>ibatis</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.localizationContext</param-name>
<param-value>ApplicationResources</param-value>
</context-param>
<context-param>
<param-name>javax.servlet.jsp.jstl.fmt.fallbackLocale</param-name>
<param-value>en</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath*:META-INF/applicationContext-*.xml
/WEB-INF/applicationContext-*.xml
</param-value>
</context-param>
<context-param>
<param-name>org.apache.myfaces.ERROR_HANDLING</param-name>
<param-value>false</param-value>
</context-param>
<context-param>
<param-name>javax.faces.CONFIG_FILES</param-name>
<param-value>
/WEB-INF/faces-specification-config.xml,
/WEB-INF/faces-operating-config.xml,
/WEB-INF/faces-popup-config.xml,
/WEB-INF/faces-mabr-config.xml
</param-value>
<description></description>
</context-param>
<filter>
<filter-name>clickstreamFilter</filter-name>
<filter-class>com.opensymphony.clickstream.ClickstreamFilter</filter-class>
</filter>
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>rewriteFilter</filter-name>
<filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class>
</filter>
<filter>
<filter-name>sitemesh</filter-name>
<filter-class>com.opensymphony.module.sitemesh.filter.PageFilter</filter-class>
</filter>
<filter>
<filter-name>exportFilter</filter-name>
<filter-class>org.displaytag.filter.ResponseOverrideFilter</filter-class>
</filter>
<filter>
<filter-name>uploadExtensionsFilter</filter-name>
<filter-class>
org.apache.myfaces.webapp.filter.ExtensionsFilter
</filter-class>
<init-param>
<param-name>uploadMaxFileSize</param-name>
<param-value>10m</param-value>
</init-param>
<init-param>
<param-name>uploadThresholdSize</param-name>
<param-value>100k</param-value>
</init-param>
</filter>
<filter>
<filter-name>compressionFilter</filter-name>
<display-name>Compression Filter</display-name>
<filter-class>org.opendls.webapp.filter.GZIPFilter</filter-class>
</filter>
<filter>
<filter-name>mySecurityFilter</filter-name>
<display-name>Security Filter</display-name>
<filter-class>org.opendls.webapp.filter.MySecurityFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>mySecurityFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>mySecurityFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>clickstreamFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>*.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>exportFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>compressionFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>sitemesh</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>uploadExtensionsFilter</filter-name>
<url-pattern>*.html</url-pattern>
</filter-mapping>
<listener>
<listener-class>com.opensymphony.clickstream.ClickstreamListener</listener-class>
</listener>
<listener>
<listener-class>org.apache.myfaces.webapp.StartupServletContextListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.util.IntrospectorCleanupListener</listener-class>
</listener>
<listener>
<listener-class>com.sun.xml.ws.transport.http.servlet.WSServletContextListener</listener-class>
</listener>
<listener>
<listener-class>org.opendls.webapp.listener.StartupListener</listener-class>
</listener>
<listener>
<listener-class>org.opendls.webapp.listener.SessionListener</listener-class>
</listener>
<listener>
<listener-class>org.opendls.webapp.listener.ShutdownListener</listener-class>
</listener>
<listener>
<listener-class>org.opendls.webapp.listener.UserCounterListener</listener-class>
</listener>
<servlet>
<servlet-name>faces</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet>
<servlet-name>wsit-jaxws-fromjava</servlet-name>
<display-name>wsit-jaxws-fromjava</display-name>
<description>JAX-WS endpoint - fromjava</description>
<servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>faces</servlet-name>
<url-pattern>*.html</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>wsit-jaxws-fromjava</servlet-name>
<url-pattern>/webservices/*</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>1440</session-timeout>
</session-config>
<welcome-file-list>
<welcome-file>index.jsp</welcome-file>
</welcome-file-list>
<error-page>
<error-code>500</error-code>
<location>/error.jsp</location>
</error-page>
<error-page>
<error-code>400</error-code>
<location>/index.jsp</location>
</error-page>
<error-page>
<error-code>403</error-code>
<location>/403.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
<error-page>
<exception-type>javax.faces.application.ViewExpiredException</exception-type>
<location>/viewExpired.jsp</location>
</error-page>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/primary</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
<resource-ref>
<description>DB Connection</description>
<res-ref-name>jdbc/secondary</res-ref-name>
<res-type>javax.sql.DataSource</res-type>
<res-auth>Container</res-auth>
</resource-ref>
</web-app>
StartupListener.java
public class StartupListener extends ContextLoaderListener
implements ServletContextListener {
private static final Log log = LogFactory.getLog(StartupListener.class);
public void contextInitialized(ServletContextEvent event) {
if (log.isDebugEnabled()) {
log.debug("initializing context...");
}
super.contextInitialized(event);
ServletContext context = event.getServletContext();
String daoType = context.getInitParameter(Constants.DAO_TYPE);
// if daoType is not specified, use DAO as default
if (daoType == null) {
log.warn("No 'daoType' context carameter, using hibernate");
daoType = Constants.DAO_TYPE_HIBERNATE;
}
// Orion starts Servlets before Listeners, so check if the config
// object already exists
Map config = (HashMap) context.getAttribute(Constants.CONFIG);
if (config == null) {
config = new HashMap();
}
// Create a config object to hold all the app config values
config.put(Constants.DAO_TYPE, daoType);
context.setAttribute(Constants.CONFIG, config);
// output the retrieved values for the Init and Context Parameters
if (log.isDebugEnabled()) {
log.debug("daoType: " + daoType);
log.debug("populating ...");
}
setupContext(context);
}
public static void setupContext(ServletContext context) {
ApplicationContext appContext = WebApplicationContextUtils.getRequiredWebApplicationContext(context);
RightsManager rightsManager = (RightsManager) appContext.getBean("rightsManager");
context.setAttribute(Constants.AVAILABLE_ROLES, rightsManager.getAllRights());
if (log.isDebugEnabled()) {
log.debug("initialization complete [OK]");
}
}
}
I have tried many things on web.xml and StartupListener.java but I couldn't manage to load ContextLoaderListener only once. I am getting the same error over and over again:
Error:
27-Jan-2017 02:25:29.217 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log No Spring WebApplicationInitializer types detected on classpath
27-Jan-2017 02:25:30.071 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Initializing Spring root WebApplicationContext
27-Jan-2017 02:25:33.060 SEVERE [localhost-startStop-1] org.apache.catalina.core.StandardContext.listenerStart Exception sending context initialized event to listener instance of class org.opendls.webapp.listener.StartupListener
java.lang.IllegalStateException: Cannot initialize context because there is already a root application context present - check whether you have multiple ContextLoader* definitions in your web.xml!
at org.springframework.web.context.ContextLoader.initWebApplicationContext(ContextLoader.java:297)
at org.springframework.web.context.ContextLoaderListener.contextInitialized(ContextLoaderListener.java:107)
at org.opendls.webapp.listener.StartupListener.contextInitialized(StartupListener.java:48)
at org.apache.catalina.core.StandardContext.listenerStart(StandardContext.java:4725)
at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5189)
at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:150)
at org.apache.catalina.core.ContainerBase.addChildInternal(ContainerBase.java:752)
at org.apache.catalina.core.ContainerBase.addChild(ContainerBase.java:728)
at org.apache.catalina.core.StandardHost.addChild(StandardHost.java:734)
at org.apache.catalina.startup.HostConfig.deployWAR(HostConfig.java:952)
at org.apache.catalina.startup.HostConfig$DeployWar.run(HostConfig.java:1823)
at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511)
at java.util.concurrent.FutureTask.run(FutureTask.java:266)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
at java.lang.Thread.run(Thread.java:745)
27-Jan-2017 02:25:33.071 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
27-Jan-2017 02:25:33.075 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log Closing Spring root WebApplicationContext
27-Jan-2017 02:25:33.405 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log ContextListener: contextInitialized()
27-Jan-2017 02:25:33.407 INFO [localhost-startStop-1] org.apache.catalina.core.ApplicationContext.log SessionListener: contextInitialized()
where is the problem?
ok - the problem is resolved
as M.Denim mentioned there were some duplicate listeners which was triggering the same ApplicationContext to load.
There was .tld file in WEB-INF which was containing the same listeners which was in web.xml, the file was created by ant task. A new implementation of Tomcat 8.x read them as noPluggabilityListeners and load was triggered second time.

JSF Inject multiple beans into a backing-bean

I'm injecting two beans inside my backing bean with ManagedProperty. The backing bean is view scope and the model bean is request scope that looks like this:
#ManagedBean(name = "categoryBB")
#ViewScoped
public class CategoryBackingBean implements Serializable {
private static final long serialVersionUID = -880184144170934066L;
private static final Logger LOG = Logger
.getLogger(CategoryBackingBean.class);
#ManagedProperty("#{categoryService}")
CategoryService categoryService;
#ManagedProperty("#{categoryBean}")
CategoryBean categoryBean;
//Getters/Setters...
}
However I'm receiving the following error:
javax.servlet.ServletException: Unable to create managed bean categoryBB.
The following problems were found:
The scope of the object referenced by expression #{categoryBean}, request, is shorter than the referring managed beans (categoryBB) scope of view
javax.faces.webapp.FacesServlet.service(FacesServlet.java:659)
My web.xml
<servlet>
<servlet-name>Faces Servlet</servlet-name>
<servlet-class>javax.faces.webapp.FacesServlet</servlet-class>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>/faces/*</url-pattern>
</servlet-mapping>
<servlet-mapping>
<servlet-name>Faces Servlet</servlet-name>
<url-pattern>*.xhtml</url-pattern>
</servlet-mapping>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>
/WEB-INF/spring-security.xml
/WEB-INF/applicationContext.xml
</param-value>
</context-param>
<!-- Enable Spring-Security TagLib in JSF -->
<context-param>
<param-name>javax.faces.FACELETS_LIBRARIES</param-name>
<param-value>/WEB-INF/springsecurity.taglib.xml</param-value>
</context-param>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
<dispatcher>FORWARD</dispatcher>
<dispatcher>REQUEST</dispatcher>
<dispatcher>ERROR</dispatcher>
</filter-mapping>
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
Any suggestion?

Request Mapping in Spring MVC - back to previous URL

I have a problem with redirect in Spring MVC. I have a controller with few methods:
//PRINT ALL WORKERS
#RequestMapping("/print")
public String listWorkers(Model model)
{
model.addAttribute("workerList", workerService.getAllWorkers());
return "print";
}
//EDIT WORKER DATA
#RequestMapping("/edit")
public String redirectWorker(HttpServletRequest request)
{
String parameter = request.getParameter("workers");
String path = "redirect:/edit/" + parameter;
return path;
}
#RequestMapping("/edit/{worker}")
public String editWorker(#PathVariable("worker")
String login, Model model)
{
model.addAttribute("worker", workerService.getWorker(login));
return "edition";
}
When I'm using in my program for example method with "print" in request mapping, my URL is:
http://localhost:8080/WWP/print
But when I'm using my method with "edit/{worker}" in request mapping and after that I used method with "print" I got an URL:
http://localhost:8080/WWP/edit/print
Cause my "print" was added after "edit" which isn't necessary. How to return to previous URL:
http://localhost:8080/WWP/print
I suppose that I have to change my RequestMapping annotation. But I don't know how to do this.
EDIT:
Ok, here is my web.xml file:
<?xml version="1.0" encoding="UTF-8"?>
<web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd">
<!-- The definition of the Root Spring Container shared by all Servlets and Filters -->
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/root-context.xml, /WEB-INF/spring/appServlet/security.xml</param-value>
</context-param>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<!-- Processes application requests -->
<servlet>
<servlet-name>appServlet</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>/WEB-INF/spring/appServlet/servlet-context.xml</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>appServlet</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<!-- Filtry -->
<filter>
<filter-name>encodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>encodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
</web-app>
I used the "c:url" in the JSP and it worked.
For example:
It will be remember the previous URL (It's wrong):
My Events
It will be good:
<c:url var="myEventsUrl" value="/events/my" />
My Events
URL is always link to: _http://localhost:8080/WWP/events/my

Issue with Spring profiles and my properties files

I am trying to activate one set of properties files for one Spring profile and another set for another Spring profile as follows:
<beans profile="cloud">
<context:property-placeholder location="classpath*:META-INF/spring/cloud/*.properties" />
</beans>
<beans profile="default">
<context:property-placeholder location="classpath*:META-INF/spring/default/*.properties" />
</beans>
I have the corresponding and appropriate directory structure in my src/main/resources folder.
I have a simple #Value("${application.url}") in one of my services and I systematically get the following error:
Error creating bean with name 'mailerServiceImpl': Injection of
autowired dependencies failed; nested exception is
org.springframework.beans.factory.Be anCreationException: Could not
autowire field: private java.lang.String
com.kadjoukor.service.MailerServiceImpl.websiteContext; nested
exception is java.lang.IllegalArgumentException: Could not resolve
placeholder 'application.url' in string value "${application.url}"
Note that I have tried adding a spring.profiles.active init-param to my web.xml. It doesn't make any difference...
I am not sure what I am getting wrong. Can anyone please provide advice?
EDIT 1: Could it matter that the above snippets of configuration are located at the bottom of the configuration file?
EDIT 2: Here is the output of my web.xml:
<?xml version="1.0" encoding="ISO-8859-1" standalone="no"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" version="3.0" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd" metadata-complete="true">
<display-name>kadjoukor</display-name>
<description>Roo generated kadjoukor application</description>
<!-- Enable escaping of form submission contents -->
<context-param>
<param-name>defaultHtmlEscape</param-name>
<param-value>true</param-value>
</context-param>
<context-param>
<param-name>contextConfigLocation</param-name>
<param-value>classpath*:META-INF/spring/applicationContext*.xml classpath:META-INF/cloud/cloudfoundry-auto-reconfiguration-context.xml</param-value></context-param>
<filter>
<filter-name>CharacterEncodingFilter</filter-name>
<filter-class>org.springframework.web.filter.CharacterEncodingFilter</filter-class>
<init-param>
<param-name>encoding</param-name>
<param-value>UTF-8</param-value>
</init-param>
<init-param>
<param-name>forceEncoding</param-name>
<param-value>true</param-value>
</init-param>
</filter>
<filter>
<filter-name>HttpMethodFilter</filter-name>
<filter-class>org.springframework.web.filter.HiddenHttpMethodFilter</filter-class>
</filter>
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<filter-class>org.springframework.orm.jpa.support.OpenEntityManagerInViewFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>CharacterEncodingFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>HttpMethodFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Spring OpenEntityManagerInViewFilter</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
<!-- Creates the Spring Container shared by all Servlets and Filters -->
<listener>
<listener-class>org.springframework.web.context.ContextLoaderListener</listener-class>
</listener>
<listener>
<listener-class>org.springframework.web.context.request.RequestContextListener</listener-class>
</listener>
<listener>
<listener-class>
org.springframework.security.web.session.HttpSessionEventPublisher
</listener-class>
</listener>
<!-- Handles Spring requests -->
<servlet>
<servlet-name>kadjoukor</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>WEB-INF/spring/webmvc-config.xml classpath:META-INF/cloud/cloudfoundry-auto-reconfiguration-context.xml</param-value></init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>kadjoukor</servlet-name>
<url-pattern>/</url-pattern>
</servlet-mapping>
<session-config>
<session-timeout>30</session-timeout><!-- TODO -->
</session-config>
<context-param><param-name>contextInitializerClasses</param-name><param-value>org.cloudfoundry.reconfiguration.spring.CloudApplicationContextInitializer</param-value></context-param></web-app>
and here is the contents of the WEB-INF/libs directory:
activation-1.1.1.jar 67.8K
antlr-2.7.6.jar 433.0K
aopalliance-1.0.jar 4.4K
asm-3.3.1.jar 42.6K
aspectjrt-1.7.0.RC1.jar 113.5K
aspectjweaver-1.7.0.RC1.jar 1.7M
auto-reconfiguration-0.6.5.jar 693.3K
cglib-2.2.2.jar 280.5K
cglib-nodep-2.2.2.jar 319.3K
commons-beanutils-1.8.3.jar 226.6K
commons-codec-1.5.jar 71.4K
commons-collections-3.2.1.jar 561.9K
commons-dbcp-1.3.jar 145.3K
commons-digester-2.1.jar 192.2K
commons-fileupload-1.2.2.jar 58.2K
commons-io-2.1.jar 159.3K
commons-lang3-3.1.jar 308.4K
commons-logging-1.0.4.jar 37.1K
commons-pool-1.5.6.jar 98.1K
dom4j-1.6.1.jar 306.5K
ehcache-core-2.6.0.jar 1.3M
flexjson-2.1.jar 79.2K
guava-11.0.2.jar 1.6M
hamcrest-core-1.1.jar 74.8K
hibernate-commons-annotations-3.2.0.Final.jar 69.6K
hibernate-core-3.6.9.Final.jar 3.0M
hibernate-entitymanager-3.6.9.Final.jar 416.3K
hibernate-jpa-2.0-api-1.0.1.Final.jar 100.3K
hibernate-validator-4.2.0.Final.jar 358.0K
httpclient-4.1.2.jar 344.0K
httpcore-4.1.2.jar 177.0K
imgscalr-lib-4.2.jar 27.2K
jackson-core-asl-1.9.9.jar 226.7K
jackson-mapper-asl-1.9.9.jar 762.0K
java-xmlbuilder-0.4.jar 18.1K
javassist-3.12.0.GA.jar 618.5K
javassist-3.16.1-GA.jar 643.9K
javax.inject-1.jar 2.4K
jcl-over-slf4j-1.6.4.jar 16.9K
jets3t-0.9.0.jar 527.1K
jmimemagic-0.1.2.jar 44.5K
joda-time-2.1.jar 557.1K
jsr305-1.3.9.jar 32.2K
jstl-api-1.2.jar 29.8K
jstl-impl-1.2.jar 382.8K
jta-1.1.jar 14.7K
junit-dep-4.8.2.jar 213.2K
log4j-1.2.16.jar 470.2K
mail-1.4.3.jar 451.3K
mysema-commons-lang-0.2.4.jar 11.8K
mysql-connector-java-5.1.18.jar 771.4K
ognl-3.0.5.jar 222.5K
oro-2.0.8.jar 63.7K
prettytime-1.0.8.Final.jar 65.4K
querydsl-core-2.9.0.jar 367.3K
querydsl-jpa-2.9.0.jar 93.3K
slf4j-api-1.6.4.jar 25.4K
slf4j-log4j12-1.6.4.jar 9.5K
spring-aop-3.2.0.RELEASE.jar 327.0K
spring-aspects-3.2.0.RELEASE.jar 68.2K
spring-beans-3.2.0.RELEASE.jar 590.6K
spring-context-3.2.0.RELEASE.jar 834.0K
spring-context-support-3.2.0.RELEASE.jar 124.1K
spring-core-3.2.0.RELEASE.jar 842.8K
spring-data-commons-core-1.3.0.RELEASE.jar 215.0K
spring-data-jpa-1.1.0.RELEASE.jar 129.8K
spring-expression-3.2.0.RELEASE.jar 189.2K
spring-jdbc-3.2.0.RELEASE.jar 391.6K
spring-js-resources-2.2.1.RELEASE.jar 4.3M
spring-orm-3.2.0.RELEASE.jar 383.0K
spring-security-acl-3.1.2.RELEASE.jar 77.7K
spring-security-config-3.1.2.RELEASE.jar 198.9K
spring-security-core-3.1.2.RELEASE.jar 332.1K
spring-security-taglibs-3.1.2.RELEASE.jar 20.3K
spring-security-web-3.1.2.RELEASE.jar 245.2K
spring-social-core-1.0.2.RELEASE.jar 113.7K
spring-social-facebook-1.0.2.RELEASE.jar 117.2K
spring-social-web-1.0.2.RELEASE.jar 18.0K
spring-tx-3.2.0.RELEASE.jar 235.3K
spring-web-3.2.0.RELEASE.jar 609.7K
spring-webmvc-3.2.0.RELEASE.jar 621.0K
thymeleaf-2.0.14.jar 677.9K
thymeleaf-extras-tiles2-1.0.0-beta3-SNAPSHOT.jar 46.7K
thymeleaf-spring3-2.0.14.jar 161.9K
tiles-api-2.2.2.jar 35.1K
tiles-core-2.2.2.jar 157.2K
tiles-jsp-2.2.2.jar 49.6K
tiles-servlet-2.2.2.jar 58.3K
tiles-template-2.2.2.jar 23.9K
validation-api-1.0.0.GA.jar 46.3K
xercesImpl-2.7.1.jar 1.1M
xml-apis-1.0.b2.jar 106.8K
xmlParserAPIs-2.0.2.jar 76.6K
Base on the https://cloudfoundry.atlassian.net/browse/CF-132 bug, in order to have the cloud profile work, you would need a ContextLoaderInitializer. So I would suggest you to create a context file, even leave it empty if you have to, to make the cloud profile work.

Dispatcher servlet mapping

I am trying to use spring-security
Before all of the configuration
http://localhost:9090/app/login2.xhtml
request, works as i expected.
I added a controller:
#Controller
#RequestMapping("/auth")
public class LoginController {
#RequestMapping(value = "/login", method = RequestMethod.GET)
public String getLoginPage(#RequestParam(value="error", required=false) boolean error,
ModelMap model) {
return "login2.xhtnml";
}
}
I have in web.xml:
<servlet>
<servlet-name>spring</servlet-name>
<servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
<init-param>
<param-name>contextConfigLocation</param-name>
<param-value>
classpath:META-INF/spring-servlet.xml
</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/*</url-pattern>
</servlet-mapping>
With this configuration when i call
http://localhost:9090/app/login2.xhtml
Error comes
WARN org.springframework.web.servlet.PageNotFound - No mapping found for HTTP request with URI [/app/login2.xhtml] in DispatcherServlet with name 'spring'
BUT when i change configuration mapping to
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
http://localhost:9090/app/login2.xhtml works as i expected
but
http://localhost:9090/app/auth/login
gives no error, no exception, no redirection, i think dispatcher servlet can not know about this request.
http://localhost:9090/app/app/auth/login
works with
<servlet-mapping>
<servlet-name>spring</servlet-name>
<url-pattern>/app/*</url-pattern>
</servlet-mapping>
My understanding:
dispatcher servlet use "http://localhost:9090/" as base for searching login2.xhtml
and use "http://localhost:9090/app" for /auth/login URL.
I do not know where to set this, and why they are different.
Have you added the SpringSecurityFilterChain to the web.xml?
<filter>
<filter-name>springSecurityFilterChain</filter-name>
<filter-class>org.springframework.web.filter.DelegatingFilterProxy</filter-class>
</filter>
<filter-mapping>
<filter-name>springSecurityFilterChain</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
Could you past the registered "Request Bindings" if the container starts (from the logfile)?

Resources