diff --git a/ccm-cms/pom.xml b/ccm-cms/pom.xml
index 47dbe4405..e869238ca 100644
--- a/ccm-cms/pom.xml
+++ b/ccm-cms/pom.xml
@@ -71,6 +71,15 @@
provided
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-json-provider
+
+
+ com.fasterxml.jackson.jaxrs
+ jackson-jaxrs-xml-provider
+
+
org.apache.logging.log4j
@@ -350,7 +359,7 @@
findbugs-maven-plugin
3.0.5
-
+
com.github.spotbugs
spotbugs-maven-plugin
3.1.0-RC8
diff --git a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/ItemListComponentForm.java b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/ItemListComponentForm.java
index 12cd221bc..b02f12f2b 100644
--- a/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/ItemListComponentForm.java
+++ b/ccm-cms/src/main/java/com/arsdigita/cms/ui/pagemodel/ItemListComponentForm.java
@@ -142,7 +142,9 @@ public class ItemListComponentForm
final ItemListComponent component = getComponentModel();
- if (component != null) {
+ if (component == null) {
+ pageSizeField.setValue(state, "30");
+ }else {
final Object[] descendingValue;
if (component.isDescending()) {
descendingValue = new Object[]{DESCENDING};
diff --git a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java
index af34e5895..0742dbdb9 100644
--- a/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java
+++ b/ccm-cms/src/main/java/org/librecms/pages/PagesRouter.java
@@ -20,6 +20,10 @@ package org.librecms.pages;
import com.arsdigita.kernel.KernelConfig;
+import com.fasterxml.jackson.core.JsonProcessingException;
+import com.fasterxml.jackson.databind.ObjectMapper;
+import com.fasterxml.jackson.dataformat.xml.JacksonXmlModule;
+import com.fasterxml.jackson.dataformat.xml.XmlMapper;
import org.libreccm.categorization.Category;
import org.libreccm.categorization.CategoryRepository;
import org.libreccm.configuration.ConfigurationManager;
@@ -43,6 +47,7 @@ import javax.enterprise.context.RequestScoped;
import javax.inject.Inject;
import javax.transaction.Transactional;
import javax.ws.rs.DefaultValue;
+import javax.ws.rs.GET;
import javax.ws.rs.NotFoundException;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
@@ -61,7 +66,8 @@ import static org.librecms.pages.PagesConstants.*;
* @author Jens Pelzetter
*/
@RequestScoped
-@Path("/{page:.+}")
+//@Path("/{page:.+}")
+@Path("/")
public class PagesRouter {
@Inject
@@ -99,6 +105,272 @@ public class PagesRouter {
.findConfiguration(KernelConfig.class);
defaultLocale = kernelConfig.getDefaultLocale();
}
+
+ @GET
+ @Path("/")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Response getIndexPage(@Context UriInfo uriInfo) {
+
+ final String domain = uriInfo.getBaseUri().getHost();
+ final Pages pages = getPages(domain);
+ final Category category = getCategory(domain, pages, "/");
+
+ final Locale negoidatedLocale = globalizationHelper
+ .getNegotiatedLocale();
+
+ final String language;
+ if (category.getTitle().hasValue(negoidatedLocale)) {
+ language = negoidatedLocale.toString();
+ } else if (category.getTitle().hasValue(defaultLocale)) {
+ language = defaultLocale.toString();
+ } else {
+ throw new NotFoundException();
+ }
+
+ final String indexPage = String.format("/index.%s.html", language);
+ final URI uri = uriInfo.getBaseUriBuilder().path(indexPage).build();
+ return Response.temporaryRedirect(uri).build();
+ }
+
+ @GET
+ @Path("/index.html")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Response getIndexPageAsHtml(@Context final UriInfo uriInfo) {
+
+ final String domain = uriInfo.getBaseUri().getHost();
+ final Pages pages = getPages(domain);
+ final Category category = getCategory(domain, pages, "/");
+
+ final Locale negoiatedLocale = globalizationHelper
+ .getNegotiatedLocale();
+ final String language;
+ if (category.getTitle().hasValue(negoiatedLocale)) {
+ language = negoiatedLocale.toString();
+ } else if (category.getTitle().hasValue(defaultLocale)) {
+ language = defaultLocale.toString();
+ } else {
+ throw new NotFoundException();
+ }
+
+ final String indexPage = String.format("/index.%s.html", language);
+ final String path = uriInfo.getPath().replace("index.html", indexPage);
+
+ final URI uri = uriInfo.getBaseUriBuilder().replacePath(path).build();
+ return Response.temporaryRedirect(uri).build();
+ }
+
+ @GET
+ @Path("/index.{lang}.html")
+ @Produces("text/html")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String getIndexPageAsHtml(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("theme")
+ @DefaultValue("--DEFAULT--")
+ final String theme,
+ @QueryParam("theme-version")
+ @DefaultValue("LIVE")
+ final String themeVersion,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE") final String pageModelVersion) {
+
+ final Map buildResult = getCategoryIndexPage(
+ uriInfo, "/", language, pageModelVersion);
+ final Site site = getSite(uriInfo);
+ final ThemeInfo themeInfo = getTheme(site, theme, themeVersion);
+
+ return themes.process(buildResult, themeInfo);
+ }
+
+ @GET
+ @Path("/index.{lang}.json")
+ @Produces("text/json")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String getIndexPageAsJson(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE")
+ final String pageModelVersion) {
+
+ final ObjectMapper mapper = new ObjectMapper();
+
+ try {
+ return mapper
+ .writeValueAsString(getCategoryIndexPage(uriInfo,
+ "/",
+ language,
+ pageModelVersion));
+ } catch (JsonProcessingException ex) {
+ throw new WebApplicationException(ex);
+ }
+// return getCategoryIndexPage(uriInfo, "/", language, pageModelVersion);
+ }
+
+ @GET
+ @Path("/index.{lang}.xml")
+ @Produces("text/xml")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String getIndexPageAsXml(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE")
+ final String pageModelVersion) {
+
+ final JacksonXmlModule xmlModule = new JacksonXmlModule();
+ final ObjectMapper mapper = new XmlMapper(xmlModule);
+
+ try {
+ return mapper
+ .writeValueAsString(getCategoryIndexPage(uriInfo, "/",
+ language,
+ pageModelVersion));
+ } catch (JsonProcessingException ex) {
+ throw new WebApplicationException(ex);
+ }
+// return getCategoryIndexPage(uriInfo, "/", language, pageModelVersion);
+ }
+
+ @GET
+ @Path("/{name}")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Response getRootItemPage(
+ @Context final UriInfo uriInfo,
+ @PathParam("name") final String itemName) {
+
+ final String domain = uriInfo.getBaseUri().getHost();
+ final Pages pages = getPages(domain);
+ final Category category = getCategory(domain, pages, "/");
+
+ final Locale negoiatedLocale = globalizationHelper
+ .getNegotiatedLocale();
+
+ final String language;
+ if (category.getTitle().hasValue(negoiatedLocale)) {
+ language = negoiatedLocale.toString();
+ } else if (category.getTitle().hasValue(defaultLocale)) {
+ language = defaultLocale.toString();
+ } else {
+ throw new NotFoundException();
+ }
+
+ final String itemPage = String.format("/%s.%s.html", itemName, language);
+ final URI uri = uriInfo.getBaseUriBuilder().path(itemPage).build();
+ return Response.temporaryRedirect(uri).build();
+ }
+
+ @GET
+ @Path("/{name}.html")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Response getRootItemPageAsHtml(
+ @Context final UriInfo uriInfo,
+ @PathParam("name") final String itemName) {
+
+ final String domain = uriInfo.getBaseUri().getHost();
+ final Pages pages = getPages(domain);
+ final Category category = getCategory(domain, pages, "/");
+
+ final Locale negoiatedLocale = globalizationHelper
+ .getNegotiatedLocale();
+
+ final String language;
+ if (category.getTitle().hasValue(negoiatedLocale)) {
+ language = negoiatedLocale.toString();
+ } else if (category.getTitle().hasValue(defaultLocale)) {
+ language = defaultLocale.toString();
+ } else {
+ throw new NotFoundException();
+ }
+
+ final String itemPage = String.format("/%s.%s.html", itemName, language);
+ final String path = uriInfo
+ .getPath()
+ .replace(String.format("%s.html", itemName), itemPage);
+
+ final URI uri = uriInfo.getBaseUriBuilder().replacePath(path).build();
+ return Response.temporaryRedirect(uri).build();
+ }
+
+ @GET
+ @Path("/{name}.{lang}.html")
+ @Produces("text/html")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public String getRootItemPageAsHtml(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("name")
+ final String itemName,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("theme")
+ @DefaultValue("--DEFAULT--")
+ final String theme,
+ @QueryParam("theme-version")
+ @DefaultValue("LIVE")
+ final String themeVersion,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE")
+ final String pageModelVersion) {
+
+ final Map buildResult = getCategoryItemPage(
+ uriInfo, "/", itemName, language, pageModelVersion);
+ final Site site = getSite(uriInfo);
+ final ThemeInfo themeInfo = getTheme(site, "/", themeVersion);
+
+ return themes.process(buildResult, themeInfo);
+ }
+
+ @GET
+ @Path("/{name}.{lang}.json")
+ @Produces("text/json")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Map getRootItemPageAsJson(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("name")
+ final String itemName,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE")
+ final String pageModelVersion) {
+
+ return getCategoryItemPage(uriInfo,
+ "/",
+ itemName,
+ language,
+ pageModelVersion);
+ }
+
+ @GET
+ @Path("/{name}.{lang}.xml")
+ @Produces("text/xml")
+ @Transactional(Transactional.TxType.REQUIRED)
+ public Map getItemPageAsXml(
+ @Context
+ final UriInfo uriInfo,
+ @PathParam("name")
+ final String itemName,
+ @PathParam("lang")
+ final String language,
+ @QueryParam("pagemodel-version")
+ @DefaultValue("LIVE")
+ final String pageModelVersion) {
+
+ return getCategoryItemPage(uriInfo,
+ "/",
+ itemName,
+ language,
+ pageModelVersion);
+ }
/**
* Retrieve the index page of a category. Redirects to
@@ -109,7 +381,9 @@ public class PagesRouter {
*
* @return
*/
- @Path("/")
+ @GET
+ @Path("/{page:.+}/")
+ @Transactional(Transactional.TxType.REQUIRED)
public Response getCategoryIndexPage(
@Context
final UriInfo uriInfo,
@@ -146,7 +420,9 @@ public class PagesRouter {
*
* @return
*/
- @Path("/index.html")
+ @GET
+ @Path("/{page:.+}/index.html")
+ @Transactional(Transactional.TxType.REQUIRED)
public Response getCategoryIndexPageAsHtml(
@Context
final UriInfo uriInfo,
@@ -187,7 +463,8 @@ public class PagesRouter {
*
* @return The HTML representation of the index page.
*/
- @Path("/index.{lang}.html")
+ @GET
+ @Path("/{page:.+}/index.{lang}.html")
@Produces("text/html")
@Transactional(Transactional.TxType.REQUIRED)
public String getCategoryIndexPageAsHtml(
@@ -225,7 +502,8 @@ public class PagesRouter {
*
* @return
*/
- @Path("/index.{lang}.json")
+ @GET
+ @Path("/{page:.+}/index.{lang}.json")
@Produces("text/json")
@Transactional(Transactional.TxType.REQUIRED)
public Map getCategoryIndexPageAsJson(
@@ -252,7 +530,8 @@ public class PagesRouter {
*
* @return
*/
- @Path("/index.{lang}.xml")
+ @GET
+ @Path("/{page:.+}/index.{lang}.xml")
@Produces("text/xml")
@Transactional(Transactional.TxType.REQUIRED)
public Map getCategoryIndexPageAsXml(
@@ -282,7 +561,9 @@ public class PagesRouter {
*
* @return
*/
- @Path("/{name}")
+ @GET
+ @Path("/{page:.+}/{name}")
+ @Transactional(Transactional.TxType.REQUIRED)
public Response getItemPage(
@Context final UriInfo uriInfo,
@PathParam("page") final String page,
@@ -320,7 +601,9 @@ public class PagesRouter {
*
* @return
*/
- @Path("/{name}.html")
+ @GET
+ @Path("/{page:.+}/{name}.html")
+ @Transactional(Transactional.TxType.REQUIRED)
public Response getItemPageAsHtml(
@Context final UriInfo uriInfo,
@PathParam("page") final String page,
@@ -365,7 +648,9 @@ public class PagesRouter {
*
* @return
*/
- @Path("/{name}.{lang}.html")
+ @GET
+ @Path("/{page:.+}/{name}.{lang}.html")
+ @Transactional(Transactional.TxType.REQUIRED)
public String getItemPageAsHtml(
@Context
final UriInfo uriInfo,
@@ -405,8 +690,10 @@ public class PagesRouter {
*
* @return
*/
- @Path("/{name}.{lang}.json")
+ @GET
+ @Path("/{page:.+}/{name}.{lang}.json")
@Produces("text/json")
+ @Transactional(Transactional.TxType.REQUIRED)
public Map getItemPageAsJson(
@Context
final UriInfo uriInfo,
@@ -439,8 +726,10 @@ public class PagesRouter {
*
* @return
*/
- @Path("/{name}.{lang}.xml")
+ @GET
+ @Path("/{page:.+}/{name}.{lang}.xml")
@Produces("text/xml")
+ @Transactional(Transactional.TxType.REQUIRED)
public Map getItemPageAsXml(
@Context
final UriInfo uriInfo,
@@ -513,8 +802,8 @@ public class PagesRouter {
.orElseThrow(() -> new WebApplicationException(
String.format("The configured default theme \"%s\" for "
+ "site \"%s\" is not available.",
- site.getDomainOfSite(),
- site.getDefaultTheme()),
+ site.getDefaultTheme(),
+ site.getDomainOfSite()),
Response.Status.INTERNAL_SERVER_ERROR));
} else {
return themes.getTheme(theme,
@@ -578,8 +867,8 @@ public class PagesRouter {
final PageModel pageModel;
if ("DRAFT".equals(pageModelVersion)) {
- pageModel = pageModelManager.getDraftVersion(page
- .getIndexPageModel());
+ pageModel = pageModelManager
+ .getDraftVersion(page.getIndexPageModel());
} else {
pageModel = pageModelManager
.getLiveVersion(page.getIndexPageModel())
diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/ApplicationTreeDataProvider.java b/ccm-core/src/main/java/org/libreccm/admin/ui/ApplicationTreeDataProvider.java
index f4b113275..5abd5678b 100644
--- a/ccm-core/src/main/java/org/libreccm/admin/ui/ApplicationTreeDataProvider.java
+++ b/ccm-core/src/main/java/org/libreccm/admin/ui/ApplicationTreeDataProvider.java
@@ -30,10 +30,6 @@ import org.libreccm.web.ApplicationType;
import org.libreccm.web.CcmApplication;
import java.util.List;
-import java.util.Locale;
-import java.util.Map;
-import java.util.ResourceBundle;
-import java.util.stream.Collectors;
import java.util.stream.Stream;
import javax.inject.Inject;
@@ -64,6 +60,7 @@ class ApplicationTreeDataProvider
rootNode = new ApplicationTreeNode();
rootNode.setNodeId(ApplicationTreeNode.ROOT);
rootNode.setNodeType(ApplicationTreeNodeType.ROOT_NODE);
+ rootNode.setTitle("/");
}
@Transactional(Transactional.TxType.REQUIRED)
diff --git a/ccm-core/src/main/java/org/libreccm/admin/ui/PageModelsTab.java b/ccm-core/src/main/java/org/libreccm/admin/ui/PageModelsTab.java
index 55f935bc7..0b5f4feb1 100644
--- a/ccm-core/src/main/java/org/libreccm/admin/ui/PageModelsTab.java
+++ b/ccm-core/src/main/java/org/libreccm/admin/ui/PageModelsTab.java
@@ -56,9 +56,7 @@ class PageModelsTab extends CustomComponent {
final Tree applicationTree = new Tree<>(
adminViewController.getApplicationTreeDataProvider());
-
applicationTree.setItemCaptionGenerator(ApplicationTreeNode::getTitle);
-
applicationTree.setItemCollapseAllowedProvider(node -> {
return !node.getNodeType().equals(ApplicationTreeNodeType.ROOT_NODE);
});
@@ -99,27 +97,41 @@ class PageModelsTab extends CustomComponent {
.addComponentColumn(row -> buildDeleteButton(row,
adminViewController))
.setId(COL_DELETE);
-
pageModelsGrid.setVisible(false);
+ pageModelsGrid.setWidth("100%");
final Label placeholder = new Label(localizedTextsUtil.getText(
"ui.admin.pagemodels.select_application"));
final VerticalLayout layout = new VerticalLayout(pageModelsGrid,
placeholder);
+ layout.setWidth("100%");
applicationTree.addItemClickListener(event -> {
- final PageModelsTableDataProvider dataProvider
- = (PageModelsTableDataProvider) pageModelsGrid
- .getDataProvider();
- dataProvider.setApplicationUuid(event.getItem().getNodeId());
- pageModelsGrid.setVisible(true);
- placeholder.setVisible(false);
+
+ final ApplicationTreeNode node = event.getItem();
+ final ApplicationTreeNodeType nodeType = node.getNodeType();
+
+ if (nodeType == ApplicationTreeNodeType.APPLICATION_NODE
+ || nodeType
+ == ApplicationTreeNodeType.SINGLETON_APPLICATION_NODE) {
+ final PageModelsTableDataProvider dataProvider
+ = (PageModelsTableDataProvider) pageModelsGrid
+ .getDataProvider();
+ dataProvider.setApplicationUuid(node.getNodeId());
+ pageModelsGrid.setVisible(true);
+ placeholder.setVisible(false);
+ } else {
+ pageModelsGrid.setVisible(false);
+ placeholder.setVisible(true);
+ }
});
+ final VerticalLayout treeLayout = new VerticalLayout(applicationTree);
+
final HorizontalSplitPanel panel = new HorizontalSplitPanel(
- applicationTree, layout);
- panel.setSplitPosition(33.0f);
+ treeLayout, layout);
+ panel.setSplitPosition(20.0f);
super.setCompositionRoot(panel);
}
diff --git a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java
index 9251a0320..bbae30082 100644
--- a/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java
+++ b/ccm-core/src/main/java/org/libreccm/categorization/CategoryRepository.java
@@ -160,6 +160,9 @@ public class CategoryRepository extends AbstractEntityRepository
+ "domain \"{}\".",
normalizedPath,
domain.getDomainKey());
+ if (normalizedPath.isEmpty()) {
+ return Optional.of(domain.getRoot());
+ }
final String[] tokens = normalizedPath.split("/");
Category current = domain.getRoot();
for (final String token : tokens) {
diff --git a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java
index 53842507a..ce99ac234 100644
--- a/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java
+++ b/ccm-core/src/main/java/org/libreccm/theming/StaticThemeProvider.java
@@ -194,11 +194,11 @@ public class StaticThemeProvider implements ThemeProvider {
Objects.requireNonNull(theme);
final String manifestJsonPath = String.format("/" + THEMES_PACKAGE
- + "%s/"
+ + "/%s/"
+ THEME_MANIFEST_JSON,
theme);
final String manifestXmlPath = String.format("/" + THEMES_PACKAGE
- + "%s/"
+ + "/%s/"
+ THEME_MANIFEST_XML,
theme);
@@ -227,11 +227,11 @@ public class StaticThemeProvider implements ThemeProvider {
Objects.requireNonNull(theme);
final String manifestJsonPath = String.format("/" + THEMES_PACKAGE
- + "%s/"
+ + "/%s/"
+ THEME_MANIFEST_JSON,
theme);
final String manifestXmlPath = String.format("/" + THEMES_PACKAGE
- + "%s/"
+ + "/%s/"
+ THEME_MANIFEST_XML,
theme);
diff --git a/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java b/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java
index b6d6a81c7..865c4f05e 100644
--- a/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java
+++ b/ccm-core/src/main/java/org/libreccm/theming/xslt/XsltThemeProcessor.java
@@ -39,7 +39,7 @@ import javax.xml.parsers.ParserConfigurationException;
import static org.libreccm.theming.ThemeConstants.*;
-import org.libreccm.theming.ThemeVersion;
+import org.libreccm.theming.ProcessesThemes;
import org.libreccm.theming.manifest.ThemeTemplate;
import java.io.InputStream;
@@ -50,7 +50,6 @@ import java.io.UnsupportedEncodingException;
import java.util.Optional;
import javax.xml.transform.Result;
-import javax.xml.transform.Source;
import javax.xml.transform.Transformer;
import javax.xml.transform.TransformerConfigurationException;
import javax.xml.transform.TransformerException;
@@ -64,6 +63,7 @@ import javax.xml.transform.stream.StreamSource;
*
* @author Jens Pelzetter
*/
+@ProcessesThemes("xsl")
@RequestScoped
public class XsltThemeProcessor implements ThemeProcessor {
diff --git a/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css b/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css
index fdc3a0de9..634479040 100644
--- a/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css
+++ b/ccm-core/src/main/resources/VAADIN/themes/ccm-core/styles.css
@@ -1081,7 +1081,7 @@
*/
.v-vaadin-version:after {
- content: "8.1.6";
+ content: "8.1.7";
}
.v-widget {
@@ -1172,7 +1172,7 @@
overflow: auto;
}
-.v-assistive-device-only {
+.v-assistive-device-only, .v-assistive-device-only-label label {
position: absolute;
top: -2000px;
left: -2000px;
diff --git a/pom.xml b/pom.xml
index 5b3af1e08..e0516199f 100644
--- a/pom.xml
+++ b/pom.xml
@@ -272,7 +272,7 @@
com.vaadin
vaadin-maven-plugin
- 8.1.6
+ 8.1.7
@@ -422,7 +422,7 @@
com.vaadin
vaadin-bom
- 8.1.6
+ 8.1.7
import
pom
@@ -606,10 +606,17 @@
1.2
+
+ com.fasterxml.jackson
+ jackson-bom
+ 2.9.0
+ import
+ pom
+
-
+
+ -->
+
+
+ -->
+
+
org.codehaus.woodstox
woodstox-core-asl
4.4.1
-
+
+