| /******************************************************************************* |
| * Copyright (c) 2006, 2010 IBM Corporation and others. |
| * All rights reserved. This program and the accompanying materials |
| * are made available under the terms of the Eclipse Public License v1.0 |
| * which accompanies this distribution, and is available at |
| * http://www.eclipse.org/legal/epl-v10.html |
| * |
| * Contributors: |
| * IBM Corporation - initial API and implementation |
| *******************************************************************************/ |
| |
| package org.eclipse.wst.wsdl.tests; |
| |
| |
| import java.io.IOException; |
| import java.util.ArrayList; |
| import java.util.Iterator; |
| import java.util.List; |
| import java.util.Map; |
| |
| import javax.wsdl.OperationType; |
| import javax.wsdl.Port; |
| import javax.wsdl.WSDLException; |
| import javax.wsdl.extensions.ExtensibilityElement; |
| import javax.wsdl.xml.WSDLReader; |
| import javax.xml.XMLConstants; |
| import javax.xml.namespace.QName; |
| |
| import junit.framework.Assert; |
| import junit.framework.Test; |
| import junit.framework.TestCase; |
| import junit.framework.TestSuite; |
| |
| import org.eclipse.emf.common.util.EList; |
| import org.eclipse.emf.ecore.resource.Resource; |
| import org.eclipse.wst.wsdl.Binding; |
| import org.eclipse.wst.wsdl.BindingFault; |
| import org.eclipse.wst.wsdl.BindingInput; |
| import org.eclipse.wst.wsdl.BindingOperation; |
| import org.eclipse.wst.wsdl.BindingOutput; |
| import org.eclipse.wst.wsdl.Definition; |
| import org.eclipse.wst.wsdl.ExtensibleElement; |
| import org.eclipse.wst.wsdl.Fault; |
| import org.eclipse.wst.wsdl.Import; |
| import org.eclipse.wst.wsdl.Input; |
| import org.eclipse.wst.wsdl.Message; |
| import org.eclipse.wst.wsdl.Operation; |
| import org.eclipse.wst.wsdl.Output; |
| import org.eclipse.wst.wsdl.Part; |
| import org.eclipse.wst.wsdl.PortType; |
| import org.eclipse.wst.wsdl.Service; |
| import org.eclipse.wst.wsdl.Types; |
| import org.eclipse.wst.wsdl.UnknownExtensibilityElement; |
| import org.eclipse.wst.wsdl.WSDLFactory; |
| import org.eclipse.wst.wsdl.WSDLPackage; |
| import org.eclipse.wst.wsdl.WSDLPlugin; |
| import org.eclipse.wst.wsdl.XSDSchemaExtensibilityElement; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEContent; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEFactory; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEMimeXml; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEMultipartRelated; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEPackage; |
| import org.eclipse.wst.wsdl.binding.mime.MIMEPart; |
| import org.eclipse.wst.wsdl.binding.mime.internal.util.MIMEConstants; |
| import org.eclipse.wst.wsdl.binding.soap.SOAPBody; |
| import org.eclipse.wst.wsdl.binding.soap.SOAPFactory; |
| import org.eclipse.wst.wsdl.binding.soap.SOAPPackage; |
| import org.eclipse.wst.wsdl.binding.soap.internal.util.SOAPConstants; |
| import org.eclipse.wst.wsdl.internal.util.WSDLUtil; |
| import org.eclipse.wst.wsdl.tests.util.DefinitionLoader; |
| import org.eclipse.wst.wsdl.util.WSDLConstants; |
| import org.eclipse.xsd.XSDComplexTypeDefinition; |
| import org.eclipse.xsd.XSDElementDeclaration; |
| import org.eclipse.xsd.XSDImport; |
| import org.eclipse.xsd.XSDSchema; |
| import org.eclipse.xsd.XSDTypeDefinition; |
| import org.eclipse.xsd.util.XSDConstants; |
| import org.w3c.dom.Attr; |
| import org.w3c.dom.Document; |
| import org.w3c.dom.Element; |
| import org.w3c.dom.Node; |
| import org.w3c.dom.NodeList; |
| |
| |
| /** |
| * Contains unit tests for reported bugs. |
| */ |
| public class BugFixesTest extends TestCase |
| { |
| private String PLUGIN_ABSOLUTE_PATH = WSDLTestsPlugin.getInstallURL(); |
| |
| public BugFixesTest(String name) |
| { |
| super(name); |
| } |
| |
| public static void main(String[] args) |
| { |
| junit.textui.TestRunner.run(suite()); |
| } |
| |
| public static Test suite() |
| { |
| TestSuite suite = new TestSuite(); |
| |
| suite.addTest(new BugFixesTest("TypeAndElementResolution") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testTypeAndElementResolution(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("MIMEGetTypeName") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReturnsProperQNameForMIMEExtensibilityElements(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ImportsElementOrder") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testPlacesImportsAfterTheDefinitionElement(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ResolveWSDLElement") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testResolvesElementInImports(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("PartsSerialization") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testSerializesPartsInSOAPBody(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ImportsSerialization") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testSerializesImportsBeforeTypes(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("LocalNamespacePrefixes") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testSupportsLocalNamespacePrefixes(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("OperationExtensionElements") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testTolleratesExtensionElementsForOperation(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ReconcilesBindingFaults") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReconcilesBindingFaults(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("DuplicateSAXErrorDiagnostics") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testAvoidDuplicateSAXExceptionDiagnostics(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("BindingOperationReconciliation") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testBindingOperationReconciliation(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("FullElementExtensibility") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testFullElementExtensibility(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("TypesExtensibility") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testTypesExtensibility(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("AllowNullNamespaceURI") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testAllowNullNamespaceURI(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("LoadsNamelessDefinition") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testLoadsNamelessDefinition(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("HandlesDocumentationElements") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testHandlesDocumentationElements(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("SupportsLocalNSForExtensibilityElements") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testSupportsLocalNSForExtensibilityElements(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("InlineTypesFromImportsAreVisible") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testInlineTypesFromImportsAreVisible(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("PropagatesTargetNamespaceChange") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testPropagatesTargetNamespaceChange(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("RemoveBinding") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testRemoveBinding(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("RemoveMessage") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testRemoveMessage(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("RemovePortType") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testRemovePortType(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("RemoveService") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testRemoveService(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("GetWSDLType") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testGetWSDLType(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("InvalidXSDImports") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testInvalidXSDImports(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ReconcileNonWSDLElements") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReconcileNonWSDLElements(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ReconcilesImportsWithNoLocation") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReconcilesImportsWithNoLocation(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ReconcilesExtensibleElements") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReconcilesExtensibleElements(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("ImportsWithNonStandardFileExtension") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testImportsWithNonStandardFileExtension(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("LocalDefaultNamespace") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testSupportsLocalDefaultNamespace(); |
| } |
| }); |
| |
| suite.addTest(new BugFixesTest("SOAPBodyForMIME") //$NON-NLS-1$ |
| { |
| protected void runTest() |
| { |
| testReconcilesSOAPBodyPartsInMIMEBinding(); |
| } |
| }); |
| |
| return suite; |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=133310 |
| */ |
| public void testTypeAndElementResolution() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/TypeAndElementResolution/Test.wsdl"); //$NON-NLS-1$ |
| |
| // There are two inline schemas, each importing an external schema. |
| // The first schema is empty and used just to show the type resolution |
| // mechanism's fault. |
| // The schema containing the type and element declaration we're interested |
| // in is the second schema in the collection. |
| |
| XSDSchema inlineSchema = (XSDSchema)definition.getETypes().getSchemas().get(1); |
| |
| // The first and only component in this schema is an import. |
| |
| XSDImport xsdImport = (XSDImport)inlineSchema.getContents().get(0); |
| |
| // The imported schema was resolved when the resource was loaded. |
| // This is the schema containing our type/element. |
| |
| XSDSchema schema = xsdImport.getResolvedSchema(); |
| |
| // Now check to make sure the resolved type/element for the messages in |
| // the WSDL document |
| // are the ones in the schema and not some bogus ones. |
| |
| Iterator messagesIterator = definition.getEMessages().iterator(); |
| |
| while (messagesIterator.hasNext()) |
| { |
| Message message = (Message)messagesIterator.next(); |
| String name = message.getQName().getLocalPart(); |
| if (name.equals("testRequest")) //$NON-NLS-1$ |
| { |
| // We know there is only one part in the message and it refers to a |
| // type. Make sure the type can be resolved. |
| |
| Part part = (Part)message.getEParts().get(0); |
| XSDTypeDefinition myType = part.getTypeDefinition(); |
| assertEquals(schema, myType.getContainer()); |
| } |
| else if (name.equals("testResponse")) //$NON-NLS-1$ |
| { |
| // We know there is only one part in the message and it refers to an |
| // element. |
| |
| Part part = (Part)message.getEParts().get(0); |
| XSDElementDeclaration myElement = part.getElementDeclaration(); |
| assertEquals(schema, myElement.getContainer()); |
| } |
| } |
| |
| } |
| catch (Exception e) |
| { |
| Assert.fail("Test failed due to an exception: " + e.getLocalizedMessage()); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=133953 |
| */ |
| public void testReturnsProperQNameForMIMEExtensibilityElements() |
| { |
| MIMEFactory factory = MIMEPackage.eINSTANCE.getMIMEFactory(); |
| |
| MIMEContent content = factory.createMIMEContent(); |
| QName contentElementType = content.getElementType(); |
| assertEquals(MIMEConstants.MIME_NAMESPACE_URI, contentElementType.getNamespaceURI()); |
| assertEquals(MIMEConstants.CONTENT_ELEMENT_TAG, contentElementType.getLocalPart()); |
| |
| MIMEMimeXml mimeXml = factory.createMIMEMimeXml(); |
| QName mimeXmlElementType = mimeXml.getElementType(); |
| assertEquals(MIMEConstants.MIME_NAMESPACE_URI, mimeXmlElementType.getNamespaceURI()); |
| assertEquals(MIMEConstants.MIME_XML_ELEMENT_TAG, mimeXmlElementType.getLocalPart()); |
| |
| MIMEMultipartRelated multipartRelated = factory.createMIMEMultipartRelated(); |
| QName multipartRelatedElementType = multipartRelated.getElementType(); |
| assertEquals(MIMEConstants.MIME_NAMESPACE_URI, multipartRelatedElementType.getNamespaceURI()); |
| assertEquals(MIMEConstants.MULTIPART_RELATED_ELEMENT_TAG, multipartRelatedElementType.getLocalPart()); |
| |
| MIMEPart part = factory.createMIMEPart(); |
| QName partElementType = part.getElementType(); |
| assertEquals(MIMEConstants.MIME_NAMESPACE_URI, partElementType.getNamespaceURI()); |
| assertEquals(MIMEConstants.PART_ELEMENT_TAG, partElementType.getLocalPart()); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=137040 |
| */ |
| public void testPlacesImportsAfterTheDefinitionElement() |
| { |
| WSDLFactory factory = WSDLPackage.eINSTANCE.getWSDLFactory(); |
| |
| String namespace = "testNamespace"; //$NON-NLS-1$ |
| |
| Definition definition = factory.createDefinition(); |
| definition.setQName(new QName(namespace, "testDefinition")); //$NON-NLS-1$ |
| definition.updateElement(); |
| |
| Service service = factory.createService(); |
| service.setQName(new QName(namespace, "testService")); //$NON-NLS-1$ |
| definition.addService(service); |
| |
| Import wsdlImport = factory.createImport(); |
| definition.addImport(wsdlImport); |
| |
| Element definitionElement = definition.getElement(); |
| Element serviceElement = service.getElement(); |
| Element importElement = wsdlImport.getElement(); |
| |
| NodeList definitionElementChildren = definitionElement.getChildNodes(); |
| |
| Node firstChild = definitionElementChildren.item(0); |
| |
| assertSame(importElement, firstChild); |
| |
| Node secondChild = definitionElementChildren.item(1); |
| |
| assertSame(serviceElement, secondChild); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=137866 |
| */ |
| public void testResolvesElementInImports() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/WSDLElementResolution/main.wsdl"); //$NON-NLS-1$ |
| |
| String targetNamespace = "http://www.example.com"; //$NON-NLS-1$ |
| |
| // This test attempts to locate a message located in the first level |
| // import. |
| |
| QName firstLevelMessageQName = new QName(targetNamespace, "testINPUTmessage"); //$NON-NLS-1$ |
| javax.wsdl.Message firstLevelMessage = definition.getMessage(firstLevelMessageQName); |
| |
| assertNotNull(firstLevelMessage); |
| |
| // This test attempts to locate a message located in the second level |
| // import. |
| |
| QName secondLevelMessageQName = new QName(targetNamespace, "testOUTPUTmessage"); //$NON-NLS-1$ |
| javax.wsdl.Message secondLevelMessage = definition.getMessage(secondLevelMessageQName); |
| |
| assertNotNull(secondLevelMessage); |
| |
| // This test ensures that we do a breadth first traversal to keep things |
| // working approximatively as the old implementation which used to check |
| // only the definition and its first level imports. The first message is |
| // defined in firstlevel.wsdl as well as secondlevel.wsdl but the |
| // algorithm should find the one in firstlevel.wsdl. |
| |
| Import firstLevelImport = (Import)definition.getImports(targetNamespace).get(0); |
| Definition firstLevelDefinition = firstLevelImport.getEDefinition(); |
| |
| assertEquals(firstLevelDefinition, ((Message)firstLevelMessage).getEnclosingDefinition()); |
| } |
| catch (Exception e) |
| { |
| Assert.fail("Test failed due to an exception: " + e.getLocalizedMessage()); //$NON-NLS-1$ |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=137990 |
| */ |
| public void testSerializesPartsInSOAPBody() |
| { |
| // Build an in-memory WSDL definition. |
| |
| WSDLFactory factory = WSDLPackage.eINSTANCE.getWSDLFactory(); |
| |
| String targetNamespace = "testNamespace"; //$NON-NLS-1$ |
| |
| Definition definition = factory.createDefinition(); |
| definition.setTargetNamespace(targetNamespace); |
| definition.setQName(new QName(targetNamespace, "testDefinition")); //$NON-NLS-1$ |
| definition.addNamespace("tns", targetNamespace); //$NON-NLS-1$ |
| definition.addNamespace("xsd", XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001); //$NON-NLS-1$ |
| definition.addNamespace("soap", SOAPConstants.SOAP_NAMESPACE_URI); //$NON-NLS-1$ |
| |
| Message message = factory.createMessage(); |
| QName messageQName = new QName(targetNamespace, "testMessage"); |
| message.setQName(messageQName); |
| definition.addMessage(message); |
| |
| Part part1 = factory.createPart(); |
| String part1Name = "part1"; //$NON-NLS-1$ |
| part1.setName(part1Name); |
| part1.setTypeName(new QName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "string")); //$NON-NLS-1$ |
| message.addPart(part1); |
| |
| Part part2 = factory.createPart(); |
| String part2Name = "part2"; //$NON-NLS-1$ |
| part2.setName(part2Name); |
| part2.setTypeName(new QName(XSDConstants.SCHEMA_FOR_SCHEMA_URI_2001, "string")); //$NON-NLS-1$ |
| message.addPart(part2); |
| |
| PortType portType = factory.createPortType(); |
| QName portQName = new QName(targetNamespace, "testPort"); //$NON-NLS-1$ |
| portType.setQName(portQName); |
| definition.addPortType(portType); |
| |
| Operation operation = factory.createOperation(); |
| String operationName = "testOperation"; //$NON-NLS-1$ |
| operation.setName(operationName); |
| portType.addOperation(operation); |
| |
| Input input = factory.createInput(); |
| input.setMessage(message); |
| operation.setInput(input); |
| |
| Binding binding = factory.createBinding(); |
| QName bindingQName = new QName(targetNamespace, "testBinding"); //$NON-NLS-1$ |
| binding.setQName(bindingQName); |
| binding.setPortType(portType); |
| definition.addBinding(binding); |
| |
| BindingOperation bindingOperation = factory.createBindingOperation(); |
| bindingOperation.setOperation(operation); |
| binding.addBindingOperation(bindingOperation); |
| |
| BindingInput bindingInput = factory.createBindingInput(); |
| bindingOperation.setBindingInput(bindingInput); |
| |
| SOAPFactory soapFactory = SOAPPackage.eINSTANCE.getSOAPFactory(); |
| SOAPBody soapBody = soapFactory.createSOAPBody(); |
| bindingInput.addExtensibilityElement(soapBody); |
| |
| definition.updateElement(); |
| |
| // Test the "no parts" scenario. In this case the parts attribute should not |
| // be present. |
| |
| Element soapBodyElement = soapBody.getElement(); |
| Attr partsAttributeNode = soapBodyElement.getAttributeNode(SOAPConstants.PARTS_ATTRIBUTE); |
| assertNull(partsAttributeNode); |
| |
| // Test the scenario when the body specifies one part. In this case the |
| // parts attribute |
| // should be present and look like this parts="part1" |
| |
| List parts = new ArrayList(); |
| parts.add(part1); |
| soapBody.setParts(parts); |
| |
| soapBody.updateElement(); |
| |
| soapBodyElement = soapBody.getElement(); |
| String partsAttributeValue = soapBodyElement.getAttribute(SOAPConstants.PARTS_ATTRIBUTE); |
| assertEquals(part1Name, partsAttributeValue); |
| |
| // Test the scenario when the body specifies two parts. In this case the |
| // parts attribute |
| // should be present and look like this parts="part1 part2" |
| |
| parts.add(part2); |
| soapBody.setParts(parts); |
| |
| soapBody.updateElement(); |
| |
| soapBodyElement = soapBody.getElement(); |
| partsAttributeValue = soapBodyElement.getAttribute(SOAPConstants.PARTS_ATTRIBUTE); |
| assertEquals(part1Name + " " + part2Name, partsAttributeValue); //$NON-NLS-1$ |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=138033 |
| */ |
| public void testSerializesImportsBeforeTypes() |
| { |
| WSDLFactory factory = WSDLPackage.eINSTANCE.getWSDLFactory(); |
| |
| String namespace = "testNamespace"; //$NON-NLS-1$ |
| |
| Definition definition = factory.createDefinition(); |
| definition.setQName(new QName(namespace, "testDefinition")); //$NON-NLS-1$ |
| definition.updateElement(); |
| |
| Types types = factory.createTypes(); |
| definition.setTypes(types); |
| |
| Import wsdlImport = factory.createImport(); |
| definition.addImport(wsdlImport); |
| |
| Element definitionElement = definition.getElement(); |
| Element typesElement = types.getElement(); |
| Element importElement = wsdlImport.getElement(); |
| |
| NodeList definitionElementChildren = definitionElement.getChildNodes(); |
| |
| Node firstChild = definitionElementChildren.item(0); |
| |
| assertSame(importElement, firstChild); |
| |
| Node secondChild = definitionElementChildren.item(1); |
| |
| assertSame(typesElement, secondChild); |
| |
| // Blow away the backing DOM. |
| |
| definition.setElement(null); |
| definition.updateElement(); |
| |
| definitionElement = definition.getElement(); |
| typesElement = types.getElement(); |
| importElement = wsdlImport.getElement(); |
| |
| definitionElementChildren = definitionElement.getChildNodes(); |
| |
| firstChild = definitionElementChildren.item(0); |
| |
| assertSame(importElement, firstChild); |
| |
| secondChild = definitionElementChildren.item(1); |
| |
| assertSame(typesElement, secondChild); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=245263 |
| */ |
| public void testRemoveMessage() |
| { |
| try |
| { |
| // load a wsdl that imports another wsdl |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/WSDL4JRemove/RemoveViaWSDL4J.wsdl", true); //$NON-NLS-1$ |
| String targetNamespace = definition.getTargetNamespace(); |
| String importedTargetNamespace = "http://www.example.org/ImportMe/"; //$NON-NLS-1$ |
| int totalMessages = 5; |
| definition.updateElement(); |
| |
| // make sure wsdl was loaded properly |
| assertEquals("Initial messages were not properly loaded (checked via definition.getMessages())", totalMessages, definition.getMessages().size()); //$NON-NLS-1$ |
| assertEquals("Initial messages were not properly loaded (checked via definition.getEMessages())", totalMessages, definition.getEMessages().size()); //$NON-NLS-1$ |
| Element definitionElement = definition.getElement(); |
| NodeList messageElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.MESSAGE_ELEMENT_TAG); |
| assertEquals("Initial messages were not properly loaded (checked via DOM)", totalMessages, messageElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure message we're going to remove currently exists |
| QName messageQName = new QName(targetNamespace, "RemoveViaWSDL4JMessageExtra"); //$NON-NLS-1$ |
| javax.wsdl.Message message = definition.getMessage(messageQName); |
| assertNotNull("Unable to find RemoveViaWSDL4JMessageExtra", message); //$NON-NLS-1$ |
| |
| // remove the message |
| javax.wsdl.Message removedMessage = definition.removeMessage(messageQName); |
| assertEquals("Incorrect message removed", message, removedMessage); //$NON-NLS-1$ |
| |
| // make sure message is gone |
| javax.wsdl.Message nonexistMessage = definition.getMessage(messageQName); |
| assertNull("RemoveViaWSDL4JMessageExtra still exists in model", nonexistMessage); //$NON-NLS-1$ |
| |
| // make sure there is now 1 less message |
| assertEquals("Message was not removed (checked via definition.getMessages())", totalMessages-1, definition.getMessages().size()); //$NON-NLS-1$ |
| assertEquals("Message was not removed (checked via definition.getEMessages())", totalMessages-1, definition.getEMessages().size()); //$NON-NLS-1$ |
| definitionElement = definition.getElement(); |
| messageElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.MESSAGE_ELEMENT_TAG); |
| assertEquals("Message was not removed (checked via DOM)", totalMessages-1, messageElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure imported message we're going to remove currently exists |
| messageQName = new QName(importedTargetNamespace, "ImportMeMessageExtra"); //$NON-NLS-1$ |
| message = definition.getMessage(messageQName); |
| assertNotNull("Unable to find ImportMeMessageExtra", message); //$NON-NLS-1$ |
| |
| // attempt to remove the imported message |
| removedMessage = definition.removeMessage(messageQName); |
| assertNull("ImportMeMessageExtra was incorrectly removed", removedMessage); //$NON-NLS-1$ |
| |
| // make sure imported message still exists |
| message = definition.getMessage(messageQName); |
| assertNotNull("ImportMeMessageExtra no longer exists", message); //$NON-NLS-1$ |
| |
| nonexistMessage = definition.removeMessage(new QName(targetNamespace, "doesntexist")); //$NON-NLS-1$ |
| assertNull("A non-existing message was removed", nonexistMessage); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=245263 |
| */ |
| public void testRemoveService() |
| { |
| try |
| { |
| // load a wsdl that imports another wsdl |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/WSDL4JRemove/RemoveViaWSDL4J.wsdl", true); //$NON-NLS-1$ |
| String targetNamespace = definition.getTargetNamespace(); |
| String importedTargetNamespace = "http://www.example.org/ImportMe/"; //$NON-NLS-1$ |
| int totalServices = 2; |
| definition.updateElement(); |
| |
| // make sure wsdl was loaded properly |
| assertEquals("Initial services were not properly loaded (checked via definition.getServices())", totalServices, definition.getServices().size()); //$NON-NLS-1$ |
| assertEquals("Initial services were not properly loaded (checked via definition.getEServices())", totalServices, definition.getEServices().size()); //$NON-NLS-1$ |
| Element definitionElement = definition.getElement(); |
| NodeList serviceElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.SERVICE_ELEMENT_TAG); |
| assertEquals("Initial services were not properly loaded (checked via DOM)", totalServices, serviceElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure service we're going to remove currently exists |
| QName serviceQName = new QName(targetNamespace, "MainServiceExtra"); //$NON-NLS-1$ |
| javax.wsdl.Service service = definition.getService(serviceQName); |
| assertNotNull("Unable to find MainServiceExtra", service); //$NON-NLS-1$ |
| |
| // remove the service |
| javax.wsdl.Service removedService = definition.removeService(serviceQName); |
| assertEquals("Incorrect service removed", service, removedService); //$NON-NLS-1$ |
| |
| // make sure service is gone |
| javax.wsdl.Service nonexistService = definition.getService(serviceQName); |
| assertNull("MainServiceExtra still exists in model", nonexistService); //$NON-NLS-1$ |
| |
| // make sure there is now 1 less service |
| assertEquals("Service was not removed (checked via definition.getServices())", totalServices-1, definition.getServices().size()); //$NON-NLS-1$ |
| assertEquals("Service was not removed (checked via definition.getEServices())", totalServices-1, definition.getEServices().size()); //$NON-NLS-1$ |
| definitionElement = definition.getElement(); |
| serviceElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.SERVICE_ELEMENT_TAG); |
| assertEquals("Service was not removed (checked via DOM)", totalServices-1, serviceElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure imported service we're going to remove currently exists |
| serviceQName = new QName(importedTargetNamespace, "ImportServiceExtra"); //$NON-NLS-1$ |
| service = definition.getService(serviceQName); |
| assertNotNull("Unable to find ImportServiceExtra", service); //$NON-NLS-1$ |
| |
| // attempt to remove the imported service |
| removedService = definition.removeService(serviceQName); |
| assertNull("ImportServiceExtra was incorrectly removed", removedService); //$NON-NLS-1$ |
| |
| // make sure imported service still exists |
| service = definition.getService(serviceQName); |
| assertNotNull("ImportServiceExtra no longer exists", service); //$NON-NLS-1$ |
| |
| nonexistService = definition.removeService(new QName(targetNamespace, "doesntexist")); //$NON-NLS-1$ |
| assertNull("A non-existing service was removed", nonexistService); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=245263 |
| */ |
| public void testRemoveBinding() |
| { |
| try |
| { |
| // load a wsdl that imports another wsdl |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/WSDL4JRemove/RemoveViaWSDL4J.wsdl", true); //$NON-NLS-1$ |
| String targetNamespace = definition.getTargetNamespace(); |
| String importedTargetNamespace = "http://www.example.org/ImportMe/"; //$NON-NLS-1$ |
| int totalBindings = 2; |
| definition.updateElement(); |
| |
| // make sure wsdl was loaded properly |
| assertEquals("Initial bindings were not properly loaded (checked via definition.getBindings())", totalBindings, definition.getBindings().size()); //$NON-NLS-1$ |
| assertEquals("Initial bindings were not properly loaded (checked via definition.getEBindings())", totalBindings, definition.getEBindings().size()); //$NON-NLS-1$ |
| Element definitionElement = definition.getElement(); |
| NodeList bindingElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.BINDING_ELEMENT_TAG); |
| assertEquals("Initial bindings were not properly loaded (checked via DOM)", totalBindings, bindingElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure binding we're going to remove currently exists |
| QName bindingQName = new QName(targetNamespace, "MainBindingExtra"); //$NON-NLS-1$ |
| javax.wsdl.Binding binding = definition.getBinding(bindingQName); |
| assertNotNull("Unable to find MainBindingExtra", binding); //$NON-NLS-1$ |
| |
| // remove the binding |
| javax.wsdl.Binding removedBinding = definition.removeBinding(bindingQName); |
| assertEquals("Incorrect binding removed", binding, removedBinding); //$NON-NLS-1$ |
| |
| // make sure binding is gone |
| javax.wsdl.Binding nonexistBinding = definition.getBinding(bindingQName); |
| assertNull("MainBindingExtra still exists in model", nonexistBinding); //$NON-NLS-1$ |
| |
| // make sure there is now 1 less binding |
| assertEquals("Binding was not removed (checked via definition.getBindings())", totalBindings-1, definition.getBindings().size()); //$NON-NLS-1$ |
| assertEquals("Binding was not removed (checked via definition.getEBindings())", totalBindings-1, definition.getEBindings().size()); //$NON-NLS-1$ |
| definitionElement = definition.getElement(); |
| bindingElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.BINDING_ELEMENT_TAG); |
| assertEquals("Binding was not removed (checked via DOM)", totalBindings-1, bindingElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure imported binding we're going to remove currently exists |
| bindingQName = new QName(importedTargetNamespace, "ImportBindingExtra"); //$NON-NLS-1$ |
| binding = definition.getBinding(bindingQName); |
| assertNotNull("Unable to find ImportBindingExtra", binding); //$NON-NLS-1$ |
| |
| // attempt to remove the imported binding |
| removedBinding = definition.removeBinding(bindingQName); |
| assertNull("ImportBindingExtra was incorrectly removed", removedBinding); //$NON-NLS-1$ |
| |
| // make sure imported binding still exists |
| binding = definition.getBinding(bindingQName); |
| assertNotNull("ImportBindingExtra no longer exists", binding); //$NON-NLS-1$ |
| |
| nonexistBinding = definition.removeBinding(new QName(targetNamespace, "doesntexist")); //$NON-NLS-1$ |
| assertNull("A non-existing binding was removed", nonexistBinding); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=245263 |
| */ |
| public void testRemovePortType() |
| { |
| try |
| { |
| // load a wsdl that imports another wsdl |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/WSDL4JRemove/RemoveViaWSDL4J.wsdl", true); //$NON-NLS-1$ |
| String targetNamespace = definition.getTargetNamespace(); |
| String importedTargetNamespace = "http://www.example.org/ImportMe/"; //$NON-NLS-1$ |
| int totalPortTypes = 2; |
| definition.updateElement(); |
| |
| // make sure wsdl was loaded properly |
| assertEquals("Initial port types were not properly loaded (checked via definition.getPortTypes())", totalPortTypes, definition.getPortTypes().size()); //$NON-NLS-1$ |
| assertEquals("Initial port types were not properly loaded (checked via definition.getEPortTypes())", totalPortTypes, definition.getEPortTypes().size()); //$NON-NLS-1$ |
| Element definitionElement = definition.getElement(); |
| NodeList portTypeElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.PORT_TYPE_ELEMENT_TAG); |
| assertEquals("Initial port types were not properly loaded (checked via DOM)", totalPortTypes, portTypeElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure port type we're going to remove currently exists |
| QName portTypeQName = new QName(targetNamespace, "MainPortTypeExtra"); //$NON-NLS-1$ |
| javax.wsdl.PortType portType = definition.getPortType(portTypeQName); |
| assertNotNull("Unable to find MainPortTypeExtra", portType); //$NON-NLS-1$ |
| |
| // remove the portType |
| javax.wsdl.PortType removedPortType = definition.removePortType(portTypeQName); |
| assertEquals("Incorrect portType removed", portType, removedPortType); //$NON-NLS-1$ |
| |
| // make sure portType is gone |
| javax.wsdl.PortType nonexistPortType = definition.getPortType(portTypeQName); |
| assertNull("MainPortTypeExtra still exists in model", nonexistPortType); //$NON-NLS-1$ |
| |
| // make sure there is now 1 less portType |
| assertEquals("PortType was not removed (checked via definition.getPortTypes())", totalPortTypes-1, definition.getPortTypes().size()); //$NON-NLS-1$ |
| assertEquals("PortType was not removed (checked via definition.getEPortTypes())", totalPortTypes-1, definition.getEPortTypes().size()); //$NON-NLS-1$ |
| definitionElement = definition.getElement(); |
| portTypeElements = definitionElement.getElementsByTagNameNS(WSDLConstants.WSDL_NAMESPACE_URI, WSDLConstants.PORT_TYPE_ELEMENT_TAG); |
| assertEquals("PortType was not removed (checked via DOM)", totalPortTypes-1, portTypeElements.getLength()); //$NON-NLS-1$ |
| |
| // make sure imported portType we're going to remove currently exists |
| portTypeQName = new QName(importedTargetNamespace, "ImportPortTypeExtra"); //$NON-NLS-1$ |
| portType = definition.getPortType(portTypeQName); |
| assertNotNull("Unable to find ImportPortTypeExtra", portType); //$NON-NLS-1$ |
| |
| // attempt to remove the imported portType |
| removedPortType = definition.removePortType(portTypeQName); |
| assertNull("ImportPortTypeExtra was incorrectly removed", removedPortType); //$NON-NLS-1$ |
| |
| // make sure imported portType still exists |
| portType = definition.getPortType(portTypeQName); |
| assertNotNull("ImportPortTypeExtra no longer exists", portType); //$NON-NLS-1$ |
| |
| nonexistPortType = definition.removePortType(new QName(targetNamespace, "doesntexist")); //$NON-NLS-1$ |
| assertNull("A non-existing portType was removed", nonexistPortType); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=150553 |
| */ |
| public void testSupportsLocalNamespacePrefixes() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/LocalNamespace/LocalNamespace.wsdl"); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| String targetNamespace = "http://tempuri.org/Simple/"; //$NON-NLS-1$ |
| |
| // Check that the response message's part element is resolved OK. |
| |
| QName responseMessageQName = new QName(targetNamespace, "myOperationResponse"); ////$NON-NLS-1$ |
| javax.wsdl.Message responseMessage = definition.getMessage(responseMessageQName); |
| |
| Part responsePart = (Part)responseMessage.getPart("myOperationResponse"); ////$NON-NLS-1$ |
| |
| XSDElementDeclaration responseElementDeclaration = responsePart.getElementDeclaration(); |
| |
| assertNotNull(responseElementDeclaration); |
| assertNotNull(responseElementDeclaration.getContainer()); |
| |
| // Check that the request message's part element is resolved OK. |
| // This part defines a local namespace prefix |
| |
| QName requestMessageQName = new QName(targetNamespace, "myOperationRequest"); ////$NON-NLS-1$ |
| javax.wsdl.Message requestMessage = definition.getMessage(requestMessageQName); |
| |
| Part requestPart = (Part)requestMessage.getPart("myOperationRequest"); ////$NON-NLS-1$ |
| |
| XSDElementDeclaration requestElementDeclaration = requestPart.getElementDeclaration(); |
| |
| assertNotNull(requestElementDeclaration); |
| |
| // Now to make sure the DOM is reconciled properly and uses the local namespace prefix, |
| // let's try to change the part's element declaration. We'll use the response part element |
| // just because it is convenient. |
| |
| requestPart.setElementDeclaration(responseElementDeclaration); |
| |
| Element partElement = requestPart.getElement(); |
| String elementAttributeValue = partElement.getAttribute(WSDLConstants.ELEMENT_ATTRIBUTE); |
| |
| assertEquals(elementAttributeValue, "parttns:" + responseElementDeclaration.getName()); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=157107 |
| */ |
| public void testTolleratesExtensionElementsForOperation() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/OperationStyle/OperationStyleTest.wsdl"); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| PortType portType = (PortType)definition.getEPortTypes().get(0); |
| EList operations = portType.getEOperations(); |
| |
| Operation operation = (Operation)operations.get(0); |
| OperationType operationType = operation.getStyle(); |
| |
| assertEquals(OperationType.REQUEST_RESPONSE, operationType); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=164565 |
| */ |
| public void testReconcilesBindingFaults() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/BindingFaultReconciliation/BindingFaultSample.wsdl"); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| // Test the abnormal case when the binding operation tries to bind a fault |
| // but the fault is missing in the corresponding operation. In this case the |
| // fault obtained from the binding operation's fault should be null. |
| |
| List bindings = definition.getEBindings(); |
| Binding binding = (Binding)bindings.get(0); |
| List bindingOperations = binding.getBindingOperations(); |
| BindingOperation bindingOperation = (BindingOperation)bindingOperations.get(0); |
| BindingFault bindingFault = (BindingFault)bindingOperation.getBindingFault("Operation1Fault"); //$NON-NLS-1$ |
| Fault fault = bindingFault.getEFault(); |
| assertNull(fault); |
| |
| // Test the normal case when the operation and binding operation are in |
| // synch. In this case the fault defined in the operation should match |
| // the one obtained from the binding operation's fault. |
| |
| List portTypes = definition.getEPortTypes(); |
| PortType portType = (PortType)portTypes.get(0); |
| EList operations = portType.getEOperations(); |
| |
| Operation operation = (Operation)operations.get(1); |
| javax.wsdl.Fault expectedFault1 = operation.getFault("Operation2Fault1"); //$NON-NLS-1$ |
| javax.wsdl.Fault expectedFault2 = operation.getFault("Operation2Fault2"); //$NON-NLS-1$ |
| |
| BindingOperation bindingOperation2 = (BindingOperation)bindingOperations.get(1); |
| |
| // Make sure the fault obtained from the binding fault is not null and |
| // matches the one in the corresponding operation. |
| |
| BindingFault bindingFault1 = (BindingFault)bindingOperation2.getBindingFault("Operation2Fault1"); //$NON-NLS-1$ |
| javax.wsdl.Fault actualFault1 = bindingFault1.getEFault(); |
| assertNotNull(actualFault1); |
| assertEquals(expectedFault1, actualFault1); |
| |
| // Make sure the fault obtained from the binding fault is not null and |
| // matches the one in the corresponding operation. |
| |
| BindingFault bindingFault2 = (BindingFault)bindingOperation2.getBindingFault("Operation2Fault2"); //$NON-NLS-1$ |
| javax.wsdl.Fault actualFault2 = bindingFault2.getEFault(); |
| assertNotNull(actualFault2); |
| assertEquals(expectedFault2, actualFault2); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=161059 |
| */ |
| public void testAvoidDuplicateSAXExceptionDiagnostics() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| // Make sure we track location to allow the WSDLParser to kick in. |
| |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/DuplicateSAXException/SAXException.wsdl", true, true); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| Resource resource = definition.eResource(); |
| EList errors = resource.getErrors(); |
| int expectedSize = 1; |
| int actualSize = errors.size(); |
| assertEquals(expectedSize, actualSize); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=172576 |
| */ |
| public void testBindingOperationReconciliation() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH |
| + "samples/BugFixes/BindingOperationReconciliation/BindingOperationReconciliation.wsdl", true); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| String targetNamespace = "http://www.example.org/BindingOperationReconciliation/"; //$NON-NLS-1$ |
| QName portTypeQName = new QName(targetNamespace, "BindingOperationReconciliation"); //$NON-NLS-1$ |
| javax.wsdl.PortType portType = definition.getPortType(portTypeQName); |
| |
| String input3Name = "Input3"; //$NON-NLS-1$ |
| String output3Name = "Output3"; //$NON-NLS-1$ |
| |
| // Check that the first operation - which has no named input/output is being |
| // found. |
| |
| String operationName = "NewOperation"; //$NON-NLS-1$ |
| javax.wsdl.Operation operation1 = portType.getOperation(operationName, null, null); |
| |
| QName bindingQName = new QName(targetNamespace, "BindingOperationReconciliationSOAP"); //$NON-NLS-1$ |
| javax.wsdl.Binding binding = definition.getBinding(bindingQName); |
| |
| javax.wsdl.BindingOperation bindingOperation1 = binding.getBindingOperation(operationName, null, null); |
| javax.wsdl.Operation actualOperation1 = bindingOperation1.getOperation(); |
| |
| assertEquals(operation1, actualOperation1); |
| |
| // The second operation - which has no named input/output is being found |
| // should not be reconciled because the binding specifies the input and |
| // output. |
| |
| String input2Name = "Input2"; //$NON-NLS-1$ |
| String output2Name = "Output2"; //$NON-NLS-1$ |
| |
| String operation2Name = "NewOperation2"; //$NON-NLS-1$ |
| |
| javax.wsdl.BindingOperation bindingOperation2 = binding.getBindingOperation(operation2Name, input2Name, output2Name); |
| javax.wsdl.Operation actualOperation2 = bindingOperation2.getOperation(); |
| |
| assertEquals(null, actualOperation2); |
| |
| // The third operation specifies an input and output name, and the binding |
| // operation will reconcile fine because the it also specifies the proper |
| // input and output name. |
| |
| String operation3Name = "NewOperation3"; //$NON-NLS-1$ |
| javax.wsdl.Operation operation3 = portType.getOperation(operation3Name, input3Name, output3Name); |
| |
| javax.wsdl.BindingOperation bindingOperation3 = binding.getBindingOperation(operation3Name, input3Name, output3Name); |
| javax.wsdl.Operation actualOperation3 = bindingOperation3.getOperation(); |
| |
| assertEquals(operation3, actualOperation3); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=177852 |
| */ |
| public void testFullElementExtensibility() |
| { |
| |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/FullElementExtensibility/ExtendedWSDL.wsdl", true); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| String extensionsNamespaceURI = "http://www.example.org/Extensions/"; //$NON-NLS-1$ |
| EList imports = definition.getEImports(); |
| assertFalse(imports.isEmpty()); |
| Import theImport = (Import)imports.get(0); |
| checkExtension(theImport, extensionsNamespaceURI, "import"); //$NON-NLS-1$ |
| |
| EList messages = definition.getEMessages(); |
| assertFalse(messages.isEmpty()); |
| Message message = (Message)messages.get(0); |
| checkExtension(message, extensionsNamespaceURI, "message"); //$NON-NLS-1$ |
| |
| Part part = (Part)message.getPart("extendedPart"); //$NON-NLS-1$ |
| assertNotNull(part); |
| checkExtension(part, extensionsNamespaceURI, "part"); //$NON-NLS-1$ |
| |
| EList portTypes = definition.getEPortTypes(); |
| assertFalse(portTypes.isEmpty()); |
| PortType portType = (PortType)portTypes.get(0); |
| checkExtension(portType, extensionsNamespaceURI, "portType"); //$NON-NLS-1$ |
| |
| Operation operation = (Operation)portType.getOperation("extendedOperation", null, null); //$NON-NLS-1$ |
| assertNotNull(operation); |
| checkExtension(operation, extensionsNamespaceURI, "operation"); //$NON-NLS-1$ |
| |
| Input input = operation.getEInput(); |
| assertNotNull(input); |
| checkExtension(input, extensionsNamespaceURI, "input"); //$NON-NLS-1$ |
| |
| Output output = operation.getEOutput(); |
| assertNotNull(output); |
| checkExtension(output, extensionsNamespaceURI, "output"); //$NON-NLS-1$ |
| |
| Fault fault = (Fault)operation.getFault("extendedFault"); //$NON-NLS-1$ |
| assertNotNull(fault); |
| checkExtension(fault, extensionsNamespaceURI, "fault"); //$NON-NLS-1$ |
| } |
| |
| /** |
| * Checks the given extensible element to make sure that its assumed one and only extensibility element matches the given namespace and local name. |
| * @param extensibleElement the extensible element to test. |
| * @param extensionsNamespaceURI the expected namespace URI. |
| * @param elementName the expected element name. |
| */ |
| private void checkExtension(ExtensibleElement extensibleElement, String extensionsNamespaceURI, String elementName) |
| { |
| List extensibilityElements = extensibleElement.getExtensibilityElements(); |
| assertFalse(extensibilityElements.isEmpty()); |
| ExtensibilityElement extensibilityElement = (ExtensibilityElement)extensibilityElements.get(0); |
| QName elementType = extensibilityElement.getElementType(); |
| String nsURI = elementType.getNamespaceURI(); |
| String localPart = elementType.getLocalPart(); |
| assertEquals(extensionsNamespaceURI, nsURI); |
| assertEquals(localPart, elementName); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=174361 |
| */ |
| public void testTypesExtensibility() |
| { |
| |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/TypesExtensibility/TypesExtensibility.wsdl", true); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| Types types = definition.getETypes(); |
| List extensibilityElements = types.getExtensibilityElements(); |
| assertEquals(3, extensibilityElements.size()); |
| |
| String otherTypesNamespace = "http://www.example.org/OtherTypes/"; //$NON-NLS-1$ |
| |
| ExtensibilityElement extensibilityElement = (ExtensibilityElement)extensibilityElements.get(0); |
| QName elementType = extensibilityElement.getElementType(); |
| assertEquals(otherTypesNamespace, elementType.getNamespaceURI()); |
| assertEquals("typeDef", elementType.getLocalPart()); //$NON-NLS-1$ |
| |
| List schemas = types.getSchemas(); |
| assertEquals(1, schemas.size()); |
| |
| XSDSchemaExtensibilityElement schemaExtensibilityElement = (XSDSchemaExtensibilityElement)extensibilityElements.get(1); |
| XSDSchema schema = schemaExtensibilityElement.getSchema(); |
| assertNotNull(schema); |
| XSDElementDeclaration elementDeclaration = schema.resolveElementDeclaration("test"); //$NON-NLS-1$ |
| assertNotNull(elementDeclaration); |
| assertNotNull(elementDeclaration.getContainer()); |
| |
| extensibilityElement = (ExtensibilityElement)extensibilityElements.get(2); |
| elementType = extensibilityElement.getElementType(); |
| assertEquals(otherTypesNamespace, elementType.getNamespaceURI()); |
| assertEquals("typeDef", elementType.getLocalPart()); //$NON-NLS-1$ |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=178555 |
| */ |
| public void testAllowNullNamespaceURI() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/NullNamespaceURI/ContactInfoService.wsdl", true); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| String targetNamespace = "http://www.example.org/ContactInfoService"; //$NON-NLS-1$ |
| |
| // The element declaration for the output message part is specified in a |
| // schema with no target namespace. It should resolve fine and have a null |
| // namespace URI. |
| |
| QName output1QName = new QName(targetNamespace, "updatePhoneNumberResponseMsg"); //$NON-NLS-1$ |
| Message output1Message = (Message)definition.getMessage(output1QName); |
| assertNotNull(output1Message); |
| |
| Part part1 = (Part)output1Message.getPart("output1"); //$NON-NLS-1$ |
| assertNotNull(part1); |
| |
| QName output2ElementName = part1.getElementName(); |
| assertNotNull(output2ElementName); |
| assertEquals(XMLConstants.NULL_NS_URI, output2ElementName.getNamespaceURI()); |
| |
| XSDElementDeclaration output2ElementDeclaration = part1.getElementDeclaration(); |
| assertNotNull(output2ElementDeclaration); |
| assertNotNull(output2ElementDeclaration.getContainer()); |
| assertNull(output2ElementDeclaration.getTargetNamespace()); |
| |
| // The type definition for the output message part is specified in a |
| // schema with no target namespace. It should resolve fine and have a null |
| // namespace URI. |
| |
| QName output2QName = new QName(targetNamespace, "updateAddressResponseMsg"); //$NON-NLS-1$ |
| Message output2Message = (Message)definition.getMessage(output2QName); |
| assertNotNull(output2Message); |
| |
| Part part2 = (Part)output2Message.getPart("output2"); //$NON-NLS-1$ |
| assertNotNull(part1); |
| |
| QName output2TypeName = part2.getTypeName(); |
| assertNotNull(output2TypeName); |
| assertEquals(XMLConstants.NULL_NS_URI, output2TypeName.getNamespaceURI()); |
| |
| XSDTypeDefinition output2TypeDefinition = part2.getTypeDefinition(); |
| assertNotNull(output2TypeDefinition); |
| assertNotNull(output2TypeDefinition.getContainer()); |
| assertNull(output2TypeDefinition.getTargetNamespace()); |
| } |
| |
| /** |
| * https://bugs.eclipse.org/bugs/show_bug.cgi?id=104453 |
| */ |
| public void testLoadsNamelessDefinition() |
| { |
| try |
| { |
| //Test with nameless definition |
| |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/LoadsNamelessDefinition/MissingName.wsdl"); |
| assertNull(definition.getQName()); |
| |
| //Test with named definition |
| |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/LoadsNamelessDefinition/WithName.wsdl"); |
| assertNotNull(definition); |
| QName name = definition.getQName(); |
| assertNotNull(name); |
| assertEquals("WSDLFile", name.getLocalPart()); |
| } |
| catch (Exception e) |
| { |
| Assert.fail("Test failed due to an exception: " + e.getLocalizedMessage()); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=151674 |
| * @throws Exception |
| */ |
| public void testHandlesDocumentationElements() |
| { |
| try |
| { |
| // Load a sample WSDL document that has documentation elements in all allowed places. |
| |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/HandlesDocumentationElements/Documented.wsdl"); |
| |
| // Make sure imports are added after the documentation element. |
| |
| WSDLFactory factory = WSDLFactory.eINSTANCE; |
| Import anImport = factory.createImport(); |
| anImport.setNamespaceURI("http://www.test.com"); |
| definition.addImport(anImport); |
| |
| Element definitionDocumentationElement = definition.getDocumentationElement(); |
| assertNotNull(definitionDocumentationElement); |
| Element expectedImportElement = getNextElement(definitionDocumentationElement); |
| Element importElement = anImport.getElement(); |
| assertEquals(importElement, expectedImportElement); |
| |
| // This is a bit overkill since the documentation elements are handled in the base class WSDLElementImpl but... |
| |
| // Make sure new message parts are added after the documentation element and as the last element. |
| |
| Message aMessage = (Message)definition.getEMessages().get(0); |
| Part newPart = factory.createPart(); |
| aMessage.addPart(newPart); |
| |
| Element messageElement = aMessage.getElement(); |
| |
| Element messageDocumentationElement = aMessage.getDocumentationElement(); |
| assertNotNull(messageDocumentationElement); |
| Element firstChildElement = getFirstChildElement(messageElement); |
| assertEquals(messageDocumentationElement, firstChildElement); |
| |
| Element partElement = newPart.getElement(); |
| Element lastChildElement = getLastChildElement(messageElement); |
| assertEquals(partElement, lastChildElement); |
| |
| // Make sure new operations are added after the documentation element and as the last element. |
| |
| PortType portType = (PortType)definition.getEPortTypes().get(0); |
| Operation newOperation = factory.createOperation(); |
| portType.addOperation(newOperation); |
| |
| Element portTypeElement = portType.getElement(); |
| |
| Element portTypeDocumentationElement = portType.getDocumentationElement(); |
| assertNotNull(portTypeDocumentationElement); |
| firstChildElement = getFirstChildElement(portTypeElement); |
| assertEquals(portTypeDocumentationElement, firstChildElement); |
| |
| Element newOperationElement = newOperation.getElement(); |
| lastChildElement = getLastChildElement(portTypeElement); |
| assertEquals(newOperationElement, lastChildElement); |
| |
| // Make sure the output element is added after the documentation element and as the last element. |
| |
| Operation operation = (Operation)portType.getEOperations().get(0); |
| Output output = factory.createOutput(); |
| operation.setOutput(output); |
| |
| Element operationElement = operation.getElement(); |
| |
| Element operationDocumentationElement = operation.getDocumentationElement(); |
| assertNotNull(operationDocumentationElement); |
| firstChildElement = getFirstChildElement(operationElement); |
| assertEquals(operationDocumentationElement, firstChildElement); |
| |
| Element outputElement = output.getElement(); |
| lastChildElement = getLastChildElement(operationElement); |
| assertEquals(outputElement, lastChildElement); |
| } |
| catch (Exception e) |
| { |
| Assert.fail("Test failed due to an exception: " + e.getLocalizedMessage()); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=198390 |
| */ |
| public void testSupportsLocalNSForExtensibilityElements() |
| { |
| try |
| { |
| String uri = PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/LocalNamespace/LocalNamespace2.wsdl"; //$NON-NLS-1$ |
| javax.wsdl.factory.WSDLFactory factory = WSDLPlugin.INSTANCE.createWSDL4JFactory(); |
| WSDLReader wsdlReader = factory.newWSDLReader(); |
| javax.wsdl.Definition definition = wsdlReader.readWSDL(uri); |
| |
| String targetNamespace = "http://www.example.org/example/"; //$NON-NLS-1$ |
| |
| // Test a local SOAP namespace prefix declaration. |
| |
| QName bindingQName = new QName(targetNamespace, "exampleSOAP"); //$NON-NLS-1$ |
| javax.wsdl.Binding binding = definition.getBinding(bindingQName); |
| assertNotNull(binding); |
| List extensibilityElements = binding.getExtensibilityElements(); |
| assertEquals(1, extensibilityElements.size()); |
| ExtensibilityElement soapBinding = (ExtensibilityElement)extensibilityElements.get(0); |
| assertNotNull(soapBinding); |
| QName bindingElementType = soapBinding.getElementType(); |
| assertNotNull(bindingElementType); |
| String localPart = bindingElementType.getLocalPart(); |
| assertEquals(SOAPConstants.BINDING_ELEMENT_TAG, localPart); |
| String namespaceURI = bindingElementType.getNamespaceURI(); |
| assertEquals(SOAPConstants.SOAP_NAMESPACE_URI, namespaceURI); |
| assertTrue(soapBinding instanceof javax.wsdl.extensions.soap.SOAPBinding); |
| |
| // Test a default SOAP namespace declaration at the port level. |
| |
| QName serviceQName = new QName(targetNamespace, "example"); //$NON-NLS-1$ |
| javax.wsdl.Service service = definition.getService(serviceQName); |
| Port port = service.getPort("exampleSOAP"); |
| extensibilityElements = port.getExtensibilityElements(); |
| assertEquals(1, extensibilityElements.size()); |
| ExtensibilityElement soapAddress = (ExtensibilityElement)extensibilityElements.get(0); |
| assertNotNull(soapAddress); |
| QName portElementType = soapAddress.getElementType(); |
| assertNotNull(portElementType); |
| localPart = portElementType.getLocalPart(); |
| assertEquals(SOAPConstants.ADDRESS_ELEMENT_TAG, localPart); |
| namespaceURI = portElementType.getNamespaceURI(); |
| assertEquals(SOAPConstants.SOAP_NAMESPACE_URI, namespaceURI); |
| assertTrue(soapAddress instanceof javax.wsdl.extensions.soap.SOAPAddress); |
| } |
| catch (WSDLException e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| private Element getNextElement(Element anElement) |
| { |
| Node node = anElement.getNextSibling(); |
| while (node != null && node.getNodeType() != Node.ELEMENT_NODE) |
| { |
| node = node.getNextSibling(); |
| } |
| return (Element)node; |
| } |
| |
| private Element getFirstChildElement(Element anElement) |
| { |
| Node node = anElement.getFirstChild(); |
| while (node != null && node.getNodeType() != Node.ELEMENT_NODE) |
| { |
| node = node.getNextSibling(); |
| } |
| return (Element)node; |
| } |
| |
| private Element getLastChildElement(Element anElement) |
| { |
| Node node = anElement.getLastChild(); |
| while (node != null && node.getNodeType() != Node.ELEMENT_NODE) |
| { |
| node = node.getPreviousSibling(); |
| } |
| return (Element)node; |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=208485 |
| */ |
| public void testInlineTypesFromImportsAreVisible() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/InlineTypesFromImportsAreVisible/A.wsdl"); //$NON-NLS-1$ |
| String targetNamespace = "http://A"; //$NON-NLS-1$ |
| QName messageQName = new QName(targetNamespace, "message" ); //$NON-NLS-1$ |
| javax.wsdl.Message message = definition.getMessage(messageQName); |
| assertNotNull(message); |
| Part part = (Part)message.getPart("parameters"); //$NON-NLS-1$ |
| assertNotNull(part); |
| XSDTypeDefinition typeDefinition = part.getTypeDefinition(); |
| assertNotNull(typeDefinition); |
| String namespace = typeDefinition.getTargetNamespace(); |
| assertEquals("http://B", namespace); |
| assertEquals("BType", typeDefinition.getName()); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=194096 |
| */ |
| public void testPropagatesTargetNamespaceChange() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/TargetNamespace/TargetNamespace.wsdl", true); //$NON-NLS-1$ |
| |
| String oldTargetNamespace = definition.getTargetNamespace(); |
| |
| QName messageQName = new QName(oldTargetNamespace, "NewOperationRequest"); |
| javax.wsdl.Message message = definition.getMessage(messageQName); |
| assertNotNull(message); |
| |
| QName portTypeQName = new QName(oldTargetNamespace, "TargetNamespace"); |
| javax.wsdl.PortType portType = definition.getPortType(portTypeQName); |
| assertNotNull(portType); |
| |
| QName bindingQName = new QName(oldTargetNamespace, "TargetNamespaceSOAP"); |
| javax.wsdl.Binding binding = definition.getBinding(bindingQName); |
| assertNotNull(binding); |
| |
| QName serviceQName = new QName(oldTargetNamespace, "TargetNamespace"); |
| javax.wsdl.Service service = definition.getService(serviceQName); |
| assertNotNull(service); |
| |
| String newTargetNamespace = "http://www.example.org/NewTargetNamespace/"; |
| definition.setTargetNamespace(newTargetNamespace); |
| Element definitionElement = definition.getElement(); |
| Attr targetNamespaceNode = definitionElement.getAttributeNode(WSDLConstants.TARGETNAMESPACE_ATTRIBUTE); |
| assertNotNull(targetNamespaceNode); |
| assertEquals(newTargetNamespace, targetNamespaceNode.getValue()); |
| |
| messageQName = new QName(newTargetNamespace, messageQName.getLocalPart()); |
| message = definition.getMessage(messageQName); |
| assertNotNull(message); |
| |
| portTypeQName = new QName(newTargetNamespace, portTypeQName.getLocalPart()); |
| portType = definition.getPortType(portTypeQName); |
| assertNotNull(portType); |
| |
| bindingQName = new QName(newTargetNamespace, bindingQName.getLocalPart()); |
| binding = definition.getBinding(bindingQName); |
| assertNotNull(binding); |
| |
| serviceQName = new QName(newTargetNamespace, serviceQName.getLocalPart()); |
| service = definition.getService(serviceQName); |
| assertNotNull(service); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=247296 |
| */ |
| public void testGetWSDLType() |
| { |
| try |
| { |
| // load a wsdl |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/GetWSDLType/BadImport.wsdl", true); //$NON-NLS-1$ |
| definition.updateElement(); |
| |
| // test all direct child elements of definition to make sure they are expected type |
| Element definitionElement = definition.getElement(); |
| int type = WSDLUtil.getInstance().getWSDLType(definitionElement); |
| assertEquals("Definition type incorrectly identified", WSDLConstants.DEFINITION, type); //$NON-NLS-1$ |
| |
| NodeList childNodes = definitionElement.getChildNodes(); |
| Node n = childNodes.item(0); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Import type incorrectly identified", WSDLConstants.IMPORT, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("xsd:import type incorrectly identified", -1, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Types type incorrectly identified", WSDLConstants.TYPES, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Message type incorrectly identified", WSDLConstants.MESSAGE, type); //$NON-NLS-1$ |
| n = n.getNextSibling(); |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Message type incorrectly identified", WSDLConstants.MESSAGE, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Port type type incorrectly identified", WSDLConstants.PORT_TYPE, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Binding type incorrectly identified", WSDLConstants.BINDING, type); //$NON-NLS-1$ |
| |
| n = n.getNextSibling(); |
| // skip over text node |
| if (n.getNodeType() != Node.ELEMENT_NODE) |
| n = n.getNextSibling(); |
| type = WSDLUtil.getInstance().getWSDLType((Element)n); |
| assertEquals("Service type incorrectly identified", WSDLConstants.SERVICE, type); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=247296 |
| */ |
| public void testInvalidXSDImports() |
| { |
| try |
| { |
| // load a wsdl that contains an xsd:import outside of wsdl:types |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/GetWSDLType/BadImport.wsdl", true); //$NON-NLS-1$ |
| |
| // there should only be one valid wsdl:import |
| Map imports = definition.getImports(); |
| assertEquals("Incorrect number of imports", 1, imports.size()); //$NON-NLS-1$ |
| |
| // the bad xsd:import should be considered an extensibility element |
| List extElements = definition.getExtensibilityElements(); |
| assertEquals("Incorrect number of extensibility elements", 1, extElements.size()); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/attachment.cgi?bugid=257279 |
| */ |
| public void testReconcileNonWSDLElements() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + |
| "samples/BugFixes/ReconcileNonWSDLElements/ReconcileNonWSDLElements.wsdl", true); //$NON-NLS-1$ |
| |
| Definition newDefinition = WSDLFactory.eINSTANCE.createDefinition(); |
| assertNotNull("The new definition cannot be null",newDefinition); |
| |
| // The namespace in the WSDL definition is not instances of WSDLElement, it is an |
| // instances of NamespaceImpl |
| newDefinition.addNamespace("wsdl", "http://example.org"); //$NON-NLS-1$ //$NON-NLS-2$ |
| newDefinition.updateElement(); |
| |
| Document newDocument = newDefinition.getDocument(); |
| assertNotNull("The new definition's document cannot be null",newDocument); //$NON-NLS-1$ |
| Types types = (Types)definition.getTypes(); |
| assertNotNull("The definition must have Types",types); //$NON-NLS-1$ |
| Node typesNode = (types.getElement()); |
| assertNotNull("The Types element cannot be null",typesNode); //$NON-NLS-1$ |
| Node toImport = newDocument.importNode(typesNode, true); |
| |
| // Append child will call org.eclipse.wst.wsdl.internal.impl.WSDLElementImpl.elementContentsChanged(Element) |
| // which changes isReconciling to true and calls |
| // org.eclipse.wst.wsdl.internal.impl.WSDLElementImpl.reconcileContents(Element) and changes isReconciling to |
| // false after. However, due to a ClassCast exception in reconcileContents, isReconciling is never changed to |
| // false. The result is newly added WSDL elements not showing up in the EMF model. |
| newDefinition.getElement().appendChild(toImport); |
| |
| // The bug would have set isReconciling to true and so messages will not be reconciled |
| assertNotNull("The definition must have messages",definition.getMessages()); //$NON-NLS-1$ |
| |
| Message messageToAdd = ((Message)definition.getMessage( |
| new QName("http://www.example.com/ReconcileNonWSDLElements/","NewOperationRequest"))); //$NON-NLS-1$ //$NON-NLS-2$ |
| Node messageNode = messageToAdd.getElement(); |
| assertNotNull("The message to add to the new definition cannot be null",messageNode); //$NON-NLS-1$ |
| Node toImport2 = newDefinition.getDocument().importNode(messageNode,false); |
| |
| assertTrue("No messages should exist",newDefinition.getEMessages().size() == 0); //$NON-NLS-1$ |
| newDefinition.getElement().appendChild(toImport2); |
| // The bug causes the message to be added |
| assertTrue("A message should have been added", newDefinition.getEMessages().size() == 1); //$NON-NLS-1$ |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/attachment.cgi?bugid=257279 |
| */ |
| public void testReconcilesImportsWithNoLocation() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + |
| "samples/BugFixes/ReconcilesImportsWithNoLocation/Main.wsdl", true); //$NON-NLS-1$ |
| assertNotNull(definition); |
| String targetNamespace = "http://www.example.org/B/"; |
| QName serviceQName = new QName(targetNamespace, "B"); |
| javax.wsdl.Service service = definition.getService(serviceQName); |
| assertNotNull(service); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=236404 |
| */ |
| public void testReconcilesExtensibleElements() |
| { |
| Definition definition = null; |
| |
| // The sample WSDL already has an <annotation> extensibility element for each extensible element |
| // We will loop through every extensible element and remove the annotation extensibility element |
| // and force the model to update, thus calling the reconciliation code. The expected result is that |
| // the annotation extensibility element will be removed in the model. |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/ReconcilesExtensibleElements/ExtensibleElementSample.wsdl"); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| // Definition |
| ensureExtensibilityElementRemoved(definition, 1); |
| |
| // Import |
| EList imports = definition.getEImports(); |
| Import myImport = (Import) imports.get(0); |
| ensureExtensibilityElementRemoved(myImport, 1); |
| |
| // Type: original is two because it has <annotation> and <schema> |
| Types types = definition.getETypes(); |
| ensureExtensibilityElementRemoved(types, 2); |
| |
| // Service |
| Service service = (Service)definition.getEServices().get(0); |
| ensureExtensibilityElementRemoved(service, 1); |
| |
| // Port |
| org.eclipse.wst.wsdl.Port port = (org.eclipse.wst.wsdl.Port)service.getEPorts().get(0); |
| ensureExtensibilityElementRemoved(port, 2); |
| |
| // Binding: original is 2 because it has <annotation> and <soap:binding> |
| Binding binding = port.getEBinding(); |
| ensureExtensibilityElementRemoved(binding, 2); |
| |
| // Binding Operation: original is 2 because it has <annotation> and <soap:operation> |
| List bindingOperations = binding.getBindingOperations(); |
| BindingOperation bindingOperation = (BindingOperation)bindingOperations.get(0); |
| ensureExtensibilityElementRemoved(bindingOperation, 2); |
| |
| // Binding Input: original is 2 because it has <annotation> and <soap:body> |
| BindingInput bindingInput = bindingOperation.getEBindingInput(); |
| ensureExtensibilityElementRemoved(bindingInput, 2); |
| |
| // Binding Output: original is 2 because it has <annotation> and <soap:body> |
| BindingOutput bindingOutput = bindingOperation.getEBindingOutput(); |
| ensureExtensibilityElementRemoved(bindingOutput, 2); |
| |
| // Binding Fault: original is 2 because it has <annotation> and <soap:fault> |
| EList bindingFaults = bindingOperation.getEBindingFaults(); |
| BindingFault bindingFault = (BindingFault)bindingFaults.get(0); |
| ensureExtensibilityElementRemoved(bindingFault, 2); |
| |
| // Port Type |
| PortType portType = binding.getEPortType(); |
| ensureExtensibilityElementRemoved(portType, 1); |
| |
| // Operation |
| EList operations = portType.getEOperations(); |
| Operation operation = (Operation) operations.get(0); |
| ensureExtensibilityElementRemoved(operation, 1); |
| |
| // Output |
| Output output = operation.getEOutput(); |
| ensureExtensibilityElementRemoved(output, 1); |
| |
| // Input |
| Input input = operation.getEInput(); |
| ensureExtensibilityElementRemoved(input, 1); |
| |
| // fault |
| EList faults = operation.getEFaults(); |
| Fault fault = (Fault) faults.get(0); |
| ensureExtensibilityElementRemoved(fault, 1); |
| |
| // Message |
| Message message = input.getEMessage(); |
| ensureExtensibilityElementRemoved(message, 1); |
| |
| // Part |
| EList parts = message.getEParts(); |
| Part part = (Part) parts.get(0); |
| ensureExtensibilityElementRemoved(part, 1); |
| } |
| |
| /** |
| * Remove the first UnknownExtensibilityElement. The expected result is original size will decrement by 1 |
| */ |
| private void ensureExtensibilityElementRemoved(ExtensibleElement extensibleElement, int originalSize) |
| { |
| List extensibilityElements = extensibleElement.getExtensibilityElements(); |
| assertEquals(originalSize, extensibilityElements.size()); |
| UnknownExtensibilityElement unknownExtensibilityElement = null; |
| Iterator extensibilityElementsIterator = extensibilityElements.iterator(); |
| while (extensibilityElementsIterator.hasNext()) |
| { |
| Object object = extensibilityElementsIterator.next(); |
| if (object instanceof UnknownExtensibilityElement) |
| { |
| unknownExtensibilityElement = (UnknownExtensibilityElement) object; |
| break; |
| } |
| } |
| |
| if (unknownExtensibilityElement == null) |
| { |
| fail("Cannot find the UnknownExtensibilityElement."); |
| } |
| Element element = unknownExtensibilityElement.getElement(); |
| extensibleElement.getElement().removeChild(element); |
| extensibleElement.elementChanged(extensibleElement.getElement()); |
| assertEquals(originalSize - 1, extensibilityElements.size()); |
| } |
| |
| public void testImportsWithNonStandardFileExtension() |
| { |
| String WSDL_NS = "http://www.example.org/ImportWithNonStandardWSDLFileExtension/wsdl0/"; //$NON-NLS-1$ |
| String XSD_NS = "http://www.example.org/NonStandardSchemaFileExtension/xsd0"; //$NON-NLS-1$ |
| |
| try |
| { |
| // load a wsdl that imports another WSDL with non-standard file extension (.wsdl0) which in turn |
| // imports a XSD with non-standard file extension (.xsd0) |
| // ImportWithNonStandardFileExtension.wsdl also imports a XSD (NonStandardSchemaFileExtension.xsd1) using <wsdl:import> |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/ImportsWithNonStandardFileExtension/ImportWithNonStandardFileExtension.wsdl", true); //$NON-NLS-1$ |
| |
| // there should only be two valid <wsdl:import>s - NonStandardWSDLFileExtension.wsdl0 and NonStandardSchemaFileExtension.xsd1 |
| EList imports = definition.getEImports(); |
| assertEquals("Incorrect number of imports", 2, imports.size()); //$NON-NLS-1$ |
| |
| |
| for (int i = 0; i < imports.size(); i++) { |
| Import myImport = (Import) imports.get(i); |
| assertTrue("Incorrect imported namespace", WSDL_NS.equals(myImport.getNamespaceURI()) || XSD_NS.equals(myImport.getNamespaceURI())); //$NON-NLS-1$ |
| if (WSDL_NS.equals(myImport.getNamespaceURI())) { |
| // WSDL import: make sure the binding in the imported NonStandardWSDLFileExtension.wsdl0 is resolved |
| Definition importedDefinition = myImport.getEDefinition(); |
| assertNotNull(importedDefinition); |
| Map bindings = importedDefinition.getBindings(); |
| assertEquals("Incorrect number of binding elements in imported WSDL", 1, bindings.size()); //$NON-NLS-1$ |
| |
| // Go to the resolved "NewType" complex type element and reads its testXSD0 attribute, and verify it's accessible. |
| List schemas = importedDefinition.getETypes().getSchemas(); |
| assertEquals(1, schemas.size()); |
| XSDSchema schema = (XSDSchema)schemas.get(0); |
| EList types = schema.getTypeDefinitions(); |
| assertEquals("Incorrect number of types definitions in the inline schema of the imported WSDL", 1, types.size()); //$NON-NLS-1$ |
| Object type = types.get(0); |
| assertTrue("Not complex type", type instanceof XSDComplexTypeDefinition); |
| XSDComplexTypeDefinition complexTypeDefinition = (XSDComplexTypeDefinition) type; |
| assertEquals("Incorrect name for the ComplexType imported from NonStandardSchemaFileExtension.xsd0", "NewType", complexTypeDefinition.getName()); //$NON-NLS-1$ $NON-NLS-2$ |
| String testAttribute = complexTypeDefinition.getElement().getAttribute("testXSD0"); |
| assertEquals("Incorrect test attribute for the ComplexType imported from NonStandardSchemaFileExtension.xsd0", "passed", testAttribute); //$NON-NLS-1$ $NON-NLS-2$ |
| } else { |
| // schema import: make sure the complex type in the imported NonStandardSchemaFileExtension.xsd1 is resolved |
| // Go to the resolved "ImportedTypeViaWSDLImport" complex type element and reads its testXSD1 attribute, and verify it's accessible. |
| XSDSchema schema = myImport.getESchema(); |
| EList types = schema.getTypeDefinitions(); |
| assertEquals("Incorrect number of types definitions in imported XSD", 1, types.size()); //$NON-NLS-1$ |
| |
| Object type = types.get(0); |
| assertTrue("Not complex type", type instanceof XSDComplexTypeDefinition); |
| XSDComplexTypeDefinition complexTypeDefinition = (XSDComplexTypeDefinition) type; |
| assertEquals("Incorrect name for the ComplexType imported from NonStandardSchemaFileExtension.xsd1", "ImportedTypeViaWSDLImport", complexTypeDefinition.getName()); //$NON-NLS-1$ $NON-NLS-2$ |
| String testAttribute = complexTypeDefinition.getElement().getAttribute("testXSD1"); //$NON-NLS-1$ |
| assertEquals("Incorrect test attribute for the ComplexType imported from NonStandardSchemaFileExtension.xsd1", "passed", testAttribute); //$NON-NLS-1$ $NON-NLS-2$ |
| } |
| } |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=314929 |
| */ |
| public void testSupportsLocalDefaultNamespace() |
| { |
| Definition definition = null; |
| |
| try |
| { |
| definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/LocalNamespace/LocalDefaultNamespace.wsdl"); //$NON-NLS-1$ |
| } |
| catch (IOException e) |
| { |
| fail(e.getMessage()); |
| } |
| |
| String targetNamespace = "http://www.example.org/LocalDefaultNamespace"; //$NON-NLS-1$ |
| |
| // Check that the response message's part element is resolved OK. |
| |
| QName responseMessageQName = new QName(targetNamespace, "TestResponseMessage"); //$NON-NLS-1$ |
| javax.wsdl.Message responseMessage = definition.getMessage(responseMessageQName); |
| |
| Part responsePart = (Part)responseMessage.getPart("parameters"); //$NON-NLS-1$ |
| |
| XSDElementDeclaration responseElementDeclaration = responsePart.getElementDeclaration(); |
| |
| assertNotNull(responseElementDeclaration); |
| assertNotNull(responseElementDeclaration.getContainer()); |
| |
| // Check that the request message's part element is resolved OK. |
| |
| QName requestMessageQName = new QName(targetNamespace, "TestRequestMessage"); //$NON-NLS-1$ |
| javax.wsdl.Message requestMessage = definition.getMessage(requestMessageQName); |
| |
| Part requestPart = (Part)requestMessage.getPart("parameters"); //$NON-NLS-1$ |
| |
| XSDElementDeclaration requestElementDeclaration = requestPart.getElementDeclaration(); |
| |
| assertNotNull(requestElementDeclaration); |
| |
| // Now to make sure the DOM is reconciled properly and uses the local namespace prefix, |
| // let's try to change the part's element declaration. We'll use the response part element |
| // just because it is convenient. |
| |
| requestPart.setElementDeclaration(responseElementDeclaration); |
| |
| Element partElement = requestPart.getElement(); |
| String elementAttributeValue = partElement.getAttribute(WSDLConstants.ELEMENT_ATTRIBUTE); |
| |
| assertEquals(elementAttributeValue, responseElementDeclaration.getName()); |
| } |
| |
| /** |
| * See https://bugs.eclipse.org/bugs/show_bug.cgi?id=322954 |
| */ |
| public void testReconcilesSOAPBodyPartsInMIMEBinding() |
| { |
| try |
| { |
| Definition definition = DefinitionLoader.load(PLUGIN_ABSOLUTE_PATH + "samples/BugFixes/SOAPBodyReconciliationForMIME/SOAPBodyForMIME.wsdl", true); //$NON-NLS-1$ |
| |
| checkSOAPBodyPartsInMIMEBinding(definition); |
| |
| definition.updateElement(true); |
| |
| checkSOAPBodyPartsInMIMEBinding(definition); |
| } |
| catch (Exception e) |
| { |
| e.printStackTrace(); |
| fail(); |
| } |
| } |
| |
| /** |
| * Called from {@link #testReconcilesSOAPBodyPartsInMIMEBinding()} |
| * @param definition the input WSDL definition. |
| */ |
| private void checkSOAPBodyPartsInMIMEBinding(Definition definition) |
| { |
| // Navigate to the SOAP body element. |
| |
| Binding binding = (Binding)definition.getEBindings().get(0); |
| List bindingOperations = binding.getBindingOperations(); |
| BindingOperation bindingOperation = (BindingOperation)bindingOperations.get(0); |
| javax.wsdl.BindingInput bindingInput = bindingOperation.getBindingInput(); |
| List extensibilityElements = bindingInput.getExtensibilityElements(); |
| MIMEMultipartRelated multipartRelated = (MIMEMultipartRelated)extensibilityElements.get(0); |
| EList mimeParts = multipartRelated.getEMIMEPart(); |
| MIMEPart mimePart = (MIMEPart)mimeParts.get(0); |
| List mimePartExtensibilityElements = mimePart.getExtensibilityElements(); |
| SOAPBody soapBody = (SOAPBody) mimePartExtensibilityElements.get(0); |
| |
| // The SOAP body has only one part |
| |
| List parts = soapBody.getParts(); |
| assertEquals(1, parts.size()); |
| |
| // The part name is part1 |
| |
| Part part = (Part)parts.get(0); |
| String expectedPartName = "part1"; //$NON-NLS-1$ |
| assertEquals(expectedPartName, part.getName()); |
| |
| // The DOM reflects the model structure. |
| |
| Element element = soapBody.getElement(); |
| String partsAttributeValue = element.getAttribute(SOAPConstants.PARTS_ATTRIBUTE); |
| assertEquals(expectedPartName, partsAttributeValue); //$NON-NLS-1$ |
| } |
| } |