Fixed untestable exception and added tests
This commit is contained in:
parent
2d383ff50e
commit
729963967a
|
@ -62,11 +62,7 @@ public class TPQConfigBuilder<T> {
|
||||||
Validate.notNull(resultBuilder,"Can't build with null builder.");
|
Validate.notNull(resultBuilder,"Can't build with null builder.");
|
||||||
this.storeConfig = storeConfig;
|
this.storeConfig = storeConfig;
|
||||||
this.resultBuilder = resultBuilder;
|
this.resultBuilder = resultBuilder;
|
||||||
try {
|
this.xmlDriver = new ModelXMLMarshaller();
|
||||||
this.xmlDriver = new ModelXMLMarshaller();
|
|
||||||
} catch (JAXBException e) {
|
|
||||||
throw new TPQConfigException(e);
|
|
||||||
}
|
|
||||||
this.statementMarshaller = new TPQStatementMarshaller();
|
this.statementMarshaller = new TPQStatementMarshaller();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,6 +24,7 @@ package net.forwardfire.tpquery.model;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.io.OutputStream;
|
import java.io.OutputStream;
|
||||||
|
import java.util.function.Supplier;
|
||||||
|
|
||||||
import javax.xml.bind.JAXBContext;
|
import javax.xml.bind.JAXBContext;
|
||||||
import javax.xml.bind.JAXBException;
|
import javax.xml.bind.JAXBException;
|
||||||
|
@ -32,6 +33,8 @@ import javax.xml.bind.Unmarshaller;
|
||||||
|
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
|
|
||||||
|
import net.forwardfire.tpquery.config.TPQConfigException;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Jaxb model marshaller of the query sets.
|
* Jaxb model marshaller of the query sets.
|
||||||
*
|
*
|
||||||
|
@ -41,21 +44,35 @@ import org.apache.commons.lang3.Validate;
|
||||||
public class ModelXMLMarshaller extends ModelXMLInfoSet {
|
public class ModelXMLMarshaller extends ModelXMLInfoSet {
|
||||||
|
|
||||||
private final JAXBContext jaxbContext;
|
private final JAXBContext jaxbContext;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a query set xml marshaller.
|
* Creates a query set xml marshaller.
|
||||||
* @throws JAXBException When context could not be build.
|
* @param jaxbContextSupplier The jaxb context supplier.
|
||||||
*/
|
*/
|
||||||
public ModelXMLMarshaller() throws JAXBException {
|
public ModelXMLMarshaller(Supplier<JAXBContext> jaxbContextSupplier) {
|
||||||
this(JAXBContext.newInstance(TPQuerySet.class));
|
this.jaxbContext = Validate.notNull(Validate.notNull(jaxbContextSupplier,"jaxbContextSupplier is null.").get(),"jaxbContext from supplier is null.");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Creates a query set xml marshaller.
|
* Creates a query set xml marshaller.
|
||||||
* @param jaxbContext The jaxb query set context.
|
* @param classes The root jaxb classes to create the context for.
|
||||||
*/
|
*/
|
||||||
public ModelXMLMarshaller(JAXBContext jaxbContext) {
|
protected ModelXMLMarshaller(Class<?> ...classes) {
|
||||||
this.jaxbContext = Validate.notNull(jaxbContext,"jaxbContext is null.");
|
// protected + lamda stuff so it can be fully tested
|
||||||
|
this(() -> {
|
||||||
|
try {
|
||||||
|
return JAXBContext.newInstance(classes);
|
||||||
|
} catch (JAXBException e) {
|
||||||
|
throw new TPQConfigException(e);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Creates a query set xml marshaller.
|
||||||
|
*/
|
||||||
|
public ModelXMLMarshaller() {
|
||||||
|
this(TPQuerySet.class);
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|
|
@ -134,4 +134,11 @@ public class TPQueryStoreConfigBuilderTest {
|
||||||
.readQuerySet(new File("./src/test/resources/net/forwardfire/tpquery/test-query.not-found"))
|
.readQuerySet(new File("./src/test/resources/net/forwardfire/tpquery/test-query.not-found"))
|
||||||
.build();
|
.build();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected=TPQConfigException.class)
|
||||||
|
public void testReadQuerySetInvalidContext() throws Exception {
|
||||||
|
TPQFactory.createManagerBuilder()
|
||||||
|
.readQuerySet(new File("./src/test/resources/net/forwardfire/tpquery/test-query.not-found"))
|
||||||
|
.build();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -9,10 +9,14 @@ import java.io.ByteArrayOutputStream;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import javax.xml.bind.annotation.XmlElement;
|
||||||
|
import javax.xml.bind.annotation.XmlElementWrapper;
|
||||||
|
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import net.forwardfire.tpquery.TPQFactory;
|
import net.forwardfire.tpquery.TPQFactory;
|
||||||
import net.forwardfire.tpquery.TPQManager;
|
import net.forwardfire.tpquery.TPQManager;
|
||||||
|
import net.forwardfire.tpquery.config.TPQConfigException;
|
||||||
import net.forwardfire.tpquery.model.TPQuery;
|
import net.forwardfire.tpquery.model.TPQuery;
|
||||||
import net.forwardfire.tpquery.model.TPQueryParameter;
|
import net.forwardfire.tpquery.model.TPQueryParameter;
|
||||||
import net.forwardfire.tpquery.model.TPQuerySet;
|
import net.forwardfire.tpquery.model.TPQuerySet;
|
||||||
|
@ -113,4 +117,15 @@ public class ModelXMLMarshallerTest {
|
||||||
assertEquals("junit",q.getQueryHints().keySet().iterator().next());
|
assertEquals("junit",q.getQueryHints().keySet().iterator().next());
|
||||||
assertEquals("false",q.getQueryHints().get("junit"));
|
assertEquals("false",q.getQueryHints().get("junit"));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test(expected=TPQConfigException.class)
|
||||||
|
public void testContextException() throws Exception {
|
||||||
|
new ModelXMLMarshaller(JaxbContextError.class);
|
||||||
|
}
|
||||||
|
|
||||||
|
private static class JaxbContextError {
|
||||||
|
@XmlElementWrapper
|
||||||
|
@XmlElement
|
||||||
|
private String test;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
|
||||||
|
<query-set name="test" language="SQL">
|
||||||
|
<this-will-throw-jaxb-error/>
|
||||||
|
</query-set>
|
||||||
|
|
Loading…
Reference in a new issue