Fixed build error with JDK8. 23/28223/2
authorShigeru Yasuda <s-yasuda@da.jp.nec.com>
Fri, 9 Oct 2015 18:37:44 +0000 (03:37 +0900)
committerShigeru Yasuda <s-yasuda@da.jp.nec.com>
Fri, 9 Oct 2015 19:11:29 +0000 (04:11 +0900)
  * Fixed unit test failure with JDK8.
    JDK8 JAXB seems not to call setter method on unmarshalling if
    @XmlElement is set on property method and its type is collection
    (e.g. List).
  * Don't run enunciate with JDK8.

Change-Id: I0df9727b7a7e7298b8ec30925ef1a1cd7214bd32
Signed-off-by: Shigeru Yasuda <s-yasuda@da.jp.nec.com>
manager/implementation/src/main/java/org/opendaylight/vtn/manager/internal/inventory/xml/XmlStaticSwitchLinks.java
manager/implementation/src/test/java/org/opendaylight/vtn/manager/internal/inventory/xml/XmlStaticSwitchLinksTest.java
manager/northbound/pom.xml

index ef8d23310590c3c92ae164451b04d202efd9f275..c520211dd771c1b7c7e9a9648d3ecd6cc6db4170 100644 (file)
@@ -9,10 +9,11 @@
 package org.opendaylight.vtn.manager.internal.inventory.xml;
 
 import java.util.ArrayList;
-import java.util.HashMap;
+import java.util.Collections;
+import java.util.HashSet;
 import java.util.List;
-import java.util.Map;
 import java.util.Objects;
+import java.util.Set;
 
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
@@ -50,7 +51,8 @@ public final class XmlStaticSwitchLinks
     /**
      * A list of static inter-switch links.
      */
-    private Map<String, XmlStaticSwitchLink>  switchLinks;
+    @XmlElement(name = "static-switch-link")
+    private List<XmlStaticSwitchLink>  switchLinks;
 
     /**
      * Construct an empty instance.
@@ -72,50 +74,16 @@ public final class XmlStaticSwitchLinks
      * this instance.
      *
      * <p>
-     *   This method is provided only for JAXB.
+     *   This method is provided only for testing.
      * </p>
      *
      * @return  A list of {@link XmlStaticSwitchLink} instances or
      *          {@code null}.
      */
-    @XmlElement(name = "static-switch-link")
-    public List<XmlStaticSwitchLink> getXmlStaticSwitchLink() {
+    List<XmlStaticSwitchLink> getXmlStaticSwitchLink() {
         return (switchLinks == null)
-            ? null : new ArrayList<XmlStaticSwitchLink>(switchLinks.values());
-    }
-
-    /**
-     * Set a list of {@link XmlStaticSwitchLink} instances to this instance.
-     *
-     * <p>
-     *   This method is provided only for JAXB.
-     * </p>
-     *
-     * @param xlinks  A list of {@link XmlStaticSwitchLink} instance.
-     */
-    public void setXmlStaticSwitchLink(List<XmlStaticSwitchLink> xlinks) {
-        if (xlinks == null) {
-            switchLinks = null;
-            return;
-        }
-
-        Map<String, XmlStaticSwitchLink> map = new HashMap<>();
-        for (XmlStaticSwitchLink xlink: xlinks) {
-            if (xlink.isValid()) {
-                XmlStaticSwitchLink old = map.put(xlink.getSource(), xlink);
-                if (old != null) {
-                    LOG.warn("Ignore duplicate static link specified by XML" +
-                             ": {}", old);
-                }
-            } else {
-                LOG.warn("Ignore invalid static link specified by XML: {}",
-                         xlink);
-            }
-        }
-
-        if (!map.isEmpty()) {
-            switchLinks = map;
-        }
+            ? null
+            : Collections.unmodifiableList(switchLinks);
     }
 
     /**
@@ -123,10 +91,9 @@ public final class XmlStaticSwitchLinks
      * list of {@link XmlStaticSwitchLink} instances.
      *
      * @param swlinks  A {@link StaticSwitchLinks} instance.
-     * @return  A map which keeps {@link XmlStaticSwitchLink} instances or
-     *          {@code null}.
+     * @return  A list of {@link XmlStaticSwitchLink} instances or {@code null}.
      */
-    private Map<String, XmlStaticSwitchLink> toXmlStaticSwitchLink(
+    private List<XmlStaticSwitchLink> toXmlStaticSwitchLink(
         StaticSwitchLinks swlinks) {
         if (swlinks == null) {
             return null;
@@ -134,7 +101,8 @@ public final class XmlStaticSwitchLinks
 
         List<StaticSwitchLink> links = swlinks.getStaticSwitchLink();
         if (links != null) {
-            Map<String, XmlStaticSwitchLink> xlinks = new HashMap<>();
+            List<XmlStaticSwitchLink> xlinks = new ArrayList<>(links.size());
+            Set<String> srcSet = new HashSet<>();
             for (StaticSwitchLink link: links) {
                 XmlStaticSwitchLink xlink;
                 try {
@@ -149,9 +117,10 @@ public final class XmlStaticSwitchLinks
                 }
 
                 String src = xlink.getSource();
-                XmlStaticSwitchLink old = xlinks.put(src, xlink);
-                if (old != null) {
-                    LOG.warn("Ignore duplicate static link: ", old);
+                if (srcSet.add(src)) {
+                    xlinks.add(xlink);
+                } else {
+                    LOG.warn("Ignore duplicate static link: ", xlink);
                 }
             }
 
@@ -170,25 +139,33 @@ public final class XmlStaticSwitchLinks
      * @return  A list of {@link StaticSwitchLink} instances or {@code null}.
      */
     private List<StaticSwitchLink> getStaticSwitchLinks() {
-        if (switchLinks != null) {
-            List<StaticSwitchLink> links = new ArrayList<>();
-            for (XmlStaticSwitchLink xlink: switchLinks.values()) {
-                try {
-                    links.add(xlink.toStaticSwitchLink());
-                } catch (RuntimeException e) {
-                    // This should never happen because static links are
-                    // already verified by setXmlStaticSwitchLink().
-                    LOG.warn("Ignore invalid static link specified by XML: " +
-                             xlink, e);
+        List<StaticSwitchLink> links;
+        if (switchLinks == null) {
+            links = null;
+        } else {
+            links = new ArrayList<>();
+            Set<String> srcSet = new HashSet<>();
+            for (XmlStaticSwitchLink xlink: switchLinks) {
+                if (xlink.isValid()) {
+                    String src = xlink.getSource();
+                    if (srcSet.add(src)) {
+                        links.add(xlink.toStaticSwitchLink());
+                    } else {
+                        LOG.warn("Ignore duplicate static link specified " +
+                                 "by XML: {}", xlink);
+                    }
+                } else {
+                    LOG.warn("Ignore invalid static link specified by XML: {}",
+                             xlink);
                 }
             }
 
-            if (!links.isEmpty()) {
-                return links;
+            if (links.isEmpty()) {
+                links = null;
             }
         }
 
-        return null;
+        return links;
     }
 
     // XmlStaticTopologyConfig
index bb9349608f010fae6a3136502d25f2bc4534918f..6828689169a06e59621c143873760b76f5add9b7 100644 (file)
@@ -14,8 +14,6 @@ import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.verifyNoMoreInteractions;
 import static org.mockito.Mockito.when;
 
-import static org.opendaylight.vtn.manager.internal.inventory.xml.XmlStaticSwitchLinkTest.newXmlStaticSwitchLink;
-
 import java.io.File;
 import java.util.ArrayList;
 import java.util.HashSet;
@@ -148,9 +146,9 @@ public class XmlStaticSwitchLinksTest extends TestBase {
         goodLinks.add(swlink);
         links.add(swlink);
 
-        // The source port will be overriden.
         String src = "openflow:99:1";
         swlink = newStaticSwitchLink(src, "openflow:10:11");
+        goodLinks.add(swlink);
         links.add(swlink);
 
         swlink = newStaticSwitchLink("unknown:1:2", "openflow:1:99");
@@ -162,9 +160,8 @@ public class XmlStaticSwitchLinksTest extends TestBase {
         badLinks.add(swlink);
         links.add(swlink);
 
-        // Override the source port "openflow:99:1".
+        // Duplicate source port "openflow:99:1".
         swlink = newStaticSwitchLink(src, "openflow:888:999");
-        goodLinks.add(swlink);
         links.add(swlink);
 
         swlinks = new StaticSwitchLinksBuilder().
@@ -185,130 +182,6 @@ public class XmlStaticSwitchLinksTest extends TestBase {
         assertTrue(goodLinks.isEmpty());
     }
 
-    /**
-     * Test case for {@link XmlStaticSwitchLinks#getXmlStaticSwitchLink()} and
-     * {@link XmlStaticSwitchLinks#setXmlStaticSwitchLink(List)}.
-     *
-     * @throws Exception  An error occurred.
-     */
-    @Test
-    public void testXmlStaticSwitchLink() throws Exception {
-        StaticSwitchLinks swlinks = new StaticSwitchLinksBuilder().build();
-        XmlStaticSwitchLinks xswlinks = new XmlStaticSwitchLinks(swlinks);
-        assertEquals(null, xswlinks.getXmlStaticSwitchLink());
-
-        for (List<StaticSwitchLink> links: createStaticSwitchLinks(false)) {
-            Set<XmlStaticSwitchLink> xlset = new HashSet<>();
-            for (StaticSwitchLink swlink: links) {
-                xlset.add(new XmlStaticSwitchLink(swlink));
-            }
-
-            List<XmlStaticSwitchLink> xlinks = new ArrayList<>(xlset);
-            xswlinks.setXmlStaticSwitchLink(xlinks);
-            xlinks = xswlinks.getXmlStaticSwitchLink();
-            if (xlset.isEmpty()) {
-                assertEquals(null, xlinks);
-            } else {
-                for (XmlStaticSwitchLink xlink: xlinks) {
-                    assertEquals(true, xlset.remove(xlink));
-                }
-                assertTrue(xlset.isEmpty());
-            }
-        }
-
-        xswlinks.setXmlStaticSwitchLink(null);
-        assertEquals(null, xswlinks.getXmlStaticSwitchLink());
-        xswlinks.setXmlStaticSwitchLink(new ArrayList<XmlStaticSwitchLink>());
-        assertEquals(null, xswlinks.getXmlStaticSwitchLink());
-
-        // Ensure that invalid static links are eliminated.
-        List<XmlStaticSwitchLink> xlinks = new ArrayList<>();
-        List<XmlStaticSwitchLink> badLinks = new ArrayList<>();
-        Set<XmlStaticSwitchLink> goodLinks = new HashSet<>();
-        XmlStaticSwitchLink xlink =
-            newXmlStaticSwitchLink("openflow:1:2", "openflow:2:2");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // Empty link.
-        xlink = newXmlStaticSwitchLink(null, null);
-        badLinks.add(xlink);
-        xlinks.add(xlink);
-
-        xlink = newXmlStaticSwitchLink("openflow:1:3", "openflow:2:1");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // Source port is null.
-        xlink = newXmlStaticSwitchLink(null, "openflow:2:10");
-        badLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // Source port is empty.
-        xlink = newXmlStaticSwitchLink("", "openflow:2:10");
-        badLinks.add(xlink);
-        xlinks.add(xlink);
-
-        xlink = newXmlStaticSwitchLink("proto:1:3", "proto:2:1");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // Destination port is null.
-        xlink = newXmlStaticSwitchLink("proto:1:3", null);
-        badLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // Source port is empty.
-        xlink = newXmlStaticSwitchLink("proto:1:3", "");
-        badLinks.add(xlink);
-        xlinks.add(xlink);
-
-        xlink = newXmlStaticSwitchLink("openflow:10:10", "openflow:20:20");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // The source port will be overridden.
-        String src = "openflow:100:1";
-        xlink = newXmlStaticSwitchLink(src, "openflow:100:200");
-        xlinks.add(xlink);
-
-        xlink = newXmlStaticSwitchLink("openflow:10:11", "openflow:20:21");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        // The destination port is the same as the source.
-        String[] ports = {
-            "openflow:1:2", "openflow:1:3", src, "openflow:123:456",
-        };
-        for (String port: ports) {
-            xlink = newXmlStaticSwitchLink(port, port);
-            badLinks.add(xlink);
-            xlinks.add(xlink);
-        }
-
-        // Override the source port "openflow:100:1".
-        for (String port: ports) {
-            xlink = newXmlStaticSwitchLink(src, port);
-            xlinks.add(xlink);
-        }
-
-        xlink = newXmlStaticSwitchLink(src, "openflow:12345:678");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        xlink = newXmlStaticSwitchLink("unknown:1", "unknown:2");
-        goodLinks.add(xlink);
-        xlinks.add(xlink);
-
-        xswlinks.setXmlStaticSwitchLink(badLinks);
-        assertEquals(null, xswlinks.getXmlStaticSwitchLink());
-        xswlinks.setXmlStaticSwitchLink(xlinks);
-        for (XmlStaticSwitchLink xl: xswlinks.getXmlStaticSwitchLink()) {
-            assertEquals(true, goodLinks.remove(xl));
-        }
-        assertTrue(goodLinks.isEmpty());
-    }
-
     /**
      * Test case for {@link XmlStaticSwitchLinks#equals(Object)} and
      * {@link XmlStaticSwitchLinks#hashCode()}.
@@ -409,9 +282,10 @@ public class XmlStaticSwitchLinksTest extends TestBase {
         goodLinks.add(newStaticSwitchLink(src, dst));
         xlinks.add(xlink);
 
-        // The source port will be overridden.
         String dupSrc = "openflow:123:456";
-        xlink = createXmlLink(dupSrc, "openflow:111:222");
+        dst = "openflow:111:222";
+        xlink = createXmlLink(dupSrc, dst);
+        goodLinks.add(newStaticSwitchLink(dupSrc, dst));
         xlinks.add(xlink);
 
         src = "unknown:1:3";
@@ -430,14 +304,13 @@ public class XmlStaticSwitchLinksTest extends TestBase {
             badLinks.add(xlink);
             xlinks.add(xlink);
 
-            // Override the source port "openflow:123:456".
+            // Duplicate source port "openflow:123:456" will be ignored.
             xlink = createXmlLink(dupSrc, port);
             xlinks.add(xlink);
         }
 
-        dst = "openflow:555:678";
-        xlink = createXmlLink(dupSrc, dst);
-        goodLinks.add(newStaticSwitchLink(dupSrc, dst));
+        // Duplicate source port "openflow:123:456" will be ignored.
+        xlink = createXmlLink(dupSrc, "openflow:555:678");
         xlinks.add(xlink);
 
         for (int i = 1; i <= 5; i++) {
index 7c82480720ac5ffb84bd325f95699c6ccad6f6d5..25f921dea047745521db240fe733b8cc57cb0dfc 100644 (file)
   </properties>
 
   <profiles>
+    <!-- enunciate does not support JDK8 -->
+    <profile>
+      <id>skip-enunciate</id>
+      <activation>
+        <jdk>1.8</jdk>
+      </activation>
+      <properties>
+        <enunciate.skip>true</enunciate.skip>
+      </properties>
+    </profile>
+
     <!-- Build REST API document only if docs profile is activated -->
     <profile>
       <id>docs</id>