Skip to content

Commit 255d7a6

Browse files
authored
Make API depend only on jackson-annotations (#1279)
1 parent 70a30f8 commit 255d7a6

File tree

31 files changed

+383
-526
lines changed

31 files changed

+383
-526
lines changed

docker-java-api/pom.xml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<dependencies>
1919
<dependency>
2020
<groupId>com.fasterxml.jackson.core</groupId>
21-
<artifactId>jackson-databind</artifactId>
21+
<artifactId>jackson-annotations</artifactId>
2222
<version>${jackson.version}</version>
2323
</dependency>
2424

Lines changed: 11 additions & 48 deletions
Original file line numberDiff line numberDiff line change
@@ -1,25 +1,11 @@
11
package com.github.dockerjava.api.model;
22

3-
import java.io.IOException;
43
import java.io.Serializable;
5-
import java.util.ArrayList;
6-
import java.util.Iterator;
7-
import java.util.List;
4+
import java.util.stream.Stream;
85

9-
import com.fasterxml.jackson.core.JsonGenerator;
10-
import com.fasterxml.jackson.core.JsonParser;
11-
import com.fasterxml.jackson.core.JsonProcessingException;
12-
import com.fasterxml.jackson.core.ObjectCodec;
13-
import com.fasterxml.jackson.databind.DeserializationContext;
14-
import com.fasterxml.jackson.databind.JsonDeserializer;
15-
import com.fasterxml.jackson.databind.JsonNode;
16-
import com.fasterxml.jackson.databind.JsonSerializer;
17-
import com.fasterxml.jackson.databind.SerializerProvider;
18-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
19-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
6+
import com.fasterxml.jackson.annotation.JsonCreator;
7+
import com.fasterxml.jackson.annotation.JsonValue;
208

21-
@JsonSerialize(using = Binds.Serializer.class)
22-
@JsonDeserialize(using = Binds.Deserializer.class)
239
public class Binds implements Serializable {
2410
private static final long serialVersionUID = 1L;
2511

@@ -33,39 +19,16 @@ public Bind[] getBinds() {
3319
return binds;
3420
}
3521

36-
public static class Serializer extends JsonSerializer<Binds> {
37-
38-
@Override
39-
public void serialize(Binds binds, JsonGenerator jsonGen, SerializerProvider serProvider) throws IOException,
40-
JsonProcessingException {
41-
42-
//
43-
jsonGen.writeStartArray();
44-
for (Bind bind : binds.getBinds()) {
45-
jsonGen.writeString(bind.toString());
46-
}
47-
jsonGen.writeEndArray();
48-
//
49-
}
50-
22+
@JsonValue
23+
public String[] toPrimitive() {
24+
return Stream.of(binds).map(Bind::toString).toArray(String[]::new);
5125
}
5226

53-
public static class Deserializer extends JsonDeserializer<Binds> {
54-
@Override
55-
public Binds deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
56-
throws IOException, JsonProcessingException {
57-
58-
List<Bind> binds = new ArrayList<>();
59-
ObjectCodec oc = jsonParser.getCodec();
60-
JsonNode node = oc.readTree(jsonParser);
61-
for (Iterator<JsonNode> it = node.elements(); it.hasNext();) {
62-
63-
JsonNode field = it.next();
64-
binds.add(Bind.parse(field.asText()));
65-
66-
}
67-
return new Binds(binds.toArray(new Bind[0]));
68-
}
27+
@JsonCreator
28+
public static Binds fromPrimitive(String[] binds) {
29+
return new Binds(
30+
Stream.of(binds).map(Bind::parse).toArray(Bind[]::new)
31+
);
6932
}
7033

7134
}

docker-java-api/src/main/java/com/github/dockerjava/api/model/ErrorResponse.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,6 +4,7 @@
44

55
import java.io.Serializable;
66

7+
@Deprecated
78
public class ErrorResponse implements Serializable {
89
private static final long serialVersionUID = 1L;
910

docker-java-api/src/main/java/com/github/dockerjava/api/model/ExposedPort.java

Lines changed: 5 additions & 46 deletions
Original file line numberDiff line numberDiff line change
@@ -3,22 +3,10 @@
33
import static com.github.dockerjava.api.model.InternetProtocol.TCP;
44
import static com.github.dockerjava.api.model.InternetProtocol.UDP;
55

6-
import java.io.IOException;
76
import java.io.Serializable;
8-
import java.util.Map.Entry;
9-
10-
import com.fasterxml.jackson.core.JsonGenerator;
11-
import com.fasterxml.jackson.core.JsonParser;
12-
import com.fasterxml.jackson.core.JsonProcessingException;
13-
import com.fasterxml.jackson.core.ObjectCodec;
14-
import com.fasterxml.jackson.databind.DeserializationContext;
15-
import com.fasterxml.jackson.databind.JsonDeserializer;
16-
import com.fasterxml.jackson.databind.JsonNode;
17-
import com.fasterxml.jackson.databind.JsonSerializer;
18-
import com.fasterxml.jackson.databind.SerializerProvider;
19-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
21-
import com.fasterxml.jackson.databind.node.NullNode;
7+
8+
import com.fasterxml.jackson.annotation.JsonCreator;
9+
import com.fasterxml.jackson.annotation.JsonValue;
2210
import com.github.dockerjava.api.model.Ports.Binding;
2311
import lombok.EqualsAndHashCode;
2412

@@ -27,8 +15,6 @@
2715
* {@link InternetProtocol}. It can be published by Docker by {@link Ports#bind(ExposedPort, Binding) binding} it to a host port,
2816
* represented by a {@link Binding}.
2917
*/
30-
@JsonDeserialize(using = ExposedPort.Deserializer.class)
31-
@JsonSerialize(using = ExposedPort.Serializer.class)
3218
@EqualsAndHashCode
3319
public class ExposedPort implements Serializable {
3420
private static final long serialVersionUID = 1L;
@@ -120,6 +106,7 @@ public static ExposedPort udp(int port) {
120106
* @throws IllegalArgumentException
121107
* if the specification cannot be parsed
122108
*/
109+
@JsonCreator
123110
public static ExposedPort parse(String serialized) throws IllegalArgumentException {
124111
try {
125112
String[] parts = serialized.split("/");
@@ -143,36 +130,8 @@ public static ExposedPort parse(String serialized) throws IllegalArgumentExcepti
143130
* @return a string representation of this {@link ExposedPort}
144131
*/
145132
@Override
133+
@JsonValue
146134
public String toString() {
147135
return port + "/" + protocol.toString();
148136
}
149-
150-
public static class Deserializer extends JsonDeserializer<ExposedPort> {
151-
@Override
152-
public ExposedPort deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
153-
throws IOException, JsonProcessingException {
154-
ObjectCodec oc = jsonParser.getCodec();
155-
JsonNode node = oc.readTree(jsonParser);
156-
if (!node.equals(NullNode.getInstance())) {
157-
Entry<String, JsonNode> field = node.fields().next();
158-
return ExposedPort.parse(field.getKey());
159-
} else {
160-
return null;
161-
}
162-
}
163-
}
164-
165-
public static class Serializer extends JsonSerializer<ExposedPort> {
166-
167-
@Override
168-
public void serialize(ExposedPort exposedPort, JsonGenerator jsonGen, SerializerProvider serProvider)
169-
throws IOException, JsonProcessingException {
170-
171-
jsonGen.writeStartObject();
172-
jsonGen.writeFieldName(exposedPort.toString());
173-
jsonGen.writeEndObject();
174-
}
175-
176-
}
177-
178137
}
Lines changed: 15 additions & 49 deletions
Original file line numberDiff line numberDiff line change
@@ -1,27 +1,14 @@
11
package com.github.dockerjava.api.model;
22

3-
import java.io.IOException;
43
import java.io.Serializable;
5-
import java.util.ArrayList;
6-
import java.util.Iterator;
74
import java.util.List;
85
import java.util.Map;
6+
import java.util.stream.Collectors;
7+
import java.util.stream.Stream;
98

10-
import com.fasterxml.jackson.core.JsonGenerator;
11-
import com.fasterxml.jackson.core.JsonParser;
12-
import com.fasterxml.jackson.core.JsonProcessingException;
13-
import com.fasterxml.jackson.core.ObjectCodec;
14-
import com.fasterxml.jackson.databind.DeserializationContext;
15-
import com.fasterxml.jackson.databind.JsonDeserializer;
16-
import com.fasterxml.jackson.databind.JsonNode;
17-
import com.fasterxml.jackson.databind.JsonSerializer;
18-
import com.fasterxml.jackson.databind.SerializerProvider;
19-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
20-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
21-
import com.fasterxml.jackson.databind.node.NullNode;
9+
import com.fasterxml.jackson.annotation.JsonCreator;
10+
import com.fasterxml.jackson.annotation.JsonValue;
2211

23-
@JsonSerialize(using = ExposedPorts.Serializer.class)
24-
@JsonDeserialize(using = ExposedPorts.Deserializer.class)
2512
public class ExposedPorts implements Serializable {
2613
private static final long serialVersionUID = 1L;
2714

@@ -39,40 +26,19 @@ public ExposedPort[] getExposedPorts() {
3926
return exposedPorts;
4027
}
4128

42-
public static class Serializer extends JsonSerializer<ExposedPorts> {
43-
44-
@Override
45-
public void serialize(ExposedPorts exposedPorts, JsonGenerator jsonGen, SerializerProvider serProvider)
46-
throws IOException, JsonProcessingException {
47-
48-
jsonGen.writeStartObject();
49-
for (ExposedPort exposedPort : exposedPorts.getExposedPorts()) {
50-
jsonGen.writeFieldName(exposedPort.toString());
51-
jsonGen.writeStartObject();
52-
jsonGen.writeEndObject();
53-
}
54-
jsonGen.writeEndObject();
55-
}
56-
29+
@JsonCreator
30+
public static ExposedPorts fromPrimitive(Map<String, Object> object) {
31+
return new ExposedPorts(
32+
object.keySet().stream().map(ExposedPort::parse).toArray(ExposedPort[]::new)
33+
);
5734
}
5835

59-
public static class Deserializer extends JsonDeserializer<ExposedPorts> {
60-
@Override
61-
public ExposedPorts deserialize(JsonParser jsonParser, DeserializationContext deserializationContext)
62-
throws IOException, JsonProcessingException {
63-
64-
List<ExposedPort> exposedPorts = new ArrayList<>();
65-
ObjectCodec oc = jsonParser.getCodec();
66-
JsonNode node = oc.readTree(jsonParser);
67-
for (Iterator<Map.Entry<String, JsonNode>> it = node.fields(); it.hasNext();) {
68-
69-
Map.Entry<String, JsonNode> field = it.next();
70-
if (!field.getValue().equals(NullNode.getInstance())) {
71-
exposedPorts.add(ExposedPort.parse(field.getKey()));
72-
}
73-
}
74-
return new ExposedPorts(exposedPorts.toArray(new ExposedPort[0]));
75-
}
36+
@JsonValue
37+
public Map<String, Object> toPrimitive() {
38+
return Stream.of(exposedPorts).collect(Collectors.toMap(
39+
ExposedPort::toString,
40+
__ -> new Object()
41+
));
7642
}
7743

7844
}
Lines changed: 11 additions & 47 deletions
Original file line numberDiff line numberDiff line change
@@ -1,26 +1,12 @@
11
package com.github.dockerjava.api.model;
22

3-
import java.io.IOException;
43
import java.io.Serializable;
5-
import java.util.ArrayList;
6-
import java.util.Iterator;
74
import java.util.List;
5+
import java.util.stream.Stream;
86

9-
import com.fasterxml.jackson.core.JsonGenerator;
10-
import com.fasterxml.jackson.core.JsonParser;
11-
import com.fasterxml.jackson.core.JsonProcessingException;
12-
import com.fasterxml.jackson.core.ObjectCodec;
13-
import com.fasterxml.jackson.databind.DeserializationContext;
14-
import com.fasterxml.jackson.databind.JsonDeserializer;
15-
import com.fasterxml.jackson.databind.JsonNode;
16-
import com.fasterxml.jackson.databind.JsonSerializer;
17-
import com.fasterxml.jackson.databind.SerializerProvider;
18-
import com.fasterxml.jackson.databind.annotation.JsonDeserialize;
19-
import com.fasterxml.jackson.databind.annotation.JsonSerialize;
20-
import com.fasterxml.jackson.databind.node.NullNode;
7+
import com.fasterxml.jackson.annotation.JsonCreator;
8+
import com.fasterxml.jackson.annotation.JsonValue;
219

22-
@JsonSerialize(using = Links.Serializer.class)
23-
@JsonDeserialize(using = Links.Deserializer.class)
2410
public class Links implements Serializable {
2511
private static final long serialVersionUID = 1L;
2612

@@ -38,37 +24,15 @@ public Link[] getLinks() {
3824
return links;
3925
}
4026

41-
public static class Serializer extends JsonSerializer<Links> {
42-
43-
@Override
44-
public void serialize(final Links links, final JsonGenerator jsonGen, final SerializerProvider serProvider)
45-
throws IOException, JsonProcessingException {
46-
jsonGen.writeStartArray();
47-
for (final Link link : links.getLinks()) {
48-
jsonGen.writeString(link.toString());
49-
}
50-
jsonGen.writeEndArray();
51-
}
52-
27+
@JsonCreator
28+
public static Links fromPrimitive(String[] links) {
29+
return new Links(
30+
Stream.of(links).map(Link::parse).toArray(Link[]::new)
31+
);
5332
}
5433

55-
public static class Deserializer extends JsonDeserializer<Links> {
56-
57-
@Override
58-
public Links deserialize(final JsonParser jsonParser, final DeserializationContext deserializationContext)
59-
throws IOException, JsonProcessingException {
60-
final List<Link> binds = new ArrayList<>();
61-
final ObjectCodec oc = jsonParser.getCodec();
62-
final JsonNode node = oc.readTree(jsonParser);
63-
for (final Iterator<JsonNode> it = node.elements(); it.hasNext();) {
64-
65-
final JsonNode element = it.next();
66-
if (!element.equals(NullNode.getInstance())) {
67-
binds.add(Link.parse(element.asText()));
68-
}
69-
}
70-
return new Links(binds.toArray(new Link[0]));
71-
}
34+
@JsonValue
35+
public String[] toPrimitive() {
36+
return Stream.of(links).map(Link::toString).toArray(String[]::new);
7237
}
73-
7438
}

0 commit comments

Comments
 (0)