### Question:
SpecificationResourceCustomizer implements ComponentProxyCustomizer { @Override public void customize(final ComponentProxyComponent component, final Map<String, Object> options) { if (options.containsKey(ComponentProperties.WSDL_URL)) { options.remove(ComponentProperties.SPECIFICATION); } else if (options.containsKey(ComponentProperties.SPECIFICATION)) { consumeOption(options, ComponentProperties.SPECIFICATION, specificationObject -> { final String specification = (String) specificationObject; try { final File tempSpecification = File.createTempFile("soap", ".wsdl"); tempSpecification.deleteOnExit(); final String wsdlURL = tempSpecification.getAbsolutePath(); try (OutputStream out = new FileOutputStream(wsdlURL)) { IOUtils.write(specification, out, StandardCharsets.UTF_8); } options.put(ComponentProperties.WSDL_URL, wsdlURL); } catch (final IOException e) { throw new IllegalStateException("Unable to persist the WSDL specification to filesystem", e); } }); } else { throw new IllegalStateException("Missing property, either 'wsdlURL' or 'specification' MUST be provided"); } }  @Override void customize(final ComponentProxyComponent component, final Map<String, Object> options);  }### Answer:
@Test public void shouldThrowExceptionOnMissingProperties() { final SpecificationResourceCustomizer customizer = new SpecificationResourceCustomizer(); final Map<String, Object> options = new HashMap<>(); assertThrows(IllegalStateException.class, () -> customizer.customize(NOT_USED, options)); }
@Test public void shouldStoreSpecificationInTemporaryDirectory() { final SpecificationResourceCustomizer customizer = new SpecificationResourceCustomizer(); final Map<String, Object> options = new HashMap<>(); options.put(SPECIFICATION, CONTENTS); customizer.customize(NOT_USED, options); assertThat(options).containsKey(WSDL_URL); assertThat(options).doesNotContainKey(SPECIFICATION); assertThat(new File(ConnectorOptions.extractOption(options, WSDL_URL))).hasContent(CONTENTS); }
@Test public void shouldIgnoreSpecificationWhenWsdlUrlIsPresent() { final SpecificationResourceCustomizer customizer = new SpecificationResourceCustomizer(); final Map<String, Object> options = new HashMap<>(); options.put(SPECIFICATION, CONTENTS); options.put(WSDL_URL, HTTP_DUMMY_URL); customizer.customize(NOT_USED, options); assertThat(options).containsKey(WSDL_URL); assertThat(options.get(WSDL_URL)).isEqualTo(HTTP_DUMMY_URL); assertThat(options).doesNotContainKey(SPECIFICATION); }