@Test public void testGenerateScenariosWithDataDictionaries() { WsdlScenarioGenerator scenarioGenerator = new WsdlScenarioGenerator(new ClassPathResource("schema/TestService.wsdl")); reset(beanRegistry); BeanDefinition inboundXmlDataDictionary = Mockito.mock(BeanDefinition.class); BeanDefinition outboundXmlDataDictionary = Mockito.mock(BeanDefinition.class); when(beanRegistry.containsBeanDefinition("inboundXmlDataDictionary")).thenReturn(true); when(beanRegistry.containsBeanDefinition("outboundXmlDataDictionary")).thenReturn(true); when(beanRegistry.getBeanDefinition("inboundXmlDataDictionary")).thenReturn(inboundXmlDataDictionary); when(beanRegistry.getBeanDefinition("outboundXmlDataDictionary")).thenReturn(outboundXmlDataDictionary); doAnswer(invocation -> { BeanDefinition scenario = (BeanDefinition) invocation.getArguments()[1]; Assert.assertEquals(scenario.getPropertyValues().get("soapAction"), "/TestService/test"); Assert.assertEquals(scenario.getPropertyValues().get("input"), input); Assert.assertEquals(scenario.getPropertyValues().get("output"), output); Assert.assertNotNull(scenario.getPropertyValues().get("inboundDataDictionary")); Assert.assertNotNull(scenario.getPropertyValues().get("outboundDataDictionary")); return null; }).when(beanRegistry).registerBeanDefinition(eq("TestRequest"), any(BeanDefinition.class)); scenarioGenerator.postProcessBeanFactory(beanRegistry); verify(beanRegistry).registerBeanDefinition(eq("TestRequest"), any(BeanDefinition.class)); }
@Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assert.notNull(wsdlResource, "Missing either WSDL location system property setting or explicit WSDL resource for scenario auto generation"); Definition wsdl = getWsdlDefinition(wsdlResource); XmlObject wsdlObject = compileWsdl(wsdlResource); SchemaTypeSystem schemaTypeSystem = compileXsd(wsdlObject); for (Object item : wsdl.getBindings().values()) { Binding binding = (Binding) item; for (Object operationItem : binding.getBindingOperations()) { BindingOperation operation = (BindingOperation) operationItem; SchemaType requestElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getInput().getName()); SchemaType responseElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getOutput().getName()); String soapAction = ""; List extensions = operation.getExtensibilityElements(); if (extensions != null) { for (int i = 0; i < extensions.size(); i++) { ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); if (extElement instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) extElement; soapAction = soapOp.getSoapActionURI(); } } } String scenarioName; switch (namingStrategy) { case INPUT: scenarioName = operation.getOperation().getInput().getName(); break; case OPERATION: scenarioName = operation.getOperation().getName(); break; case SOAP_ACTION: scenarioName = soapAction; break; default: throw new SimulatorException("Unknown scenario naming strategy"); } if (beanFactory instanceof BeanDefinitionRegistry) { log.info("Register auto generated scenario as bean definition: " + scenarioName); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(WsdlOperationScenario.class) .addConstructorArgValue(operation) .addPropertyValue("soapAction", soapAction) .addPropertyValue("input", generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem))) .addPropertyValue("output", generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); if (beanFactory.containsBeanDefinition("inboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("inboundDataDictionary", "inboundXmlDataDictionary"); } if (beanFactory.containsBeanDefinition("outboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("outboundDataDictionary", "outboundXmlDataDictionary"); } ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(scenarioName, beanDefinitionBuilder.getBeanDefinition()); } else { log.info("Register auto generated scenario as singleton: " + scenarioName); WsdlOperationScenario scenario = createScenario(operation, soapAction, generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem)), generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); beanFactory.registerSingleton(scenarioName, scenario); } } } }
WsdlScenarioGenerator implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assert.notNull(wsdlResource, "Missing either WSDL location system property setting or explicit WSDL resource for scenario auto generation"); Definition wsdl = getWsdlDefinition(wsdlResource); XmlObject wsdlObject = compileWsdl(wsdlResource); SchemaTypeSystem schemaTypeSystem = compileXsd(wsdlObject); for (Object item : wsdl.getBindings().values()) { Binding binding = (Binding) item; for (Object operationItem : binding.getBindingOperations()) { BindingOperation operation = (BindingOperation) operationItem; SchemaType requestElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getInput().getName()); SchemaType responseElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getOutput().getName()); String soapAction = ""; List extensions = operation.getExtensibilityElements(); if (extensions != null) { for (int i = 0; i < extensions.size(); i++) { ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); if (extElement instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) extElement; soapAction = soapOp.getSoapActionURI(); } } } String scenarioName; switch (namingStrategy) { case INPUT: scenarioName = operation.getOperation().getInput().getName(); break; case OPERATION: scenarioName = operation.getOperation().getName(); break; case SOAP_ACTION: scenarioName = soapAction; break; default: throw new SimulatorException("Unknown scenario naming strategy"); } if (beanFactory instanceof BeanDefinitionRegistry) { log.info("Register auto generated scenario as bean definition: " + scenarioName); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(WsdlOperationScenario.class) .addConstructorArgValue(operation) .addPropertyValue("soapAction", soapAction) .addPropertyValue("input", generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem))) .addPropertyValue("output", generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); if (beanFactory.containsBeanDefinition("inboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("inboundDataDictionary", "inboundXmlDataDictionary"); } if (beanFactory.containsBeanDefinition("outboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("outboundDataDictionary", "outboundXmlDataDictionary"); } ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(scenarioName, beanDefinitionBuilder.getBeanDefinition()); } else { log.info("Register auto generated scenario as singleton: " + scenarioName); WsdlOperationScenario scenario = createScenario(operation, soapAction, generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem)), generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); beanFactory.registerSingleton(scenarioName, scenario); } } } } }
WsdlScenarioGenerator implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assert.notNull(wsdlResource, "Missing either WSDL location system property setting or explicit WSDL resource for scenario auto generation"); Definition wsdl = getWsdlDefinition(wsdlResource); XmlObject wsdlObject = compileWsdl(wsdlResource); SchemaTypeSystem schemaTypeSystem = compileXsd(wsdlObject); for (Object item : wsdl.getBindings().values()) { Binding binding = (Binding) item; for (Object operationItem : binding.getBindingOperations()) { BindingOperation operation = (BindingOperation) operationItem; SchemaType requestElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getInput().getName()); SchemaType responseElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getOutput().getName()); String soapAction = ""; List extensions = operation.getExtensibilityElements(); if (extensions != null) { for (int i = 0; i < extensions.size(); i++) { ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); if (extElement instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) extElement; soapAction = soapOp.getSoapActionURI(); } } } String scenarioName; switch (namingStrategy) { case INPUT: scenarioName = operation.getOperation().getInput().getName(); break; case OPERATION: scenarioName = operation.getOperation().getName(); break; case SOAP_ACTION: scenarioName = soapAction; break; default: throw new SimulatorException("Unknown scenario naming strategy"); } if (beanFactory instanceof BeanDefinitionRegistry) { log.info("Register auto generated scenario as bean definition: " + scenarioName); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(WsdlOperationScenario.class) .addConstructorArgValue(operation) .addPropertyValue("soapAction", soapAction) .addPropertyValue("input", generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem))) .addPropertyValue("output", generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); if (beanFactory.containsBeanDefinition("inboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("inboundDataDictionary", "inboundXmlDataDictionary"); } if (beanFactory.containsBeanDefinition("outboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("outboundDataDictionary", "outboundXmlDataDictionary"); } ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(scenarioName, beanDefinitionBuilder.getBeanDefinition()); } else { log.info("Register auto generated scenario as singleton: " + scenarioName); WsdlOperationScenario scenario = createScenario(operation, soapAction, generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem)), generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); beanFactory.registerSingleton(scenarioName, scenario); } } } } WsdlScenarioGenerator(Environment environment);  WsdlScenarioGenerator(Resource wsdlResource); }
WsdlScenarioGenerator implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assert.notNull(wsdlResource, "Missing either WSDL location system property setting or explicit WSDL resource for scenario auto generation"); Definition wsdl = getWsdlDefinition(wsdlResource); XmlObject wsdlObject = compileWsdl(wsdlResource); SchemaTypeSystem schemaTypeSystem = compileXsd(wsdlObject); for (Object item : wsdl.getBindings().values()) { Binding binding = (Binding) item; for (Object operationItem : binding.getBindingOperations()) { BindingOperation operation = (BindingOperation) operationItem; SchemaType requestElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getInput().getName()); SchemaType responseElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getOutput().getName()); String soapAction = ""; List extensions = operation.getExtensibilityElements(); if (extensions != null) { for (int i = 0; i < extensions.size(); i++) { ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); if (extElement instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) extElement; soapAction = soapOp.getSoapActionURI(); } } } String scenarioName; switch (namingStrategy) { case INPUT: scenarioName = operation.getOperation().getInput().getName(); break; case OPERATION: scenarioName = operation.getOperation().getName(); break; case SOAP_ACTION: scenarioName = soapAction; break; default: throw new SimulatorException("Unknown scenario naming strategy"); } if (beanFactory instanceof BeanDefinitionRegistry) { log.info("Register auto generated scenario as bean definition: " + scenarioName); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(WsdlOperationScenario.class) .addConstructorArgValue(operation) .addPropertyValue("soapAction", soapAction) .addPropertyValue("input", generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem))) .addPropertyValue("output", generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); if (beanFactory.containsBeanDefinition("inboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("inboundDataDictionary", "inboundXmlDataDictionary"); } if (beanFactory.containsBeanDefinition("outboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("outboundDataDictionary", "outboundXmlDataDictionary"); } ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(scenarioName, beanDefinitionBuilder.getBeanDefinition()); } else { log.info("Register auto generated scenario as singleton: " + scenarioName); WsdlOperationScenario scenario = createScenario(operation, soapAction, generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem)), generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); beanFactory.registerSingleton(scenarioName, scenario); } } } } WsdlScenarioGenerator(Environment environment);  WsdlScenarioGenerator(Resource wsdlResource); @Override void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory); WsdlScenarioNamingStrategy getNamingStrategy(); void setNamingStrategy(WsdlScenarioNamingStrategy namingStrategy); }
WsdlScenarioGenerator implements BeanFactoryPostProcessor { @Override public void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory) throws BeansException { Assert.notNull(wsdlResource, "Missing either WSDL location system property setting or explicit WSDL resource for scenario auto generation"); Definition wsdl = getWsdlDefinition(wsdlResource); XmlObject wsdlObject = compileWsdl(wsdlResource); SchemaTypeSystem schemaTypeSystem = compileXsd(wsdlObject); for (Object item : wsdl.getBindings().values()) { Binding binding = (Binding) item; for (Object operationItem : binding.getBindingOperations()) { BindingOperation operation = (BindingOperation) operationItem; SchemaType requestElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getInput().getName()); SchemaType responseElem = getSchemaType(schemaTypeSystem, operation.getName(), operation.getOperation().getOutput().getName()); String soapAction = ""; List extensions = operation.getExtensibilityElements(); if (extensions != null) { for (int i = 0; i < extensions.size(); i++) { ExtensibilityElement extElement = (ExtensibilityElement) extensions.get(i); if (extElement instanceof SOAPOperation) { SOAPOperation soapOp = (SOAPOperation) extElement; soapAction = soapOp.getSoapActionURI(); } } } String scenarioName; switch (namingStrategy) { case INPUT: scenarioName = operation.getOperation().getInput().getName(); break; case OPERATION: scenarioName = operation.getOperation().getName(); break; case SOAP_ACTION: scenarioName = soapAction; break; default: throw new SimulatorException("Unknown scenario naming strategy"); } if (beanFactory instanceof BeanDefinitionRegistry) { log.info("Register auto generated scenario as bean definition: " + scenarioName); BeanDefinitionBuilder beanDefinitionBuilder = BeanDefinitionBuilder.genericBeanDefinition(WsdlOperationScenario.class) .addConstructorArgValue(operation) .addPropertyValue("soapAction", soapAction) .addPropertyValue("input", generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem))) .addPropertyValue("output", generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); if (beanFactory.containsBeanDefinition("inboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("inboundDataDictionary", "inboundXmlDataDictionary"); } if (beanFactory.containsBeanDefinition("outboundXmlDataDictionary")) { beanDefinitionBuilder.addPropertyReference("outboundDataDictionary", "outboundXmlDataDictionary"); } ((BeanDefinitionRegistry) beanFactory).registerBeanDefinition(scenarioName, beanDefinitionBuilder.getBeanDefinition()); } else { log.info("Register auto generated scenario as singleton: " + scenarioName); WsdlOperationScenario scenario = createScenario(operation, soapAction, generateRequest(operation, SampleXmlUtil.createSampleForType(requestElem)), generateResponse(operation, SampleXmlUtil.createSampleForType(responseElem))); beanFactory.registerSingleton(scenarioName, scenario); } } } } WsdlScenarioGenerator(Environment environment);  WsdlScenarioGenerator(Resource wsdlResource); @Override void postProcessBeanFactory(ConfigurableListableBeanFactory beanFactory); WsdlScenarioNamingStrategy getNamingStrategy(); void setNamingStrategy(WsdlScenarioNamingStrategy namingStrategy);  }