FELIX-4973 : Relax exception handling when reading metatype XML
git-svn-id: https://svn.apache.org/repos/asf/felix/trunk@1693433 13f79535-47bb-0310-9956-ffa450edef68
diff --git a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
index 85aa0dc..fac81e1 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/MetaDataReader.java
@@ -316,7 +316,8 @@
if (getNamespaceVersion() < 13 && ocd.getAttributeDefinitions() == null)
{
// Need at least one AD in versions 1.0, 1.1 & 1.2...
- throw missingElement("AD");
+ logMissingElement("AD");
+ ocd = null;
}
break;
}
@@ -377,7 +378,8 @@
if (designate.getObject() == null)
{
// Exactly 1 Object is allowed...
- throw missingElement("Object");
+ logMissingElement("Object");
+ designate = null;
}
break;
}
@@ -405,7 +407,7 @@
readOptionalAttributes(ad, AD_ATTRIBUTES);
- Map options = new LinkedHashMap();
+ Map<String, String> options = new LinkedHashMap<String, String>();
int eventType = this.parser.next();
while (eventType != XmlPullParser.END_DOCUMENT)
{
@@ -439,7 +441,7 @@
ad.setOptions(options);
- // set value as late as possible to force an options check (FELIX-3884, FELIX-4665)...
+ // set value as late as possible to force an options check (FELIX-3884, FELIX-4665)...
if (dfltValue != null)
{
ad.setDefaultValue(dfltValue);
@@ -635,10 +637,10 @@
return new XmlPullParserException(message, this.parser, null);
}
- private XmlPullParserException missingElement(String elementName)
+ private void logMissingElement(String elementName)
{
String message = "Missing element " + elementName + " in element " + this.parser.getName();
- return new XmlPullParserException(message, this.parser, null);
+ Activator.log(LogService.LOG_ERROR, message);
}
private XmlPullParserException unexpectedElement(String elementName)
diff --git a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
index e224857..bde7c76 100644
--- a/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
+++ b/metatype/src/main/java/org/apache/felix/metatype/internal/Activator.java
@@ -21,10 +21,16 @@
import java.io.PrintStream;
import java.text.SimpleDateFormat;
-import java.util.*;
+import java.util.Date;
+import java.util.Dictionary;
+import java.util.Hashtable;
import org.apache.felix.metatype.internal.l10n.BundleResources;
-import org.osgi.framework.*;
+import org.osgi.framework.BundleActivator;
+import org.osgi.framework.BundleContext;
+import org.osgi.framework.Constants;
+import org.osgi.framework.ServiceEvent;
+import org.osgi.framework.ServiceReference;
import org.osgi.service.log.LogService;
import org.osgi.service.metatype.MetaTypeService;
import org.osgi.util.tracker.ServiceTracker;
@@ -126,7 +132,7 @@
public static void log( int level, String message )
{
- LogService log = ( LogService ) INSTANCE.logService.getService();
+ final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
if ( log == null )
{
_log( null, level, message, null );
@@ -140,7 +146,7 @@
public static void log( int level, String message, Throwable exception )
{
- LogService log = ( LogService ) INSTANCE.logService.getService();
+ final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
if ( log == null )
{
_log( null, level, message, exception );
@@ -154,7 +160,7 @@
public static void log( ServiceReference sr, int level, String message )
{
- LogService log = ( LogService ) INSTANCE.logService.getService();
+ final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
if ( log == null )
{
_log( sr, level, message, null );
@@ -168,7 +174,7 @@
public static void log( ServiceReference sr, int level, String message, Throwable exception )
{
- LogService log = ( LogService ) INSTANCE.logService.getService();
+ final LogService log = (INSTANCE == null ? null : ( LogService ) INSTANCE.logService.getService());
if ( log == null )
{
_log( sr, level, message, exception );
diff --git a/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java b/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
index 074d224..975e4b5 100644
--- a/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
+++ b/metatype/src/test/java/org/apache/felix/metatype/MetaDataReaderTest.java
@@ -24,11 +24,11 @@
import java.util.Arrays;
import java.util.List;
-import junit.framework.TestCase;
-
import org.osgi.service.metatype.AttributeDefinition;
import org.xmlpull.v1.XmlPullParserException;
+import junit.framework.TestCase;
+
/**
* The <code>MetaDataReaderTest</code> class tests the
* <code>MetaDataReader</code> class.
@@ -39,6 +39,7 @@
{
private MetaDataReader reader;
+ @Override
protected void setUp() throws Exception
{
super.setUp();
@@ -46,6 +47,7 @@
reader = new MetaDataReader();
}
+ @Override
protected void tearDown() throws Exception
{
reader = null;
@@ -184,7 +186,7 @@
}
/**
- * FELIX-4665 - Default values can be empty.
+ * FELIX-4665 - Default values can be empty.
*/
public void testAttributeWithDefaultValueOk() throws IOException, XmlPullParserException
{
@@ -221,7 +223,7 @@
}
/**
- * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
+ * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
*/
public void testOCDWithoutADFail() throws IOException, XmlPullParserException
{
@@ -231,15 +233,8 @@
String xml = "<MetaData><OCD id=\"" + ocdId + "\" name=\"" + ocdName + "\" description=\"" + ocdDescription + "\" /></MetaData>";
- try
- {
- read(xml); // should fail!
- fail("IOException expected!");
- }
- catch (IOException e)
- {
- assertTrue(e.getMessage().contains("Missing element AD"));
- }
+ final MetaData md = read(xml);
+ assertNull(md.getObjectClassDefinitions());
}
/**
@@ -269,7 +264,7 @@
}
/**
- * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
+ * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
*/
public void testDesignateWithoutObjectFail() throws IOException, XmlPullParserException
{
@@ -281,19 +276,13 @@
String xml = "<MetaData><OCD id=\"" + ocdId + "\" name=\"" + ocdName + "\" description=\"" + ocdDescription + "\"><AD id=\"attr\" type=\"String\" required=\"false\" /></OCD><Designate pid=\""
+ pid + "\" bundle=\"*\"></Designate></MetaData>";
- try
- {
- read(xml); // should fail!
- fail("IOException expected!");
- }
- catch (IOException e)
- {
- assertTrue(e.getMessage().contains("Missing element Object"));
- }
+ final MetaData md = read(xml);
+ assertNull(md.getDesignates());
+ assertEquals(1, md.getObjectClassDefinitions().size());
}
/**
- * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
+ * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
*/
public void testDesignateWithObjectOk() throws IOException, XmlPullParserException
{
@@ -326,7 +315,7 @@
}
/**
- * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
+ * FELIX-4644 - Enforce that we can only have one Object in a Designate element.
*/
public void testDesignateWithTwoObjectsFail() throws IOException, XmlPullParserException
{
@@ -350,7 +339,7 @@
}
/**
- * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
+ * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
*/
public void testMultipleFactoryDesignatesWithSamePidOk() throws IOException, XmlPullParserException
{
@@ -366,7 +355,7 @@
}
/**
- * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
+ * FELIX-4799 - tests that we can have multiple designates for the same factory PID in one MetaData configuration.
*/
public void testMultipleFactoryDesignatesWithDifferentPidsOk() throws IOException, XmlPullParserException
{