Quarkus - JSF - java.lang.RuntimeException: Could not restore StateHolder of type java.util.Arrays$ArrayList...

UI Components for JSF
tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

20 Jul 2021, 23:54

PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

21 Jul 2021, 13:41

I can't see that chat. Can you please paste the relevant info here?
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

21 Jul 2021, 19:25

Hi Melloware.
I hope this helps.
I worked arund it for now (put date range slector outside the table).
Thx


Quarkus throwing exception (I dont think JSF is expecting this)

@PostConstruct
@Transactional
public void init() {
logger.debug(">init");

weeks = weeksService.getWeeks();

filterBy = new ArrayList<>();


java.lang.RuntimeException: Could not restore StateHolder of type java.util.Arrays$ArrayList (missing no-args constructor?)
at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1768)
at javax.faces.component._DeltaStateHelper.copyMap(_DeltaStateHelper.java:267)
at javax.faces.component._DeltaStateHelper._createDeltas(_DeltaStateHelper.java:226)
at javax.faces.component._DeltaStateHelper.put(_DeltaStateHelper.java:369)
at org.primefaces.component.datepicker.DatePickerBase.setShowTime(DatePickerBase.java:223)
at org.primefaces.component.datepicker.DatePickerRenderer.encodeEnd(DatePickerRenderer.java:65)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:649)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:530)
at org.primefaces.component.datatable.DataTableRenderer.encodeFilter(DataTableRenderer.java:759)
at org.primefaces.component.datatable.DataTableRenderer.encodeColumnHeader(DataTableRenderer.java:670)
at org.primefaces.component.datatable.DataTableRenderer.encodeThead(DataTableRenderer.java:1045)
at org.primefaces.component.datatable.DataTableRenderer.encodeThead(DataTableRenderer.java:975)
at org.primefaces.component.datatable.DataTableRenderer.encodeRegularTable(DataTableRenderer.java:393)
at org.primefaces.component.datatable.DataTableRenderer.encodeMarkup(DataTableRenderer.java:324)
at org.primefaces.component.datatable.DataTableRenderer.render(DataTableRenderer.java:98)
at org.primefaces.component.datatable.DataTableRenderer.encodeEnd(DataTableRenderer.java:89)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:649)
at javax.faces.component.UIData.encodeEnd(UIData.java:1649)
at org.primefaces.renderkit.CoreRenderer.renderChild(CoreRenderer.java:77)
at org.primefaces.renderkit.CoreRenderer.renderChildren(CoreRenderer.java:59)
at org.primefaces.component.card.CardRenderer.encodeEnd(CardRenderer.java:102)
at javax.faces.component.UIComponentBase.encodeEnd(UIComponentBase.java:649)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:530)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:526)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:526)
at javax.faces.component.UIComponentBase.encodeAll(UIComponentBase.java:526)
at org.apache.myfaces.view.facelets.FaceletViewDeclarationLanguage.renderView(FaceletViewDeclarationLanguage.java:1782)
at org.apache.myfaces.application.ViewHandlerImpl.renderView(ViewHandlerImpl.java:316)
at org.apache.myfaces.lifecycle.RenderResponseExecutor.execute(RenderResponseExecutor.java:122)
at org.apache.myfaces.lifecycle.LifecycleImpl.render(LifecycleImpl.java:241)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:209)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:63)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
at io.undertow.servlet.handlers.ServletDispatchingHandler.handleRequest(ServletDispatchingHandler.java:36)
at io.undertow.servlet.handlers.RedirectDirHandler.handleRequest(RedirectDirHandler.java:67)
at io.undertow.servlet.handlers.security.SSLInformationAssociationHandler.handleRequest(SSLInformationAssociationHandler.java:133)
at io.undertow.servlet.handlers.security.ServletAuthenticationCallHandler.handleRequest(ServletAuthenticationCallHandler.java:57)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.security.handlers.AbstractConfidentialityHandler.handleRequest(AbstractConfidentialityHandler.java:46)
at io.undertow.servlet.handlers.security.ServletConfidentialityConstraintHandler.handleRequest(ServletConfidentialityConstraintHandler.java:65)
at io.undertow.security.handlers.AuthenticationMechanismsHandler.handleRequest(AuthenticationMechanismsHandler.java:60)
at io.undertow.servlet.handlers.security.CachedAuthenticatedSessionHandler.handleRequest(CachedAuthenticatedSessionHandler.java:77)
at io.undertow.security.handlers.NotificationReceiverHandler.handleRequest(NotificationReceiverHandler.java:50)
at io.undertow.security.handlers.AbstractSecurityContextAssociationHandler.handleRequest(AbstractSecurityContextAssociationHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.server.handlers.PredicateHandler.handleRequest(PredicateHandler.java:43)
at io.undertow.servlet.handlers.ServletInitialHandler.handleFirstRequest(ServletInitialHandler.java:247)
at io.undertow.servlet.handlers.ServletInitialHandler.access$100(ServletInitialHandler.java:56)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:111)
at io.undertow.servlet.handlers.ServletInitialHandler$2.call(ServletInitialHandler.java:108)
at io.undertow.servlet.core.ServletRequestContextThreadSetupAction$1.call(ServletRequestContextThreadSetupAction.java:48)
at io.undertow.servlet.core.ContextClassLoaderSetupAction$1.call(ContextClassLoaderSetupAction.java:43)
at io.quarkus.undertow.runtime.UndertowDeploymentRecorder$9$1.call(UndertowDeploymentRecorder.java:587)
at io.undertow.servlet.handlers.ServletInitialHandler.dispatchRequest(ServletInitialHandler.java:227)
at io.undertow.servlet.handlers.ServletInitialHandler.handleRequest(ServletInitialHandler.java:152)
at io.undertow.server.handlers.PathHandler.handleRequest(PathHandler.java:91)
at io.quarkus.undertow.runtime.UndertowDeploymentRecorder$1.handleRequest(UndertowDeploymentRecorder.java:119)
at io.undertow.server.Connectors.executeRootHandler(Connectors.java:290)
at io.undertow.server.DefaultExchangeHandler.handle(DefaultExchangeHandler.java:18)
at io.quarkus.undertow.runtime.UndertowDeploymentRecorder$5$1.run(UndertowDeploymentRecorder.java:413)
at io.quarkus.runtime.CleanableExecutor$CleaningRunnable.run(CleanableExecutor.java:231)
at java.base/java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:515)
at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
at org.jboss.threads.EnhancedQueueExecutor$Task.run(EnhancedQueueExecutor.java:2415)
at org.jboss.threads.EnhancedQueueExecutor$ThreadBody.run(EnhancedQueueExecutor.java:1452)
at org.jboss.threads.DelegatingRunnable.run(DelegatingRunnable.java:29)
at org.jboss.threads.ThreadLocalResettingRunnable.run(ThreadLocalResettingRunnable.java:29)
at java.base/java.lang.Thread.run(Thread.java:829)
at org.jboss.threads.JBossThread.run(JBossThread.java:501)
Caused by: java.lang.InstantiationException: java.util.Arrays$ArrayList
at java.base/java.lang.Class.newInstance(Class.java:571)
at javax.faces.component.UIComponentBase.restoreAttachedState(UIComponentBase.java:1764)
... 69 more
Caused by: java.lang.NoSuchMethodException: java.util.Arrays$ArrayList.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3349)
at java.base/java.lang.Class.newInstance(Class.java:556)
... 70 more
2021-07-21 09:49:06,590 ERROR [io.und.req.io] (executor-thread-6) Exception handling request 8255ef6c-73a8-4c3f-8325-94a820a8a54d-1 to /unite/pages/weeks.jsf: javax.servlet.ServletException: Could not restore StateHolder of type java.util.Arrays$ArrayList (missing no-args constructor?)
at javax.faces.webapp.FacesServlet.service(FacesServlet.java:239)
at io.undertow.servlet.handlers.ServletHandler.handleRequest(ServletHandler.java:74)
at io.undertow.servlet.handlers.security.ServletSecurityRoleHandler.handleRequest(ServletSecurityRoleHandler.java:63)
at io.undertow.servlet.handlers.ServletChain$1.handleRequest(ServletChain.java:68)
...
Caused by: java.lang.NoSuchMethodException: java.util.Arrays$ArrayList.<init>()
at java.base/java.lang.Class.getConstructor0(Class.java:3349)
at java.base/java.lang.Class.newInstance(Class.java:556)
... 70 more
PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

21 Jul 2021, 20:04

OK you error looks like some piece of code is using....

Code: Select all

List<> list = Arrays.asList();
Which creates an immutable array which has no default constructor instead of...

Code: Select all

List<> list = new ArrayList<>();
So JSF checked the type and is trying to create an instance of an Arrays.ArrayList instead of a java.util.ArrayList which does have a default constructor.
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

21 Jul 2021, 20:55

Hi Melloware,

I am using this code from the demo...


https://www.primefaces.org/showcase/ui/ ... fwid=03908

@PostConstruct
public void init() {
customers1 = service.getCustomers(10);
customers2 = service.getCustomers(50);
customers3 = service.getCustomers(10);

filterBy = new ArrayList<>();

filterBy.add(FilterMeta.builder()
.field("status")
.filterValue(CustomerStatus.NEW)
.matchMode(MatchMode.EQUALS)
.build());

filterBy.add(FilterMeta.builder()
.field("date")
.filterValue(Arrays.asList(LocalDate.now().minusDays(28), LocalDate.now().plusDays(28)))
.matchMode(MatchMode.RANGE)
.build());

}

I am pretty sure I copied this:
filterBy = new ArrayList<>();


I see this:
>> Arrays.asList(LocalDate.now().minusDays(28), LocalDate.now().plusDays(28)

I will check the code when I get to work to see what I may have changed.

Thank you for replying so quickly
PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

21 Jul 2021, 21:02

Yep look for anywhere Arrays.asList is being used and I bet that is the problem. Let me know what you find out!
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

22 Jul 2021, 00:15

Hi Melloware:

Adding back in
filterBy="#{weeksController.filterBy}
causes the error...

Code: Select all

<p:dataTable id="weeksTable" widgetVar="weeksTableWV" var="eachWeek" 
							value="#{weeksController.weeks}" editable="true" style="margin-bottom:20px" 
							reflow="true" stripedRows="true"
							filteredValue="#{weeksController.filteredWeeks}" filterBy="#{weeksController.filterBy}"> <!-- filterBy="#{weeksController.filterBy}" --> 

related Field:

Code: Select all


<p:column field="weekDateFrom" headerText="Date Range - From" filterMatchMode="range">
					            <f:facet name="filter">
				                    <p:datePicker selectionMode="range" onchange="PF('weeksTableWV').filter()" />
				                </f:facet>
				            	<h:outputText value="#{eachWeek.weekDateFrom}">
				            		<f:convertDateTime type="localDate" dateStyle="long" timeStyle="short" />
				            	</h:outputText>
				            </p:column>

Code: Select all


	@Inject
	Logger logger;
	
	@Inject
	WeeksService weeksService;

	private List<HJWeek> weeks;
	
	private List<HJWeek> filteredWeeks;	
	
	private List<LocalDate> range;
	
	private LocalDate minDate = LocalDate.now();
	private LocalDate maxDate = LocalDate.now();
	
	private List<FilterMeta> filterBy = new ArrayList<FilterMeta>();
	
	@PostConstruct
	public void init() {
    	logger.debug(">init");

    	weeks = weeksService.getWeeks();
    	
    	for (HJWeek eachHjWeek : weeks) {
			if (eachHjWeek.getWeekDateFrom().isBefore(minDate)) {
				minDate = eachHjWeek.getWeekDateFrom();
			}
			if (eachHjWeek.getWeekDateFrom().isAfter(maxDate)) {
				maxDate = eachHjWeek.getWeekDateFrom();
			}
		} 
    	
    	range = new ArrayList<LocalDate>();
    	range.add(LocalDate.now());
    	range.add(LocalDate.now().plusMonths(8));
    	rangeChange();
   	
    	filterBy = new ArrayList<FilterMeta>();
    	
    	filterBy.add(FilterMeta.builder()
                .field("jetSizeKind")
                .filterValue(JetSizeKind.Large)
                .matchMode(MatchMode.EQUALS)
                .build());
    	
    	filterBy.add(FilterMeta.builder()
                .field("weekDateFrom")
                .filterValue(Arrays.asList(LocalDate.now().minusMonths(2), LocalDate.now().plusMonths(6)))
                .matchMode(MatchMode.RANGE)
                .build());
    	
		logger.debug("<init");
    }

Code: Select all


	public List<FilterMeta> getFilterBy() {
        return filterBy;
    }


Not to worry; I have worked around it for now... May be just a quarkus "feature"...
I am using the JSF bridge by tandraschko


POM:

Code: Select all

                <myfaces.version>2.3-next-M6</myfaces.version>
		<primefaces.version>10.0.1</primefaces.version>
		<version.com.primefaces.atlantis>3.0.0</version.com.primefaces.atlantis>

Code: Select all

                <!-- JSF -->
		<!-- JSF -->
		<dependency>
			<groupId>org.apache.myfaces.core.extensions.quarkus</groupId>
			<artifactId>myfaces-quarkus</artifactId>
			<version>${myfaces.version}</version>
		</dependency>
		<!-- Primefaces -->
		<dependency>
			<groupId>org.primefaces</groupId>
			<artifactId>primefaces</artifactId>
			<version>${primefaces.version}</version>
		</dependency>
		<!-- Primefaces Theme -->
		<dependency>
			<groupId>org.primefaces</groupId>
			<artifactId>atlantis-theme</artifactId>
			<version>${version.com.primefaces.atlantis}</version>
		</dependency>
		<!-- JSF -->
		<!-- JSF -->

Code: Select all

	<repositories>
		<repository>
			<id>primefaces-local-repo</id>
			<url>file://${basedir}/local-repo</url>
		</repository>
	</repositories>
PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

22 Jul 2021, 00:40

Just adding in the
.filterValue(range)
works...

Code: Select all

    	range = new ArrayList<LocalDate>();
    	range.add(LocalDate.now());
    	range.add(LocalDate.now().plusMonths(8));
    	rangeChange();
   	
    	filterBy = new ArrayList<FilterMeta>();
    	
    	filterBy.add(FilterMeta.builder()
                .field("jetSizeKind")
                .filterValue(JetSizeKind.Large)
                .matchMode(MatchMode.EQUALS)
                .build());
    	
    	filterBy.add(FilterMeta.builder()
                .field("weekDateFrom")
                .filterValue(range)
                .matchMode(MatchMode.RANGE)
                .build());
PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

Melloware
Posts: 3717
Joined: 22 Apr 2013, 15:48

22 Jul 2021, 13:51

Nice.

I also have this example project using the PF showcase on Quarkus if you ever need to check anything out:
https://github.com/melloware/quarkus-faces
PrimeFaces Developer | PrimeFaces Extensions Developer
GitHub Profile: https://github.com/melloware
PrimeFaces Elite 13.0.0 / PF Extensions 13.0.0
PrimeReact 9.6.1

tony.herstell
Posts: 214
Joined: 29 Nov 2011, 00:40

22 Jul 2021, 20:38

Thx
I will and use a project to try to recreate problems.
Quarkus is meant for ircorservices; but its happily doing JSF as well now.
Thx :)
PF12+, Quarkus 3.2+ (CDI, JPA etc.), JSF Bridge (MyFaces 4.0.1)
Dont forget the classifier:

Code: Select all

   ...primefaces
  <classifier>jakarta</classifier>
     ... theme
  <classifier>jakarta</classifier>

Post Reply

Return to “PrimeFaces”

  • Information
  • Who is online

    Users browsing this forum: No registered users and 34 guests