[hibernate-commits] Hibernate SVN: r20805 - in search/trunk/hibernate-search/src: main/java/org/hibernate/search/engine and 1 other directories.
hibernate-commits at lists.jboss.org
hibernate-commits at lists.jboss.org
Mon Oct 11 14:20:20 EDT 2010
Author: epbernard
Date: 2010-10-11 14:20:20 -0400 (Mon, 11 Oct 2010)
New Revision: 20805
Modified:
search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapper2WayBridge.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapperBridge.java
search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java
search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/bridge/BridgeTest.java
Log:
HSEARCH-575 Better error report on bridge failure
Better method and path report
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapper2WayBridge.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapper2WayBridge.java 2010-10-11 18:19:20 UTC (rev 20804)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapper2WayBridge.java 2010-10-11 18:20:20 UTC (rev 20805)
@@ -17,8 +17,8 @@
return this;
}
- public ExceptionWrapper2WayBridge setClassAndMethod(Class<?> clazz, String path) {
- super.setClassAndMethod(clazz, path);
+ public ExceptionWrapper2WayBridge setClass(Class<?> clazz, String path) {
+ super.setClass(clazz);
return this;
}
@@ -44,4 +44,14 @@
throw buildBridgeException(e, "objectToString");
}
}
+
+ public ExceptionWrapper2WayBridge pushMethod(String name) {
+ super.pushMethod(name);
+ return this;
+ }
+
+ public ExceptionWrapper2WayBridge popMethod() {
+ super.popMethod();
+ return this;
+ }
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapperBridge.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapperBridge.java 2010-10-11 18:19:20 UTC (rev 20804)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/bridge/util/ExceptionWrapperBridge.java 2010-10-11 18:20:20 UTC (rev 20805)
@@ -6,6 +6,10 @@
import org.hibernate.search.bridge.LuceneOptions;
import org.hibernate.search.bridge.TwoWayFieldBridge;
+import java.util.ArrayList;
+import java.util.List;
+import java.util.Stack;
+
/**
* Wrap the exception with an exception provide contextual feedback
*
@@ -14,7 +18,7 @@
public class ExceptionWrapperBridge implements FieldBridge {
private FieldBridge delegate;
protected Class<?> clazz;
- protected String path;
+ protected List<String> path = new ArrayList<String>(5);
protected String fieldName;
public ExceptionWrapperBridge setFieldBridge(FieldBridge delegate) {
@@ -22,9 +26,8 @@
return this;
}
- public ExceptionWrapperBridge setClassAndMethod(Class<?> clazz, String path) {
+ public ExceptionWrapperBridge setClass(Class<?> clazz) {
this.clazz = clazz;
- this.path = path;
return this;
}
@@ -37,10 +40,14 @@
StringBuilder error = new StringBuilder("Exception while calling bridge#");
error.append(method);
if ( clazz != null ) {
- error.append("\n\tclass: ").append(clazz);
+ error.append("\n\tclass: ").append( clazz.getName() );
}
- if ( path != null ) {
- error.append("\n\tpath: ").append(path);
+ if ( path.size() > 0 ) {
+ error.append("\n\tpath: ");
+ for(String pathNode : path) {
+ error.append(pathNode).append(".");
+ }
+ error.deleteCharAt( error.length() - 1 );
}
if ( fieldName != null ) {
error.append("\n\tfield bridge: ").append(fieldName);
@@ -56,4 +63,14 @@
throw buildBridgeException(e, "set");
}
}
+
+ public ExceptionWrapperBridge pushMethod(String name) {
+ path.add(name);
+ return this;
+ }
+
+ public ExceptionWrapperBridge popMethod() {
+ path.remove( path.size() - 1 );
+ return this;
+ }
}
Modified: search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java
===================================================================
--- search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java 2010-10-11 18:19:20 UTC (rev 20804)
+++ search/trunk/hibernate-search/src/main/java/org/hibernate/search/engine/DocumentBuilderIndexedEntity.java 2010-10-11 18:20:20 UTC (rev 20805)
@@ -412,20 +412,24 @@
Store.YES,
Field.Index.NOT_ANALYZED_NO_NORMS, Field.TermVector.NO, idBoost
);
- new ExceptionWrapperBridge()
+ final ExceptionWrapperBridge contextualBridge = new ExceptionWrapperBridge()
.setFieldBridge(idBridge)
- .setClassAndMethod(entityType, null)
- .setFieldName(idKeywordName)
- .set( idKeywordName, id, doc, luceneOptions );
+ .setClass(entityType)
+ .setFieldName(idKeywordName);
+ contextualBridge.set( idKeywordName, id, doc, luceneOptions );
// finally add all other document fields
Set<String> processedFieldNames = new HashSet<String>();
- buildDocumentFields( instance, doc, metadata, fieldToAnalyzerMap, processedFieldNames );
+ buildDocumentFields( instance, doc, metadata, fieldToAnalyzerMap, processedFieldNames, contextualBridge );
return doc;
}
- private void buildDocumentFields(Object instance, Document doc, PropertiesMetadata propertiesMetadata, Map<String, String> fieldToAnalyzerMap,
- Set<String> processedFieldNames) {
+ private void buildDocumentFields(Object instance,
+ Document doc,
+ PropertiesMetadata propertiesMetadata,
+ Map<String, String> fieldToAnalyzerMap,
+ Set<String> processedFieldNames,
+ ExceptionWrapperBridge contextualBridge) {
if ( instance == null ) {
return;
}
@@ -433,14 +437,11 @@
// needed for field access: I cannot work in the proxied version
Object unproxiedInstance = HibernateHelper.unproxy( instance );
- ExceptionWrapperBridge wrapperBridge = new ExceptionWrapperBridge()
- .setClassAndMethod(beanClass, null);
-
// process the class bridges
for ( int i = 0; i < propertiesMetadata.classBridges.size(); i++ ) {
FieldBridge fb = propertiesMetadata.classBridges.get( i );
final String fieldName = propertiesMetadata.classNames.get(i);
- wrapperBridge
+ contextualBridge
.setFieldBridge(fb)
.setFieldName( fieldName )
.set(
@@ -456,14 +457,15 @@
final FieldBridge fieldBridge = propertiesMetadata.fieldBridges.get(i);
final String fieldName = propertiesMetadata.fieldNames.get(i);
- wrapperBridge
+ contextualBridge
.setFieldBridge(fieldBridge)
- .setClassAndMethod( beanClass, member.getName() )
+ .pushMethod( member.getName() )
.setFieldName( fieldName )
.set(
fieldName, value, doc,
propertiesMetadata.getFieldLuceneOptions( i, value )
);
+ contextualBridge.popMethod();
}
// allow analyzer override for the fields added by the class and field bridges
@@ -474,6 +476,7 @@
// recursively process embedded objects
for ( int i = 0; i < propertiesMetadata.embeddedGetters.size(); i++ ) {
XMember member = propertiesMetadata.embeddedGetters.get( i );
+ contextualBridge.pushMethod( member.getName() );
Object value = ReflectionHelper.getMemberValue( unproxiedInstance, member );
//TODO handle boost at embedded level: already stored in propertiesMedatada.boost
@@ -485,26 +488,26 @@
case ARRAY:
for ( Object arrayValue : ( Object[] ) value ) {
buildDocumentFields(
- arrayValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames
+ arrayValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames, contextualBridge
);
}
break;
case COLLECTION:
for ( Object collectionValue : ( Collection ) value ) {
buildDocumentFields(
- collectionValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames
+ collectionValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames, contextualBridge
);
}
break;
case MAP:
for ( Object collectionValue : ( ( Map ) value ).values() ) {
buildDocumentFields(
- collectionValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames
+ collectionValue, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames, contextualBridge
);
}
break;
case OBJECT:
- buildDocumentFields( value, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames );
+ buildDocumentFields( value, doc, embeddedMetadata, fieldToAnalyzerMap, processedFieldNames, contextualBridge );
break;
default:
throw new AssertionFailure(
@@ -512,6 +515,7 @@
+ propertiesMetadata.embeddedContainers.get( i )
);
}
+ contextualBridge.popMethod();
}
}
Modified: search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/bridge/BridgeTest.java
===================================================================
--- search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/bridge/BridgeTest.java 2010-10-11 18:19:20 UTC (rev 20804)
+++ search/trunk/hibernate-search/src/test/java/org/hibernate/search/test/bridge/BridgeTest.java 2010-10-11 18:20:20 UTC (rev 20805)
@@ -296,6 +296,8 @@
if (throwable instanceof BridgeException) {
//expected
System.out.println( throwable.getMessage() );
+ assertTrue( throwable.getMessage().contains( "class: " + Incorrect.class.getName() ) );
+ assertTrue( throwable.getMessage().contains("path: subIncorrect.name") );
tx.rollback();
}
else {
More information about the hibernate-commits
mailing list