static public byte[] getByteArray(Class<?> clazz) throws IOException { try(InputStream is = getStream(clazz)){ return toByteArray(is); } }
private List<?> getContent(JAXBContext context) throws IOException, JAXBException { PMML pmml; Unmarshaller unmarshaller = context.createUnmarshaller(); try(InputStream is = ResourceUtil.getStream(getClass())){ pmml = (PMML)unmarshaller.unmarshal(is); } return ExtensionUtil.getContent(pmml); } }
static public byte[] getByteArray(Version version) throws IOException { try(InputStream is = getStream(version)){ return toByteArray(is); } }
static public PMML unmarshal(Version version) throws IOException, JAXBException { if(!(Version.PMML_4_3).equals(version)){ throw new IllegalArgumentException(); } try(InputStream is = getStream(version)){ return JAXBUtil.unmarshalPMML(new StreamSource(is)); } }
@Test public void unmarshal() throws Exception { PMML pmml; System.setProperty("javax.xml.accessExternalDTD", "file"); try(InputStream is = ResourceUtil.getStream(XXEAttackTest.class);){ Source source = new StreamSource(is); pmml = JAXBUtil.unmarshalPMML(source); } finally { System.clearProperty("javax.xml.accessExternalDTD"); } List<?> content = ExtensionUtil.getContent(pmml); assertEquals(Arrays.asList("lol"), content); }
static public PMML unmarshal(Class<?> clazz, XMLFilter... filters) throws IOException, SAXException, JAXBException { try(InputStream is = getStream(clazz)){ Source source = SAXUtil.createFilteredSource(is, filters); return JAXBUtil.unmarshalPMML(source); } }
@Test public void copyCustom() throws Exception { PMML pmml; JAXBContext context = JAXBContext.newInstance(CustomObjectFactory.class); Unmarshaller unmarshaller = context.createUnmarshaller(); unmarshaller.setProperty("com.sun.xml.bind.ObjectFactory", new CustomObjectFactory()); try(InputStream is = ResourceUtil.getStream(Version.PMML_4_3)){ pmml = (PMML)unmarshaller.unmarshal(is); } assertEquals(CustomPMML.class, pmml.getClass()); Marshaller marshaller = context.createMarshaller(); ByteArrayOutputStream os = new ByteArrayOutputStream(); marshaller.marshal(pmml, os); assertTrue(os.size() > 0); } }
@Test public void copy() throws Exception { PMML pmml; try(InputStream is = ResourceUtil.getStream(Version.PMML_4_3)){ pmml = JAXBUtil.unmarshalPMML(new StreamSource(is)); } assertEquals(PMML.class, pmml.getClass()); ByteArrayOutputStream os = new ByteArrayOutputStream(); JAXBUtil.marshalPMML(pmml, new StreamResult(os)); assertTrue(os.size() > 0); }
@Test public void unmarshal() throws Exception { try(InputStream is = ResourceUtil.getStream(XEEAttackTest.class)){ JAXBUtil.unmarshalPMML(new StreamSource(is)); fail(); } catch(UnmarshalException ue){ // Ignored } } }
@Test public void unmarshal() throws Exception { Schema schema = JAXBUtil.getSchema(); assertNotNull(schema); Unmarshaller unmarshaller = JAXBUtil.createUnmarshaller(); unmarshaller.setSchema(schema); PMML pmml; try(InputStream is = ResourceUtil.getStream(ValidationTest.class)){ pmml = (PMML)unmarshaller.unmarshal(is); } List<Model> models = pmml.getModels(); assertEquals(1, models.size()); RegressionModel regressionModel = (RegressionModel)models.get(0); List<Extension> extensions = regressionModel.getExtensions(); assertEquals(2, extensions.size()); checkExtension("position", "first", extensions.get(0)); checkExtension("position", "last", extensions.get(1)); }
@Test public void unmarshalSecurely() throws Exception { try(InputStream is = ResourceUtil.getStream(XXEAttackTest.class)){ Source source = SAXUtil.createFilteredSource(is); JAXBUtil.unmarshalPMML(source); fail(); } catch(UnmarshalException ue){ Throwable cause = ue.getCause(); assertTrue(cause instanceof SAXParseException); } } }
@Test public void unmarshal() throws Exception { Version[] versions = Version.values(); for(Version version : versions){ PMML pmml; try(InputStream is = ResourceUtil.getStream(version)){ pmml = PMMLUtil.unmarshal(is); } assertEquals(pmml.getVersion(), Version.PMML_4_3.getVersion()); assertEquals(pmml.getBaseVersion(), version.getVersion()); } } }