Я использую проект OpendayLight md-sal для генерации Java-классов из Yang-модулей.
При переводе container-object
OpenDaylight генерирует Java-интерфейс с методами getter для всех атрибутов и соответствующим классом Builder, который дополнительно имеет методы setter.
В моем проекте мне нужно сериализовать и десериализовать Java-объекты в \ из JSON. Для этого я использую Джексона. Проблема в том, чтобы десериализовать JSON-строку, я должен аннотировать сгенерированные интерфейсы с их соответствующими классами построителя.
Например:
- У меня есть следующий контейнер в Ян:
container network {
leaf name {
type string;
}
}
- Чтобы сгенерировать из него Java, я добавил в свой
pom.xml
следующее:
<parent>
<groupId>org.opendaylight.controller</groupId>
<artifactId>mdsal-parent</artifactId>
<version>1.8.1</version>
<relativePath>../../parent</relativePath>
</parent>
<dependencies>
<dependency>
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>ietf-inet-types-2013-07-15</artifactId>
</dependency>
<dependency>
<groupId>org.opendaylight.mdsal.model</groupId>
<artifactId>ietf-interfaces</artifactId>
</dependency>
<dependencies>
- После вызова
mvn install
контейнер переводится (неважные вещи опущены):
public interface Network extends ChildOf<NetworkMod>, Augmentable<Network> {
public static final QName QNAME = $YangModuleInfoImpl.qnameOf("network");
@Nulluble
String getName();
}
public class NetworkBuilder implements Builder<Network> {
private String name;
public NetworkBuilder() {}
public NetworkBuilder(Network base) {
// implementation
}
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
@Override
public Network build() {
return new NetworkImpl(this);
}
private static final class NetworkImpl implements Network {
private final String _name;
NetworkImpl(NetworkBuilder base) {
this._name = base.getName();
}
}
}
- Для десериализации я добавляю следующие аннотации:
@JsonDeserialize(builder = NetworkBuilder.class)
public interface Network extends ChildOf<NetworkMod>, Augmentable<Network> { /* code */ }
@JsonPOJOBuilder(withPrefix = "set")
public class NetworkBuilder implements Builder<Network> { /* code */ }
Поскольку мой проект большой, я бы предпочел иметь какое-то автоматизированное решение для добавления этих аннотаций. Есть ли способ сообщить OpenDaylight (с некоторыми дополнительными флагами) генерировать такие аннотации?