diff options
author | kchong | 2005-08-31 21:26:15 +0000 |
---|---|---|
committer | kchong | 2005-08-31 21:26:15 +0000 |
commit | 2af529bb1199c0f3ba371bbe0f488bfad520e3b3 (patch) | |
tree | e6049472b60a3cf7204f1aa2a21aacbe28e23eed /bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl | |
parent | 604851c1ff84542812f25189d59399bf9c886f5d (diff) | |
download | webtools.webservices-2af529bb1199c0f3ba371bbe0f488bfad520e3b3.tar.gz webtools.webservices-2af529bb1199c0f3ba371bbe0f488bfad520e3b3.tar.xz webtools.webservices-2af529bb1199c0f3ba371bbe0f488bfad520e3b3.zip |
[79326] WSDL elements ordering problem durint serialization
Diffstat (limited to 'bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl')
8 files changed, 107 insertions, 57 deletions
diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java index 0a36555ae..1b46347b4 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingImpl.java @@ -749,22 +749,23 @@ public class BindingImpl extends ExtensibleElementImpl implements Binding { Element newElement = createElement(WSDLConstants.BINDING); setElement(newElement); - - Iterator iterator = getEBindingOperations().iterator(); + + Iterator iterator = getExtensibilityElements().iterator(); while (iterator.hasNext()) { - BindingOperation operation = (BindingOperation) iterator.next(); - Element child = ((BindingOperationImpl) operation).createElement(); + ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); + Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); newElement.appendChild(child); } - - iterator = getExtensibilityElements().iterator(); + + iterator = getEBindingOperations().iterator(); while (iterator.hasNext()) { - ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); - Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); + BindingOperation operation = (BindingOperation) iterator.next(); + Element child = ((BindingOperationImpl) operation).createElement(); newElement.appendChild(child); } + return newElement; } diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingInputImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingInputImpl.java index 54dbfccfb..31ea5225a 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingInputImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingInputImpl.java @@ -338,11 +338,14 @@ public class BindingInputImpl extends ExtensibleElementImpl implements BindingIn public void reconcileAttributes(Element changedElement) { - String name = changedElement.getAttribute("name"); - if (name != null) - { - setName(name); - } + if (changedElement.hasAttribute("name")) + { + String name = changedElement.getAttribute("name"); + if (name != null) + { + setName(name); + } + } } public void handleUnreconciledElement(Element child, Collection remainingModelObjects) diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java index 2f4c9e82d..b63c8c6c2 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOperationImpl.java @@ -747,6 +747,14 @@ public class BindingOperationImpl extends ExtensibleElementImpl implements Bindi Element newElement = createElement(WSDLConstants.OPERATION); setElement(newElement); + Iterator iterator = getExtensibilityElements().iterator(); + while (iterator.hasNext()) + { + ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); + Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); + newElement.appendChild(child); + } + BindingInput input = getEBindingInput(); if (input != null) { @@ -761,7 +769,7 @@ public class BindingOperationImpl extends ExtensibleElementImpl implements Bindi newElement.appendChild(child); } - Iterator iterator = getEBindingFaults().iterator(); + iterator = getEBindingFaults().iterator(); while (iterator.hasNext()) { BindingFault fault = (BindingFault) iterator.next(); @@ -769,14 +777,6 @@ public class BindingOperationImpl extends ExtensibleElementImpl implements Bindi newElement.appendChild(child); } - iterator = getExtensibilityElements().iterator(); - while (iterator.hasNext()) - { - ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); - Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); - newElement.appendChild(child); - } - return newElement; } diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOutputImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOutputImpl.java index a311b1a98..d350d911d 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOutputImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/BindingOutputImpl.java @@ -338,11 +338,14 @@ public class BindingOutputImpl extends ExtensibleElementImpl implements BindingO public void reconcileAttributes(Element changedElement) { - String name = changedElement.getAttribute("name"); - if (name != null) - { - setName(name); - } + if (changedElement.hasAttribute("name")) + { + String name = changedElement.getAttribute("name"); + if (name != null) + { + setName(name); + } + } } public void handleUnreconciledElement(Element child, Collection remainingModelObjects) diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/DefinitionImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/DefinitionImpl.java index bc1d74134..e4604c4ed 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/DefinitionImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/DefinitionImpl.java @@ -1641,15 +1641,11 @@ public class DefinitionImpl extends ExtensibleElementImpl implements Definition super.reconcileAttributes(changedElement); if (changedElement == getElement()) - { - setTargetNamespace(changedElement.getAttribute("targetNamespace")); - - // bug 104120 - // ensure that the definition name is non null to avoid QName ctor exception - // - String definitionName = WSDLConstants.getAttribute(changedElement, "name"); - setQName(new QName(WSDLConstants.WSDL_NAMESPACE_URI, definitionName != null ? definitionName : "")); - + { + if (changedElement.hasAttribute("targetNamespace")) + setTargetNamespace(changedElement.getAttribute("targetNamespace")); + if (changedElement.hasAttribute("name")) + setQName(new QName(WSDLConstants.WSDL_NAMESPACE_URI, changedElement.getAttribute("name"))); getENamespaces().clear(); getNamespaces().clear(); //getNamespaces().put("", null); @@ -1860,8 +1856,7 @@ public class DefinitionImpl extends ExtensibleElementImpl implements Definition { Element newElement = createElement(WSDLConstants.DEFINITION); setElement(newElement); - - Object obj = null; + addChildElements(newElement, getEExtensibilityElements()); Types types = getETypes(); if (types != null) @@ -1869,12 +1864,12 @@ public class DefinitionImpl extends ExtensibleElementImpl implements Definition Element child = ((TypesImpl) types).createElement(); newElement.appendChild(child); } + addChildElements(newElement, getEImports()); addChildElements(newElement, getEMessages()); addChildElements(newElement, getEPortTypes()); addChildElements(newElement, getEBindings()); addChildElements(newElement, getEServices()); - addChildElements(newElement, getEExtensibilityElements()); return newElement; } @@ -1898,7 +1893,6 @@ public class DefinitionImpl extends ExtensibleElementImpl implements Definition // We are updating the Definition element. { Iterator iterator = getNamespaces().entrySet().iterator(); - Namespace namespace = null; String prefix = null; String uri = null; while (iterator.hasNext()) @@ -2049,6 +2043,11 @@ public class DefinitionImpl extends ExtensibleElementImpl implements Definition protected List getImportedOrInlinedSchemas(String namespace) { + if (namespace == null) + { + namespace = ""; + } + List list = new ArrayList(); for (Iterator i = getEImports().iterator(); i.hasNext();) { diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java index 47f02b0cf..309a16ff9 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/OperationImpl.java @@ -19,12 +19,14 @@ import java.util.List; import java.util.Map; import javax.wsdl.OperationType; +import javax.xml.namespace.QName; import org.eclipse.emf.common.notify.Notification; import org.eclipse.emf.common.notify.NotificationChain; import org.eclipse.emf.common.util.EList; import org.eclipse.emf.ecore.EAttribute; import org.eclipse.emf.ecore.EClass; +import org.eclipse.emf.ecore.EReference; import org.eclipse.emf.ecore.EStructuralFeature; import org.eclipse.emf.ecore.InternalEObject; import org.eclipse.emf.ecore.impl.ENotificationImpl; @@ -37,6 +39,7 @@ import org.eclipse.wst.wsdl.Input; 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.WSDLFactory; import org.eclipse.wst.wsdl.WSDLPackage; import org.eclipse.wst.wsdl.internal.util.WSDLUtil; @@ -214,7 +217,9 @@ public class OperationImpl extends WSDLElementImpl implements Operation * @generated * @ordered */ - protected EList eParameterOrdering = null; + protected EList eParameterOrdering = null; // a list of parts (EMF) + + private List parameterOrdering = null; // a list of part names (WSDL4J) private Map faults; @@ -644,20 +649,20 @@ public class OperationImpl extends WSDLElementImpl implements Operation */ public List getParameterOrdering() { - List ordering = new ArrayList(); + parameterOrdering = new ArrayList(); for (Iterator i = getEParameterOrdering().iterator(); i.hasNext();) { try { Part part = (Part) i.next(); - ordering.add(part.getName()); + parameterOrdering.add(part.getName()); } catch (Exception e) { // TBD - handle exception } } - return ordering.isEmpty() ? null : ordering; + return parameterOrdering.isEmpty() ? null : parameterOrdering; } /** @@ -667,11 +672,13 @@ public class OperationImpl extends WSDLElementImpl implements Operation */ public void setParameterOrdering(List parameterOrder) { + parameterOrdering = parameterOrder; getEParameterOrdering().clear(); if (parameterOrder != null) { for (Iterator i = parameterOrder.iterator(); i.hasNext();) { + // KB: We should be resolving parts based on the part names in parameterOrder. Part part = WSDLFactory.eINSTANCE.createPart(); part.setName((String) i.next()); getEParameterOrdering().add(part); @@ -937,11 +944,14 @@ public class OperationImpl extends WSDLElementImpl implements Operation public void reconcileAttributes(Element changedElement) { - String name = changedElement.getAttribute("name"); - if (name != null) - { - setName(name); - } + if (changedElement.hasAttribute("name")) + { + String name = changedElement.getAttribute("name"); + if (name != null) + { + setName(name); + } + } if (changedElement.hasAttribute("parameterOrder")) { @@ -1071,6 +1081,36 @@ public class OperationImpl extends WSDLElementImpl implements Operation } } + protected void changeReference(EReference eReference) + { + if (isReconciling) + return; + + super.changeReference(eReference); + Element theElement = getElement(); + if (theElement != null) + { + if (eReference == null || eReference == WSDLPackage.eINSTANCE.getOperation_EParameterOrdering()) + { + // Build up a string of concatenated part names (parameterOrder) from eParameterOrdering. + + Iterator parts = getEParameterOrdering().iterator(); + Part part = null; + String partNames = ""; + while (parts.hasNext()) + { + part = (Part)parts.next(); + partNames = partNames + part.getName() + " "; + } + + if ((partNames = partNames.trim()).length() != 0) + // Update the element's attrubute + niceSetAttribute(theElement, "parameterOrder", partNames); + } + } + // + } + // Switch <input> and <output> private void reorderChildren() { diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java index beca9b407..bf38f3c66 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/ServiceImpl.java @@ -606,19 +606,19 @@ public class ServiceImpl extends ExtensibleElementImpl implements Service Element newElement = createElement(WSDLConstants.SERVICE); setElement(newElement); - Iterator iterator = getEPorts().iterator(); + Iterator iterator = getExtensibilityElements().iterator(); while (iterator.hasNext()) { - Port port = (Port) iterator.next(); - Element child = ((PortImpl) port).createElement(); + ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); + Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); newElement.appendChild(child); } - - iterator = getExtensibilityElements().iterator(); + + iterator = getEPorts().iterator(); while (iterator.hasNext()) { - ExtensibilityElement extensibilityElement = (ExtensibilityElement) iterator.next(); - Element child = ((ExtensibilityElementImpl) extensibilityElement).createElement(); + Port port = (Port) iterator.next(); + Element child = ((PortImpl) port).createElement(); newElement.appendChild(child); } diff --git a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/TypesImpl.java b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/TypesImpl.java index 613ed85f7..363ddf717 100644 --- a/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/TypesImpl.java +++ b/bundles/org.eclipse.wst.wsdl/src-wsdl/org/eclipse/wst/wsdl/internal/impl/TypesImpl.java @@ -103,8 +103,12 @@ public class TypesImpl extends ExtensibleElementImpl implements Types for (Iterator i = getSchemas().iterator(); i.hasNext();) { XSDSchema schema = (XSDSchema) i.next(); - if (namespaceURI.equals(schema.getTargetNamespace())) + if (namespaceURI == null && schema.getTargetNamespace() == null) { + schemas.add(schema); + } + else if (namespaceURI != null && namespaceURI.equals(schema.getTargetNamespace())) { schemas.add(schema); + } } return schemas; } |