diff --git a/solr/homeDirectoryTemplate/conf/solrconfig.xml b/solr/homeDirectoryTemplate/conf/solrconfig.xml index bfe0ae889..acec3cc17 100644 --- a/solr/homeDirectoryTemplate/conf/solrconfig.xml +++ b/solr/homeDirectoryTemplate/conf/solrconfig.xml @@ -860,7 +860,7 @@ class="solr.XmlUpdateRequestHandler"> - etag + etag diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java index bb4b902ee..dcae6f6e2 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/dao/filtering/IndividualFiltering.java @@ -2,7 +2,7 @@ package edu.cornell.mannlib.vitro.webapp.dao.filtering; -import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.SOME_LITERAL; +import static edu.cornell.mannlib.vitro.webapp.auth.requestedAction.ifaces.RequestActionConstants.*; import java.sql.Timestamp; import java.util.ArrayList; @@ -58,6 +58,8 @@ public class IndividualFiltering implements Individual { public List getDataPropertyList() { List dprops = _innerIndividual.getDataPropertyList(); LinkedList outdProps = new LinkedList(); + if( dprops == null ) + return outdProps; Filter.filter(dprops,_filters.getDataPropertyFilter(), outdProps); ListIterator it = outdProps.listIterator(); @@ -83,6 +85,8 @@ public class IndividualFiltering implements Individual { // the DataProperty with statements. - jblake List outdProps = new ArrayList(); List dprops = _innerIndividual.getPopulatedDataPropertyList(); + if( dprops == null ) + return outdProps; for (DataProperty dp: dprops) { if (_filters.getDataPropertyStatementFilter().fn( new DataPropertyStatementImpl(this._innerIndividual.getURI(), dp.getURI(), SOME_LITERAL))) { @@ -106,6 +110,8 @@ public class IndividualFiltering implements Individual { private List filterDataPropertyStatements(List dStmts) { List outDstmts = new LinkedList(); + if( dStmts == null ) + return outDstmts; Filter.filter(dStmts,_filters.getDataPropertyStatementFilter(), outDstmts); return outDstmts; } @@ -114,7 +120,7 @@ public class IndividualFiltering implements Individual { public Map getDataPropertyMap() { Map innerMap = _innerIndividual.getDataPropertyMap(); if( innerMap == null ) - return null; + return Collections.emptyMap(); Map returnMap = new HashMap(); for( String key : innerMap.keySet() ){ @@ -136,8 +142,6 @@ public class IndividualFiltering implements Individual { @Override public List getObjectPropertyList() { List oprops = _innerIndividual.getObjectPropertyList(); -// List outOProps = new LinkedList(); -// Filter.filter(oprops, _filters.getObjectPropertyFilter(), outOProps); return ObjectPropertyDaoFiltering.filterAndWrap(oprops, _filters); } @@ -463,6 +467,9 @@ public class IndividualFiltering implements Individual { @Override public List getDataValues(String propertyUri) { List stmts = getDataPropertyStatements(propertyUri); + if( stmts == null ) + return Collections.emptyList(); + // Since the statements have been filtered, we can just take the data values without filtering. List dataValues = new ArrayList(stmts.size()); for (DataPropertyStatement stmt : stmts) { @@ -474,6 +481,9 @@ public class IndividualFiltering implements Individual { @Override public String getDataValue(String propertyUri) { List stmts = getDataPropertyStatements(propertyUri); + if( stmts == null) + return null; + // Since the statements have been filtered, we can just take the first data value without filtering. return stmts.isEmpty() ? null : stmts.get(0).getData(); } @@ -481,6 +491,9 @@ public class IndividualFiltering implements Individual { @Override public DataPropertyStatement getDataPropertyStatement(String propertyUri) { List stmts = getDataPropertyStatements(propertyUri); + if( stmts == null ) + return null; + // Since the statements have been filtered, we can just take the first data value without filtering. return stmts.isEmpty() ? null : stmts.get(0); } @@ -488,6 +501,9 @@ public class IndividualFiltering implements Individual { @Override public List getRelatedIndividuals(String propertyUri) { List stmts = getObjectPropertyStatements(propertyUri); + if( stmts == null) + return Collections.emptyList(); + // Since the statements have been filtered, we can just take the individuals without filtering. List relatedIndividuals = new ArrayList(stmts.size()); for (ObjectPropertyStatement stmt : stmts) { @@ -499,6 +515,9 @@ public class IndividualFiltering implements Individual { @Override public Individual getRelatedIndividual(String propertyUri) { List stmts = getObjectPropertyStatements(propertyUri); + if( stmts == null ) + return null; + // Since the statements have been filtered, we can just take the first individual without filtering. return stmts.isEmpty() ? null : stmts.get(0).getObject(); } @@ -507,4 +526,4 @@ public class IndividualFiltering implements Individual { public boolean hasThumb() { return _innerIndividual.hasThumb(); } -} \ No newline at end of file +} diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrIndexer.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrIndexer.java index 100620926..d0e8a5f98 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrIndexer.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/SolrIndexer.java @@ -4,7 +4,6 @@ package edu.cornell.mannlib.vitro.webapp.search.solr; import java.io.IOException; import java.util.HashSet; -import java.util.List; import org.apache.commons.logging.Log; import org.apache.commons.logging.LogFactory; @@ -19,7 +18,6 @@ import org.apache.solr.common.SolrInputDocument; import edu.cornell.mannlib.vitro.webapp.beans.Individual; import edu.cornell.mannlib.vitro.webapp.search.IndexingException; import edu.cornell.mannlib.vitro.webapp.search.beans.IndexerIface; -import edu.cornell.mannlib.vitro.webapp.search.docbuilder.Obj2DocIface; import edu.cornell.mannlib.vitro.webapp.search.solr.documentBuilding.IndividualToSolrDocument; @@ -159,7 +157,7 @@ public class SolrIndexer implements IndexerIface { log.debug("could not remove documents from before build, " ,e); } try { - UpdateResponse res = server.commit(); + server.commit(); } catch (Throwable e) { if( ! shutdownRequested ){ log.debug("could not commit to solr server, " + diff --git a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/documentBuilding/IndividualToSolrDocument.java b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/documentBuilding/IndividualToSolrDocument.java index 0bd4c3ef1..b42527190 100644 --- a/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/documentBuilding/IndividualToSolrDocument.java +++ b/webapp/src/edu/cornell/mannlib/vitro/webapp/search/solr/documentBuilding/IndividualToSolrDocument.java @@ -17,6 +17,7 @@ import org.apache.solr.common.SolrInputDocument; import org.joda.time.DateTime; import org.jsoup.Jsoup; +import com.hp.hpl.jena.shared.JenaException; import com.hp.hpl.jena.vocabulary.OWL; import edu.cornell.mannlib.vitro.webapp.beans.DataPropertyStatement; @@ -160,23 +161,28 @@ public class IndividualToSolrDocument { //ALLTEXT, all of the 'full text' StringBuffer allTextValue = new StringBuffer(); - //collecting data property statements - List dataPropertyStatements = ind.getDataPropertyStatements(); - if (dataPropertyStatements != null) { - Iterator dataPropertyStmtIter = dataPropertyStatements.iterator(); - while (dataPropertyStmtIter.hasNext()) { - DataPropertyStatement dataPropertyStmt = dataPropertyStmtIter.next(); - if(dataPropertyStmt.getDatapropURI().equals(label)){ // we don't want label to be added to alltext - continue; - } else if(dataPropertyStmt.getDatapropURI().equals("http://vivoweb.org/ontology/core#preferredTitle")){ - //add the preferredTitle field - String preferredTitle = null; - doc.addField(term.PREFERRED_TITLE, ((preferredTitle=dataPropertyStmt.getData()) == null)?"":preferredTitle); - log.debug("Preferred Title: " + dataPropertyStmt.getData()); + try{ + //collecting data property statements + List dataPropertyStatements = ind.getDataPropertyStatements(); + if (dataPropertyStatements != null) { + Iterator dataPropertyStmtIter = dataPropertyStatements.iterator(); + while (dataPropertyStmtIter.hasNext()) { + DataPropertyStatement dataPropertyStmt = dataPropertyStmtIter.next(); + if(dataPropertyStmt.getDatapropURI().equals(label)){ // we don't want label to be added to alltext + continue; + } else if(dataPropertyStmt.getDatapropURI().equals("http://vivoweb.org/ontology/core#preferredTitle")){ + //add the preferredTitle field + String preferredTitle = null; + doc.addField(term.PREFERRED_TITLE, ((preferredTitle=dataPropertyStmt.getData()) == null)?"":preferredTitle); + log.debug("Preferred Title: " + dataPropertyStmt.getData()); + } + allTextValue.append(" "); + allTextValue.append(((t=dataPropertyStmt.getData()) == null)?"":t); } - allTextValue.append(" "); - allTextValue.append(((t=dataPropertyStmt.getData()) == null)?"":t); } + }catch(JenaException je){ + //VIVO-15 Trap for characters that cause search indexing to abort + log.error(String.format("Continuing to index %s but could not get all dataproperties because %s",ind.getURI(),je.getMessage())); } allTextValue.append(objectNames.toString()); @@ -209,25 +215,31 @@ public class IndividualToSolrDocument { */ protected void addObjectPropertyText(Individual ind, SolrInputDocument doc, StringBuffer objectNames, StringBuffer addUri) { - List objectPropertyStatements = ind.getObjectPropertyStatements(); - if (objectPropertyStatements != null) { - Iterator objectPropertyStmtIter = objectPropertyStatements.iterator(); - while (objectPropertyStmtIter.hasNext()) { - ObjectPropertyStatement objectPropertyStmt = objectPropertyStmtIter.next(); - if( "http://www.w3.org/2002/07/owl#differentFrom".equals(objectPropertyStmt.getPropertyURI()) ){ - continue; + + try{ + List objectPropertyStatements = ind.getObjectPropertyStatements(); + if (objectPropertyStatements != null) { + Iterator objectPropertyStmtIter = objectPropertyStatements.iterator(); + while (objectPropertyStmtIter.hasNext()) { + ObjectPropertyStatement objectPropertyStmt = objectPropertyStmtIter.next(); + if( "http://www.w3.org/2002/07/owl#differentFrom".equals(objectPropertyStmt.getPropertyURI()) ){ + continue; + } + try { + objectNames.append(" "); + String t=null; + objectNames.append(((t=objectPropertyStmt.getObject().getRdfsLabel()) == null)?"":t); + addUri.append(" "); + addUri.append(((t=objectPropertyStmt.getObject().getURI()) == null)?"":t); + } catch (Exception e) { + log.debug("could not index name of related object: " + e.getMessage()); + } } - try { - objectNames.append(" "); - String t=null; - objectNames.append(((t=objectPropertyStmt.getObject().getRdfsLabel()) == null)?"":t); - addUri.append(" "); - addUri.append(((t=objectPropertyStmt.getObject().getURI()) == null)?"":t); - } catch (Exception e) { - log.debug("could not index name of related object: " + e.getMessage()); - } - } - } + } + }catch(JenaException je){ + //VIVO-15 Trap for characters that cause search indexing to abort + log.error(String.format("Continuing to index %s but could not get all object properties because %s",ind.getURI(),je.getMessage())); + } } /**