Hi Luciano,
On one side, and unfortunately, the @JsonProperty(“fines”) did not work. On the other, I could manage to solve the issue, but with a few hours of debugging and testing in order to discover how everything was working on the vaadin-maven-plugin.
I am sharing the solution in case anyone has this issue:
<groupId>com.vaadin</groupId>
<artifactId>vaadin-maven-plugin</artifactId>
<version>${vaadin.version}</version>
<configuration>
<parser>
<plugins>
<disableAllDefaults>true</disableAllDefaults>
<use>
<plugin>
<name>com.example.core.hilla.MyBackbonePlugin</name>
<configuration implementation="com.vaadin.hilla.parser.plugins.backbone.BackbonePluginConfiguration">
<objectMapperFactoryClassName>com.example.core.hilla.MyJacksonObjectMapperFactory</objectMapperFactoryClassName>
</configuration>
</plugin>
<plugin>
<name>com.example.core.hilla.MyTransferTypesPlugin</name>
</plugin>
<plugin>
<name>com.example.core.hilla.MyNonnullPlugin</name>
</plugin>
<plugin>
<name>com.example.core.hilla.MySubTypesPlugin</name>
</plugin>
<plugin>
<name>com.example.core.hilla.MyModelPlugin</name>
</plugin>
</use>
</plugins>
</parser>
</configuration>
public class MyJacksonObjectMapperFactory implements JacksonObjectMapperFactory {
@Override
public ObjectMapper build() {
..
mapper.addMixIn(Vehicle.class, VehicleMixIn.class);
..
}
}
public abstract class VehicleMixIn {
@JsonIgnore
abstract void setFines(List<String> list)
@JsonIgnore
abstract void setFines(Map<String, String> map)
}
public class MyBackbonePlugin extends AbstractCompositePlugin<BackbonePluginConfiguration> {
public MyBackbonePlugin() {
super(new EndpointPlugin(),
new EndpointExposedPlugin(),
new MethodPlugin(),
new MethodParameterPlugin(),
new EntityPlugin(),
new PropertyPlugin(),
new TypeSignaturePlugin());
}
}
public class MyTransferTypesPlugin extends AbstractPlugin<PluginConfiguration> {
private final TransferTypesPlugin real;
public MyTransferTypesPlugin() {
super();
real = new TransferTypesPlugin();
}
@Override
public Collection<Class<? extends Plugin>> getRequiredPlugins() {
return List.of(MyBackbonePlugin.class);
}
@Override
public void enter(NodePath<?> nodePath) {
real.enter(nodePath);
}
@Override
public void exit(NodePath<?> nodePath) {
real.exit(nodePath);
}
@Override
public NodeDependencies scan(NodeDependencies nodeDependencies) {
return real.scan(nodeDependencies);
}
}
public class MyNonnullPlugin extends AbstractPlugin<NonnullPluginConfig> {
private final NonnullPlugin real;
public MyNonnullPlugin() {
super();
real = new NonnullPlugin();
}
@Override
public Collection<Class<? extends Plugin>> getRequiredPlugins() {
return List.of(MyBackbonePlugin.class);
}
@Override
public void enter(NodePath<?> nodePath) {
real.enter(nodePath);
}
@Override
public void exit(NodePath<?> nodePath) {
real.exit(nodePath);
}
@Override
public NodeDependencies scan(NodeDependencies nodeDependencies) {
return real.scan(nodeDependencies);
}
}
public class MySubTypesPlugin extends AbstractPlugin<PluginConfiguration> {
private final SubTypesPlugin real;
public MySubTypesPlugin() {
super();
real = new SubTypesPlugin();
}
@Override
public Collection<Class<? extends Plugin>> getRequiredPlugins() {
return List.of(MyBackbonePlugin.class);
}
@Override
public void enter(NodePath<?> nodePath) {
real.enter(nodePath);
}
@Override
public void exit(NodePath<?> nodePath) {
real.exit(nodePath);
}
@Override
public NodeDependencies scan(NodeDependencies nodeDependencies) {
return real.scan(nodeDependencies);
}
}
public class MyModelPlugin extends AbstractPlugin<PluginConfiguration> {
private final ModelPlugin real;
public MyModelPlugin() {
super();
real = new ModelPlugin();
}
@Override
public Collection<Class<? extends Plugin>> getRequiredPlugins() {
return List.of(MyBackbonePlugin.class);
}
@Override
public void enter(NodePath<?> nodePath) {
real.enter(nodePath);
}
@Override
public void exit(NodePath<?> nodePath) {
real.exit(nodePath);
}
@Override
public NodeDependencies scan(NodeDependencies nodeDependencies) {
return real.scan(nodeDependencies);
}
}
The only drawback is that I could not avoid these amount of plugins inheritances, as If I tried to configure a BackbonePluginConfiguration with a custom JacksonObjectMapperFactory for the BackbonePlugin, which is passed to the PropertyPlugin, I need to disable the BackbonePlugin which ends up in a situation of dependencies that I could not avoid.
So far everything its working.
Thanks again for your support and answering my messages,
Best Regards,
Eduardo