/* * Copyright 2000-2013 Enonic AS * http://www.enonic.com/license */ package com.enonic.cms.core.search.facet.model; import java.io.StringReader; import java.util.List; import javax.xml.bind.JAXBContext; import javax.xml.bind.Unmarshaller; import javax.xml.bind.ValidationEvent; import com.enonic.cms.core.search.facet.FacetQueryException; public final class FacetsModelFactory { public FacetsModel buildFromXml( String xml ) { Object unmarshal; final CustomValidationEventHandler customValidationEventHandler = new CustomValidationEventHandler(); try { final JAXBContext context = JAXBContext.newInstance( FacetsModel.class ); final Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setEventHandler( customValidationEventHandler ); unmarshal = unmarshaller.unmarshal( new StringReader( xml ) ); } catch ( Exception e ) { throw new FacetQueryException( "Could not build facets from xml", e ); } handlerValidationErrors( customValidationEventHandler ); return (FacetsModel) unmarshal; } private void handlerValidationErrors( final CustomValidationEventHandler customValidationEventHandler ) { final List<ValidationEvent> errors = customValidationEventHandler.getErrors(); if ( !errors.isEmpty() ) { StringBuilder errorBuilder = new StringBuilder(); for ( ValidationEvent error : errors ) { errorBuilder.append( error.getMessage() + "\n" ); } throw new FacetQueryException( "Failed to build facet: " + errorBuilder.toString() ); } } }