Allow disabling XML validation via configuration
The XML schema and SharePoint consistently are in disagreement in
unimportant ways. Thus, allow disabling the schema to provide a
temporary fix before the schema can be updated.
diff --git a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
index 19705fc..add21ef 100644
--- a/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
+++ b/src/com/google/enterprise/adaptor/sharepoint/SharePointAdaptor.java
@@ -187,6 +187,7 @@
= new ConcurrentSkipListMap<String, String>();
private final SiteDataFactory siteDataFactory;
private final HttpClient httpClient;
+ private boolean xmlValidation;
private NtlmAuthenticator ntlmAuthenticator;
public SharePointAdaptor() {
@@ -215,6 +216,7 @@
config.addKey("sharepoint.server", null);
config.addKey("sharepoint.username", null);
config.addKey("sharepoint.password", null);
+ config.addKey("sharepoint.xmlValidation", "true");
}
@Override
@@ -225,6 +227,8 @@
String username = config.getValue("sharepoint.username");
String password = context.getSensitiveValueDecoder().decodeValue(
config.getValue("sharepoint.password"));
+ xmlValidation = Boolean.parseBoolean(
+ config.getValue("sharepoint.xmlValidation"));
log.log(Level.CONFIG, "VirtualServer: {0}", virtualServer);
log.log(Level.CONFIG, "Username: {0}", username);
@@ -1323,7 +1327,9 @@
Source source = new StreamSource(new StringReader(xml));
try {
Unmarshaller unmarshaller = jaxbContext.createUnmarshaller();
- unmarshaller.setSchema(schema);
+ if (xmlValidation) {
+ unmarshaller.setSchema(schema);
+ }
return unmarshaller.unmarshal(source, klass).getValue();
} catch (JAXBException ex) {
throw new XmlProcessingException(ex, xml);
diff --git a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
index ac44ec7..fdb76a8 100644
--- a/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
+++ b/test/com/google/enterprise/adaptor/sharepoint/SharePointAdaptorTest.java
@@ -3334,6 +3334,22 @@
}
@Test
+ public void testDisabledValidation() throws Exception {
+ adaptor = new SharePointAdaptor(new UnsupportedSiteDataFactory(),
+ new UnsupportedHttpClient());
+ config.overrideKey("sharepoint.xmlValidation", "false");
+ adaptor.init(new MockAdaptorContext(config, null));
+ SharePointAdaptor.SiteDataClient client = adaptor.new SiteDataClient(
+ "http://localhost:1", "http://localhost:1",
+ new UnsupportedSiteData(), new UnsupportedCallable<MemberIdMapping>());
+ // Lacks required child element.
+ String xml = "<SPContentDatabase"
+ + " xmlns='http://schemas.microsoft.com/sharepoint/soap/'/>";
+ assertNotNull(client.jaxbParse(xml, SPContentDatabase.class));
+ }
+
+
+ @Test
public void testParseUnknownXml() throws Exception {
adaptor = new SharePointAdaptor(new UnsupportedSiteDataFactory(),
new UnsupportedHttpClient());