yes, thank you, that's the reason! The problem is the Comparator in TreeMap.
I prefer to use your second proposed solution, however my service returns
Map<DataGroup, List<Report>> and I render the result in two nested ListView as
follows:
final Map<DataGroup, List<Report>> listPerGroup =
reportService.listPerGroup();
add(new ListView<DataGroup>("group", new
ArrayList<>(listPerGroup.keySet())) {
@Override
protected void populateItem(ListItem<DataGroup> groupItem) {
DataGroup group = groupItem.getModelObject();
...
groupItem.add(new ListView<Report>("report",
listPerGroup.get(group)) {
@Override
protected void populateItem(ListItem<Report> item) {
final Report report = item.getModelObject();
...
}
});
}
});
In this approach, is it possible to use LoadableDetachableModel or I must
change my return type? I want to learn the Wicket way.
On Thursday, June 21, 2018, 4:48:25 PM GMT+4:30, Sven Meier
<[email protected]> wrote:
Hi,
your service method is return a TreeMap holding a lambda comparator:
Comparator.comparing(DataGroup::getName)
Either you make that comparator serializable (you can but you don't *need* to
use org.danekja as Wicket does it):
https://stackoverflow.com/questions/22807912/how-to-serialize-a-lambda
... or don't keep the result of your service method in the Wicket component
tree, e.g. by using a LoadableDetachableModel.
Have fun
Sven
Am 21.06.2018 um 13:26 schrieb m.xinu:
> I manually create the Spring context, which is
> ClassPathXmlApplicationContext, and pass it to Wicket application by calling
>
> getComponentInstantiationListeners().add(new
>SpringComponentInjector(this, MyApp.get().getApplicationContext())).
>
> Then, In my panel I have this
>
> private class ReportMenuPanel extends WPanel {
> private static final long serialVersionUID = -9012565863392514416L;
>
> @Inject
> private IReportService reportService;
>
> ...
> }
>
> I also checked my code with @SpringBean and I got the same exception.
>
>
> On Thursday, June 21, 2018, 3:30:29 PM GMT+4:30, Andrea Del Bene
><[email protected]> wrote:
>
> I think you are keeping a reference to your Spring bean in a page or in a
> component, that's why Wicket is trying to serialize it. Are you injecting
> this bean with @SpringBean annotation?
>
> On Thu, Jun 21, 2018 at 12:45 PM, m.xinu <[email protected]>
> wrote:
>
>> Thanks for your reply.
>>
>> Both of your proposed solutions mean using other interfaces in the Lambda
>> expressions. However most of my Lambda definitions are in my Service tier
>> classes (Spring beans), and the Service tier must be independent from the
>> Web tier, and the force of Wicket serialization (even for the service
>> beans) breaks the aforementioned rule. Is there another solution? Is it
>> possible for Wicket not to serialize the Spring beans? or is there another
>> serialization mechanism in Wicket not based on Serializable interface?
>>
>>
>> On Thursday, June 21, 2018, 5:44:00 AM GMT+4:30, Maxim Solodovnik <
>> [email protected]> wrote:
>>
>> Wicket7:
>> https://github.com/wicketstuff/core/blob/wicket-
>> 7.x/lambda-parent/lambda/src/main/java/org/wicketstuff/
>> lambda/SerializableBiConsumer.java
>>
>> WBR, Maxim
>> (from mobile, sorry for the typos)
>>
>> On Thu, Jun 21, 2018, 08:13 Maxim Solodovnik <[email protected]> wrote:
>>
>>> https://cwiki.apache.org/confluence/display/WICKET/
>> Migration+to+Wicket+8.0#MigrationtoWicket8.0-
>> Provideserializableversionsofjava.util.function.(Supplier|
>> Consumer|Function|BiConsumer)ASFJIRA5aa69414-a9e9-3523-
>> 82ec-879b028fb15bWICKET-5991
>>> <https://cwiki.apache.org/confluence/display/WICKET/
>> Migration+to+Wicket+8.0#MigrationtoWicket8.0-
>> Provideserializableversionsofjava.util.function.(Supplier%
>> 7CConsumer%7CFunction%7CBiConsumer)ASFJIRA5aa69414-a9e9-3523-82ec-
>> 879b028fb15bWICKET-5991>
>>> WBR, Maxim
>>> (from mobile, sorry for the typos)
>>>
>>> On Wed, Jun 20, 2018, 22:42 m.xinu <[email protected]> wrote:
>>>
>>>> Hi,
>>>>
>>>> I'm using Apache Wicket 7.9.0 alongside Spring 5.0.5.RELEASE. In one of
>>>> my beans, I call some stream API containing multiple lambda expressions.
>>>> During that page execution, I get following exception:
>>>>
>>>> Caused by: java.io.NotSerializableException:
>>>> org.devocative.metis.service.data.ReportService$$Lambda$126/997816965
>>>>
>>>> and it is very strange for me since it is in one of my beans not in any
>>>> Wicket-related part.
>>>>
>>>> I've searched and I've found the Serializable casting solution, however
>>>> it results in a very complex syntax for my code. So is there any other
>>>> solution? Dose Wicket has a way for this type of serialization?
>>>>
>>>>
>>>> P.S: My block of code for stream:
>>>>
>>>> reports.parallelStream()
>>>> .filter(report ->
>>>> externalAuthorizationService == null ||
>>>> externalAuthorizationService.authorizeReport(report, null,
>>>> currentUser.getUserId())
>>>> )
>>>> .flatMap(report -> report.getGroups().stream().map(dataGroup -> new
>>>> KeyValueVO<>(dataGroup, report)))
>>>> .collect(Collectors.groupingBy(
>>>> KeyValueVO::getKey,
>>>> () -> new TreeMap<>(Comparator.comparing(DataGroup::getName)),
>>>> Collectors.mapping(
>>>> KeyValueVO::getValue,
>>>> Collectors.toList()))
>>>> );
>>>>
>>>>
>>
>
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]