How to use addImportedSchemas method of com.consol.citrus.xml.schema.AbstractSchemaCollection class

Best Citrus code snippet using com.consol.citrus.xml.schema.AbstractSchemaCollection.addImportedSchemas

Source:WsdlXsdSchema.java Github

copy

Full Screen

...101 for (Object schemaObject : schemaTypes) {102 if (schemaObject instanceof SchemaImpl) {103 SchemaImpl schema = (SchemaImpl) schemaObject;104 inheritNamespaces(schema, definition);105 addImportedSchemas(schema);106 addIncludedSchemas(schema);107 if (!importedSchemas.contains(getTargetNamespace(schema))) {108 ByteArrayOutputStream bos = new ByteArrayOutputStream();109 Source source = new DOMSource(schema.getElement());110 Result result = new StreamResult(bos);111 TransformerFactory.newInstance().newTransformer().transform(source, result);112 Resource schemaResource = new ByteArrayResource(bos.toByteArray());113 importedSchemas.add(getTargetNamespace(schema));114 schemaResources.add(schemaResource);115 if (definition.getTargetNamespace().equals(getTargetNamespace(schema)) && targetXsd == null) {116 targetXsd = schemaResource;117 } else if (targetXsd == null && firstSchemaInWSDL == null) {118 firstSchemaInWSDL = schemaResource;119 }...

Full Screen

Full Screen

Source:AbstractSchemaCollection.java Github

copy

Full Screen

...57 * This is necessary when schema import are located in jar files. If they are not added immediately the reference to them is lost.58 *59 * @param schema60 */61 protected void addImportedSchemas(Schema schema) throws WSDLException, IOException, TransformerException, TransformerFactoryConfigurationError {62 for (Object imports : schema.getImports().values()) {63 for (SchemaImport schemaImport : (Vector<SchemaImport>)imports) {64 // Prevent duplicate imports65 if (!importedSchemas.contains(schemaImport.getNamespaceURI())) {66 importedSchemas.add(schemaImport.getNamespaceURI());67 Schema referencedSchema = schemaImport.getReferencedSchema();68 if (referencedSchema != null) {69 ByteArrayOutputStream bos = new ByteArrayOutputStream();70 Source source = new DOMSource(referencedSchema.getElement());71 Result result = new StreamResult(bos);72 TransformerFactory.newInstance().newTransformer().transform(source, result);73 Resource schemaResource = new ByteArrayResource(bos.toByteArray());74 addImportedSchemas(referencedSchema);75 schemaResources.add(schemaResource);76 }77 }78 }79 }80 }81 /**82 * Recursively add all included schemas as schema resource.83 */84 protected void addIncludedSchemas(Schema schema) throws WSDLException, IOException, TransformerException, TransformerFactoryConfigurationError {85 List<SchemaReference> includes = schema.getIncludes();86 for (SchemaReference schemaReference : includes) {87 String schemaLocation;88 URI locationURI = URI.create(schemaReference.getSchemaLocationURI());...

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.xml.schema.AbstractSchemaCollection;2import com.consol.citrus.xml.schema.DefaultSchema;3import com.consol.citrus.xml.schema.DefaultSchemaCollection;4import com.consol.citrus.xml.schema.XsdSchema;5import java.io.File;6import java.io.IOException;7import java.util.ArrayList;8import java.util.List;9import org.springframework.core.io.Resource;10public class Test {11 public static void main(String[] args) throws IOException {12 DefaultSchemaCollection collection = new DefaultSchemaCollection();13 Resource[] resources = new Resource[] {14 new FileResource(new File("D:\\Books\\Spring in Action\\Spring in Action.pdf"))15 };16 List<DefaultSchema> schemaList = new ArrayList<DefaultSchema>();17 for (Resource resource : resources) {18 schemaList.add(new XsdSchema(resource));19 }20 collection.addImportedSchemas(schemaList);21 System.out.println("Done");22 }23}24 at com.consol.citrus.xml.schema.AbstractSchemaCollection.addImportedSchemas(AbstractSchemaCollection.java:129)25 at Test.main(Test.java:20)

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.io.File;3import java.io.IOException;4import java.util.ArrayList;5import java.util.List;6import org.springframework.core.io.ClassPathResource;7import org.springframework.core.io.FileSystemResource;8import org.springframework.core.io.Resource;9import org.testng.Assert;10import org.testng.annotations.Test;11public class AbstractSchemaCollectionTest {12 public void testAddImportedSchemas() throws IOException {13 AbstractSchemaCollection schemaCollection = new AbstractSchemaCollection() {14 public void loadSchemas() {15 }16 };17 List<Resource> resources = new ArrayList<Resource>();18 resources.add(new ClassPathResource("com/consol/citrus/xml/schema/AbstractSchemaCollectionTest1.xsd"));19 resources.add(new ClassPathResource("com/consol/citrus/xml/schema/AbstractSchemaCollectionTest2.xsd"));20 schemaCollection.addImportedSchemas(resources);21 Assert.assertEquals(schemaCollection.getSchemaResources().size(), 2);22 Assert.assertEquals(schemaCollection.getSchemaResources().get(0).getFilename(), "AbstractSchemaCollectionTest1.xsd");23 Assert.assertEquals(schemaCollection.getSchemaResources().get(1).getFilename(), "AbstractSchemaCollectionTest2.xsd");24 }25 public void testAddImportedSchemasWithDirectory() throws IOException {26 AbstractSchemaCollection schemaCollection = new AbstractSchemaCollection() {27 public void loadSchemas() {28 }29 };30 List<Resource> resources = new ArrayList<Resource>();31 resources.add(new FileSystemResource(new File("src/test/resources/com/consol/citrus/xml/schema/")));32 schemaCollection.addImportedSchemas(resources);33 Assert.assertEquals(schemaCollection.getSchemaResources().size(), 2);34 Assert.assertEquals(schemaCollection.getSchemaResources().get(0).getFilename(), "AbstractSchemaCollectionTest1.xsd");35 Assert.assertEquals(schemaCollection.getSchemaResources().get(1).getFilename(), "AbstractSchemaCollectionTest2.xsd");36 }37}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.io.File;3import java.io.IOException;4import java.util.ArrayList;5import java.util.List;6import org.springframework.core.io.FileSystemResource;7import org.springframework.core.io.Resource;8public class AddImportedSchemas {9 public static void main(String[] args) throws IOException {10 List<Resource> resourceList = new ArrayList<Resource>();11 resourceList.add(new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\4.xsd")));12 AbstractSchemaCollection schemaCollection = new AbstractSchemaCollection(resourceList);13 schemaCollection.addImportedSchemas();14 }15}16 at com.consol.citrus.xml.schema.AbstractSchemaCollection.addImportedSchemas(AbstractSchemaCollection.java:125)17 at AddImportedSchemas.main(4.java:21)18schemaCollection = new AbstractSchemaCollection(resourceList);19package com.consol.citrus.xml.schema;20import java.io.File;21import java.io.IOException;22import java.util.ArrayList;23import java.util.List;24import org.springframework.core.io.FileSystemResource;25import org.springframework.core.io.Resource;26public class AddImportedSchemas {27 public static void main(String[] args) throws IOException {28 List<Resource> resourceList = new ArrayList<Resource>();29 resourceList.add(new FileSystemResource(new File("C:\\Users\\Administrator\\Desktop\\4.xsd")));

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.util.ArrayList;3import java.util.List;4import org.apache.ws.commons.schema.XmlSchema;5import org.apache.ws.commons.schema.XmlSchemaCollection;6import org.springframework.core.io.ClassPathResource;7import org.springframework.core.io.Resource;8public class SchemaCollection extends AbstractSchemaCollection {9 private XmlSchemaCollection schemaCollection = new XmlSchemaCollection();10 public XmlSchemaCollection getSchemaCollection() {11 return schemaCollection;12 }13 public List<Resource> getSchemaResources() {14 List<Resource> resources = new ArrayList<Resource>();15 resources.add(new ClassPathResource("schema1.xsd"));16 resources.add(new ClassPathResource("schema2.xsd"));17 return resources;18 }19 public void addImportedSchemas(XmlSchema xmlSchema) {20 }21}22package com.consol.citrus.xml.schema;23import java.util.ArrayList;24import java.util.List;25import org.apache.ws.commons.schema.XmlSchema;26import org.apache.ws.commons.schema.XmlSchemaCollection;27import org.springframework.core.io.ClassPathResource;28import org.springframework.core.io.Resource;29public class SchemaCollection extends AbstractSchemaCollection {30 private XmlSchemaCollection schemaCollection = new XmlSchemaCollection();31 public XmlSchemaCollection getSchemaCollection() {32 return schemaCollection;33 }34 public List<Resource> getSchemaResources() {35 List<Resource> resources = new ArrayList<Resource>();36 resources.add(new ClassPathResource("schema1.xsd"));37 resources.add(new ClassPathResource("schema2.xsd"));38 return resources;39 }40 public void addImportedSchemas(XmlSchema xmlSchema) {41 }42}43package com.consol.citrus.xml.schema;44import java.util.ArrayList;45import java.util.List;46import org.apache.ws.commons.schema.XmlSchema;47import org.apache.ws.commons.schema.XmlSchemaCollection;48import org.springframework.core.io.ClassPathResource;49import org.springframework.core.io.Resource;50public class SchemaCollection extends AbstractSchemaCollection {

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import org.testng.annotations.Test;3import java.util.ArrayList;4import java.util.List;5public class AddImportedSchemasTest {6 public void addImportedSchemasTest() {7 List<String> importedSchemas = new ArrayList<String>();8 AbstractSchemaCollection abstractSchemaCollection = new AbstractSchemaCollection();9 abstractSchemaCollection.addImportedSchemas(importedSchemas);10 }11}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.xml.schema.AbstractSchemaCollection;2import com.consol.citrus.xml.schema.XsdSchema;3import com.consol.citrus.xml.schema.XsdSchemaCollection;4import java.util.ArrayList;5import java.util.List;6public class Test {7 public static void main(String[] args) {8 XsdSchemaCollection schemaCollection = new XsdSchemaCollection();9 List<XsdSchema> schemas = new ArrayList<>();10 schemaCollection.setSchemas(schemas);11 schemaCollection.afterPropertiesSet();12 System.out.println(schemaCollection.getSchemas());13 }14}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import java.io.File;2import java.util.ArrayList;3import java.util.List;4import org.springframework.context.support.ClassPathXmlApplicationContext;5import org.springframework.core.io.ClassPathResource;6import org.springframework.core.io.FileSystemResource;7import org.springframework.core.io.Resource;8import org.springframework.util.Assert;9import org.springframework.util.StringUtils;10import org.springframework.ws.wsdl.wsdl11.DefaultWsdl11Definition;11import org.springframework.ws.wsdl.wsdl11.SimpleWsdl11Definition;12import org.springframework.ws.wsdl.wsdl11.Wsdl11Definition;13import org.springframework.xml.xsd.SimpleXsdSchema;14import org.springframework.xml.xsd.XsdSchema;15import org.springframework.xml.xsd.XsdSchemaCollection;16import com.consol.citrus.xml.schema.AbstractSchemaCollection;17import com.consol.citrus.xml.schema.SchemaCollection;18import com.consol.citrus.xml.schema.XsdSchemaRepository;19public class AddImportedSchemas{20 public static void main(String[] args) {21 XsdSchemaRepository schemaRepository = new XsdSchemaRepository();22 SchemaCollection schemaCollection = new AbstractSchemaCollection() {23 };24 SimpleXsdSchema schema = new SimpleXsdSchema();25 schema.setSchema(new FileSystemResource("C:\\Users\\user\\Desktop\\schema.xsd"));26 schemaCollection.addSchema(schema);27 schemaRepository.addSchemaCollection(schemaCollection);28 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();29 context.getBeanFactory().registerSingleton("schemaRepository", schemaRepository);30 context.refresh();31 XsdSchemaCollection xsdSchemaCollection = context.getBean("schemaRepository", XsdSchemaRepository.class).getSchemaCollection();32 ((AbstractSchemaCollection) xsdSchemaCollection).addImportedSchemas(xsdSchema);33 System.out.println(xsdSchemaCollection);34 }35}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.io.File;3import java.io.IOException;4import java.util.ArrayList;5import java.util.List;6import org.springframework.core.io.Resource;7import org.springframework.core.io.support.PathMatchingResourcePatternResolver;8import org.springframework.core.io.support.ResourcePatternResolver;9import org.springframework.util.Assert;10import org.springframework.util.CollectionUtils;11import org.springframework.util.StringUtils;12import org.springframework.xml.xsd.SimpleXsdSchema;13import org.springframework.xml.xsd.XsdSchema;14import org.springframework.xml.xsd.XsdSchemaCollection;15public class SchemaCollection extends AbstractSchemaCollection {16 private List<XsdSchema> schemas = new ArrayList<XsdSchema>();17 private List<String> schemaLocations = new ArrayList<String>();18 private XsdSchemaCollection schemaCollection;19 private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();20 public SchemaCollection() {21 super();22 }23 public SchemaCollection(List<String> schemaLocations) {24 this.schemaLocations = schemaLocations;25 }26 public SchemaCollection(XsdSchemaCollection schemaCollection) {27 this.schemaCollection = schemaCollection;28 }29 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addSchema(java.lang.String)30 public void addSchema(String schemaLocation) {31 schemaLocations.add(schemaLocation);32 }33 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addImportedSchema(java.lang.String)34 public void addImportedSchema(String schemaLocation) {35 schemaLocations.add(schemaLocation);36 }37 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#getSchemaCollection()38 public XsdSchemaCollection getSchemaCollection() {39 if (schemaCollection == null) {40 Assert.notEmpty(schemaLocations, "At least one schema location must be specified");41 for (String schemaLocation : schemaLocations) {42 try {43 Resource[] resources = resourcePatternResolver.getResources(schemaLocation);44 if (resources != null && resources.length > 0) {

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.xml.schema.AbstractSchemaCollection;2import com.consol.citrus.xml.schema.SchemaValidationContext;3import org.springframework.core.io.ClassPathResource;4import org.springframework.core.io.Resource;5import org.springframework.util.CollectionUtils;6import org.testng.Assert;7import org.testng.annotations.Test;8import javax.xml.XMLConstants;9import javax.xml.transform.stream.StreamSource;10import java.util.ArrayList;11import java.util.List;12public class Test4 {13 public void test4() {14 SchemaValidationContext schemaValidationContext = new SchemaValidationContext();15 schemaValidationContext.setSchemaCollection(new AbstractSchemaCollection() {16 public List<StreamSource> getSchemas() {17 List<StreamSource> schemas = new ArrayList<>();18 schemas.add(new StreamSource(new ClassPathResource("schema1.xsd").getInputStream()));19 return schemas;20 }21 });22 try {23 schemaValidationContext.getSchemaCollection().addImportedSchemas(new ClassPathResource("schema2.xsd"));24 Assert.assertTrue(CollectionUtils.isEmpty(schemaValidationContext.getSchemaCollection().getImportedSchemas()));25 } catch (Exception e) {26 System.out.println("Exception: " + e);27 }28 }29}30 schemaRepository.addSchemaCollection(schemaCollection);31 ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext();32 context.getBeanFactory().registerSingleton("schemaRepository", schemaRepository);33 context.refresh();34 XsdSchemaCollection xsdSchemaCollection = context.getBean("schemaRepository", XsdSchemaRepository.class).getSchemaCollection();35 ((AbstractSchemaCollection) xsdSchemaCollection).addImportedSchemas(xsdSchema);36 System.out.println(xsdSchemaCollection);37 }38}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.io.File;3import java.io.IOException;4import java.util.ArrayList;5import java.util.List;6import org.springframework.core.io.Resource;7import org.springframework.core.io.support.PathMatchingResourcePatternResolver;8import org.springframework.core.io.support.ResourcePatternResolver;9import org.springframework.util.Assert;10import org.springframework.util.CollectionUtils;11import org.springframework.util.StringUtils;12import org.springframework.xml.xsd.SimpleXsdSchema;13import org.springframework.xml.xsd.XsdSchema;14import org.springframework.xml.xsd.XsdSchemaCollection;15public class SchemaCollection extends AbstractSchemaCollection {16 private List<XsdSchema> schemas = new ArrayList<XsdSchema>();17 private List<String> schemaLocations = new ArrayList<String>();18 private XsdSchemaCollection schemaCollection;19 private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();20 public SchemaCollection() {21 super();22 }23 public SchemaCollection(List<String> schemaLocations) {24 this.schemaLocations = schemaLocations;25 }26 public SchemaCollection(XsdSchemaCollection schemaCollection) {27 this.schemaCollection = schemaCollection;28 }29 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addSchema(java.lang.String)30 public void addSchema(String schemaLocation) {31 schemaLocations.add(schemaLocation);32 }33 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addImportedSchema(java.lang.String)34 public void addImportedSchema(String schemaLocation) {35 schemaLocations.add(schemaLocation);36 }37 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#getSchemaCollection()38 public XsdSchemaCollection getSchemaCollection() {39 if (schemaCollection == null) {40 Assert.notEmpty(schemaLocations, "At least one schema location must be specified");41 for (String schemaLocation : schemaLocations) {42 try {43 Resource[] resources = resourcePatternResolver.getResources(schemaLocation);44 if (resources != null && resources.length > 0) {

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.xml.schema.AbstractSchemaCollection;2import com.consol.citrus.xml.schema.SchemaValidationContext;3import org.springframework.core.io.ClassPathResource;4import org.springframework.core.io.Resource;5import org.springframework.util.CollectionUtils;6import org.testng.Assert;7import org.testng.annotations.Test;8import javax.xml.XMLConstants;9import javax.xml.transform.stream.StreamSource;10import java.util.ArrayList;11import java.util.List;12public class Test4 {13 public void test4() {14 SchemaValidationContext schemaValidationContext = new SchemaValidationContext();15 schemaValidationContext.setSchemaCollection(new AbstractSchemaCollection() {16 public List<StreamSource> getSchemas() {17 List<StreamSource> schemas = new ArrayList<>();18 schemas.add(new StreamSource(new ClassPathResource("schema1.xsd").getInputStream()));19 return schemas;20 }21 });22 try {23 schemaValidationContext.getSchemaCollection().addImportedSchemas(new ClassPathResource("schema2.xsd"));24 Assert.assertTrue(CollectionUtils.isEmpty(schemaValidationContext.getSchemaCollection().getImportedSchemas()));25 } catch (Exception e) {26 System.out.println("Exception: " + e);27 }28 }29}

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1package com.consol.citrus.xml.schema;2import java.io.File;3import java.io.IOException;4import java.util.ArrayList;5import java.util.List;6import org.springframework.core.io.Resource;7import org.springframework.core.io.support.PathMatchingResourcePatternResolver;8import org.springframework.core.io.support.ResourcePatternResolver;9import org.springframework.util.Assert;10import org.springframework.util.CollectionUtils;11import org.springframework.util.StringUtils;12import org.springframework.xml.xsd.SimpleXsdSchema;13import org.springframework.xml.xsd.XsdSchema;14import org.springframework.xml.xsd.XsdSchemaCollection;15public class SchemaCollection extends AbstractSchemaCollection {16 private List<XsdSchema> schemas = new ArrayList<XsdSchema>();17 private List<String> schemaLocations = new ArrayList<String>();18 private XsdSchemaCollection schemaCollection;19 private ResourcePatternResolver resourcePatternResolver = new PathMatchingResourcePatternResolver();20 public SchemaCollection() {21 super();22 }23 public SchemaCollection(List<String> schemaLocations) {24 this.schemaLocations = schemaLocations;25 }26 public SchemaCollection(XsdSchemaCollection schemaCollection) {27 this.schemaCollection = schemaCollection;28 }29 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addSchema(java.lang.String)30 public void addSchema(String schemaLocation) {31 schemaLocations.add(schemaLocation);32 }33 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#addImportedSchema(java.lang.String)34 public void addImportedSchema(String schemaLocation) {35 schemaLocations.add(schemaLocation);36 }37 * @see com.consol.citrus.xml.schema.AbstractSchemaCollection#getSchemaCollection()38 public XsdSchemaCollection getSchemaCollection() {39 if (schemaCollection == null) {40 Assert.notEmpty(schemaLocations, "At least one schema location must be specified");41 for (String schemaLocation : schemaLocations) {42 try {43 Resource[] resources = resourcePatternResolver.getResources(schemaLocation);44 if (resources != null && resources.length > 0) {

Full Screen

Full Screen

addImportedSchemas

Using AI Code Generation

copy

Full Screen

1import com.consol.citrus.xml.schema.AbstractSchemaCollection;2import com.consol.citrus.xml.schema.SchemaValidationContext;3import org.springframework.core.io.ClassPathResource;4import org.springframework.core.io.Resource;5import org.springframework.util.CollectionUtils;6import org.testng.Assert;7import org.testng.annotations.Test;8import javax.xml.XMLConstants;9import javax.xml.transform.stream.StreamSource;10import java.util.ArrayList;11import java.util.List;12public class Test4 {13 public void test4() {14 SchemaValidationContext schemaValidationContext = new SchemaValidationContext();15 schemaValidationContext.setSchemaCollection(new AbstractSchemaCollection() {16 public List<StreamSource> getSchemas() {17 List<StreamSource> schemas = new ArrayList<>();18 schemas.add(new StreamSource(new ClassPathResource("schema1.xsd").getInputStream()));19 return schemas;20 }21 });22 try {23 schemaValidationContext.getSchemaCollection().addImportedSchemas(new ClassPathResource("schema2.xsd"));24 Assert.assertTrue(CollectionUtils.isEmpty(schemaValidationContext.getSchemaCollection().getImportedSchemas()));25 } catch (Exception e) {26 System.out.println("Exception: " + e);27 }28 }29}

Full Screen

Full Screen

Automation Testing Tutorials

Learn to execute automation testing from scratch with LambdaTest Learning Hub. Right from setting up the prerequisites to run your first automation test, to following best practices and diving deeper into advanced test scenarios. LambdaTest Learning Hubs compile a list of step-by-step guides to help you be proficient with different test automation frameworks i.e. Selenium, Cypress, TestNG etc.

LambdaTest Learning Hubs:

YouTube

You could also refer to video tutorials over LambdaTest YouTube channel to get step by step demonstration from industry experts.

Run Citrus automation tests on LambdaTest cloud grid

Perform automation testing on 3000+ real desktop and mobile devices online.

Try LambdaTest Now !!

Get 100 minutes of automation test minutes FREE!!

Next-Gen App & Browser Testing Cloud

Was this article helpful?

Helpful

NotHelpful