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()));
+ }
}
/**