Fix NPE in AbstractPathService.
Was triggering NPE when used in plain PathManager - implement PathService to inherit interface javadoc Change-Id: I345ec84ed3e61a383574fd58679fb00291b4bba0
Showing
2 changed files
with
21 additions
and
8 deletions
... | @@ -18,9 +18,6 @@ package org.onosproject.net.topology; | ... | @@ -18,9 +18,6 @@ package org.onosproject.net.topology; |
18 | import com.google.common.collect.ImmutableSet; | 18 | import com.google.common.collect.ImmutableSet; |
19 | import com.google.common.collect.Lists; | 19 | import com.google.common.collect.Lists; |
20 | import com.google.common.collect.Sets; | 20 | import com.google.common.collect.Sets; |
21 | -import org.apache.felix.scr.annotations.Component; | ||
22 | -import org.apache.felix.scr.annotations.Reference; | ||
23 | -import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
24 | import org.onosproject.net.ConnectPoint; | 21 | import org.onosproject.net.ConnectPoint; |
25 | import org.onosproject.net.DefaultDisjointPath; | 22 | import org.onosproject.net.DefaultDisjointPath; |
26 | import org.onosproject.net.DefaultEdgeLink; | 23 | import org.onosproject.net.DefaultEdgeLink; |
... | @@ -46,9 +43,12 @@ import static com.google.common.base.Preconditions.checkNotNull; | ... | @@ -46,9 +43,12 @@ import static com.google.common.base.Preconditions.checkNotNull; |
46 | 43 | ||
47 | /** | 44 | /** |
48 | * Helper class for path service. | 45 | * Helper class for path service. |
46 | + * <p> | ||
47 | + * Class inheriting this must manually initialize {@code topologyService} | ||
48 | + * and {@code hostService} fields. | ||
49 | */ | 49 | */ |
50 | -@Component(componentAbstract = true) | 50 | +public abstract class AbstractPathService |
51 | -public abstract class AbstractPathService { | 51 | + implements PathService { |
52 | 52 | ||
53 | private static final String ELEMENT_ID_NULL = "Element ID cannot be null"; | 53 | private static final String ELEMENT_ID_NULL = "Element ID cannot be null"; |
54 | private static final EdgeLink NOT_HOST = new NotHost(); | 54 | private static final EdgeLink NOT_HOST = new NotHost(); |
... | @@ -56,12 +56,11 @@ public abstract class AbstractPathService { | ... | @@ -56,12 +56,11 @@ public abstract class AbstractPathService { |
56 | private static final ProviderId PID = new ProviderId("core", "org.onosproject.core"); | 56 | private static final ProviderId PID = new ProviderId("core", "org.onosproject.core"); |
57 | private static final PortNumber P0 = PortNumber.portNumber(0); | 57 | private static final PortNumber P0 = PortNumber.portNumber(0); |
58 | 58 | ||
59 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
60 | protected TopologyService topologyService; | 59 | protected TopologyService topologyService; |
61 | 60 | ||
62 | - @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
63 | protected HostService hostService; | 61 | protected HostService hostService; |
64 | 62 | ||
63 | + @Override | ||
65 | public Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight) { | 64 | public Set<Path> getPaths(ElementId src, ElementId dst, LinkWeight weight) { |
66 | checkNotNull(src, ELEMENT_ID_NULL); | 65 | checkNotNull(src, ELEMENT_ID_NULL); |
67 | checkNotNull(dst, ELEMENT_ID_NULL); | 66 | checkNotNull(dst, ELEMENT_ID_NULL); |
... | @@ -94,6 +93,7 @@ public abstract class AbstractPathService { | ... | @@ -94,6 +93,7 @@ public abstract class AbstractPathService { |
94 | return edgeToEdgePaths(srcEdge, dstEdge, paths); | 93 | return edgeToEdgePaths(srcEdge, dstEdge, paths); |
95 | } | 94 | } |
96 | 95 | ||
96 | + @Override | ||
97 | public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight) { | 97 | public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight) { |
98 | checkNotNull(src, ELEMENT_ID_NULL); | 98 | checkNotNull(src, ELEMENT_ID_NULL); |
99 | checkNotNull(dst, ELEMENT_ID_NULL); | 99 | checkNotNull(dst, ELEMENT_ID_NULL); |
... | @@ -126,6 +126,7 @@ public abstract class AbstractPathService { | ... | @@ -126,6 +126,7 @@ public abstract class AbstractPathService { |
126 | return edgeToEdgePathsDisjoint(srcEdge, dstEdge, paths); | 126 | return edgeToEdgePathsDisjoint(srcEdge, dstEdge, paths); |
127 | } | 127 | } |
128 | 128 | ||
129 | + @Override | ||
129 | public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight, | 130 | public Set<DisjointPath> getDisjointPaths(ElementId src, ElementId dst, LinkWeight weight, |
130 | Map<Link, Object> riskProfile) { | 131 | Map<Link, Object> riskProfile) { |
131 | checkNotNull(src, ELEMENT_ID_NULL); | 132 | checkNotNull(src, ELEMENT_ID_NULL); | ... | ... |
... | @@ -18,13 +18,17 @@ package org.onosproject.net.topology.impl; | ... | @@ -18,13 +18,17 @@ package org.onosproject.net.topology.impl; |
18 | import org.apache.felix.scr.annotations.Activate; | 18 | import org.apache.felix.scr.annotations.Activate; |
19 | import org.apache.felix.scr.annotations.Component; | 19 | import org.apache.felix.scr.annotations.Component; |
20 | import org.apache.felix.scr.annotations.Deactivate; | 20 | import org.apache.felix.scr.annotations.Deactivate; |
21 | +import org.apache.felix.scr.annotations.Reference; | ||
22 | +import org.apache.felix.scr.annotations.ReferenceCardinality; | ||
21 | import org.apache.felix.scr.annotations.Service; | 23 | import org.apache.felix.scr.annotations.Service; |
22 | import org.onosproject.net.DisjointPath; | 24 | import org.onosproject.net.DisjointPath; |
23 | import org.onosproject.net.ElementId; | 25 | import org.onosproject.net.ElementId; |
24 | import org.onosproject.net.Link; | 26 | import org.onosproject.net.Link; |
25 | import org.onosproject.net.Path; | 27 | import org.onosproject.net.Path; |
28 | +import org.onosproject.net.host.HostService; | ||
26 | import org.onosproject.net.topology.LinkWeight; | 29 | import org.onosproject.net.topology.LinkWeight; |
27 | import org.onosproject.net.topology.PathService; | 30 | import org.onosproject.net.topology.PathService; |
31 | +import org.onosproject.net.topology.TopologyService; | ||
28 | import org.onosproject.net.topology.AbstractPathService; | 32 | import org.onosproject.net.topology.AbstractPathService; |
29 | import org.slf4j.Logger; | 33 | import org.slf4j.Logger; |
30 | 34 | ||
... | @@ -45,11 +49,19 @@ import static org.onosproject.security.AppPermission.Type.*; | ... | @@ -45,11 +49,19 @@ import static org.onosproject.security.AppPermission.Type.*; |
45 | @Service | 49 | @Service |
46 | public class PathManager extends AbstractPathService implements PathService { | 50 | public class PathManager extends AbstractPathService implements PathService { |
47 | 51 | ||
48 | - | ||
49 | private final Logger log = getLogger(getClass()); | 52 | private final Logger log = getLogger(getClass()); |
50 | 53 | ||
54 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
55 | + protected TopologyService topologyService; | ||
56 | + | ||
57 | + @Reference(cardinality = ReferenceCardinality.MANDATORY_UNARY) | ||
58 | + protected HostService hostService; | ||
59 | + | ||
51 | @Activate | 60 | @Activate |
52 | public void activate() { | 61 | public void activate() { |
62 | + // initialize AbstractPathService | ||
63 | + super.topologyService = this.topologyService; | ||
64 | + super.hostService = this.hostService; | ||
53 | log.info("Started"); | 65 | log.info("Started"); |
54 | } | 66 | } |
55 | 67 | ... | ... |
-
Please register or login to post a comment