Fix bugzilla bug 204766 :Webservices Datasource doesn't support WSDL of the attached form
diff --git a/plugins/org.eclipse.datatools.enablement.oda.ws/src/org/eclipse/datatools/enablement/oda/ws/util/WSDLAdvisor.java b/plugins/org.eclipse.datatools.enablement.oda.ws/src/org/eclipse/datatools/enablement/oda/ws/util/WSDLAdvisor.java
index b6dcc8a..ddc23d4 100644
--- a/plugins/org.eclipse.datatools.enablement.oda.ws/src/org/eclipse/datatools/enablement/oda/ws/util/WSDLAdvisor.java
+++ b/plugins/org.eclipse.datatools.enablement.oda.ws/src/org/eclipse/datatools/enablement/oda/ws/util/WSDLAdvisor.java
@@ -459,8 +459,7 @@
String[] parentNode = {
EMPTY_STRING
};
- WSNonLeafNode node = new WSNonLeafNode( );
- node = generateNode( localPart, element, parentNode, null );
+ WSNonLeafNode node = generateNode( localPart, element, parentNode, null );
if ( node.getNodeList( ).size( ) == 0 )
continue;
return node;
@@ -969,8 +968,7 @@
String name, int tabCount )
{
String result = EMPTY_STRING;
- WSNonLeafNode newNode = new WSNonLeafNode( );
- newNode = generateTargetNode( wsdlURI, name );
+ WSNonLeafNode newNode = generateTargetNode( wsdlURI, name );
result = builderRequestParameters( newNode, nameSpace, tabCount );
return result;
}
@@ -1050,8 +1048,7 @@
{
String result = EMPTY_STRING;
- WSNonLeafNode newNode = new WSNonLeafNode( );
- newNode = generateTargetNode( wsdlURI, name );
+ WSNonLeafNode newNode = generateTargetNode( wsdlURI, name );
result = builderResponseParameters( newNode );
@@ -1418,7 +1415,7 @@
*
* @return
*/
- private static String buildParametersByList( String wsdlURI,
+ private String buildParametersByList( String wsdlURI,
String nameSpace, List paramNames, List paramTypes, int tabCount,
String inOrOutput )
{
@@ -1431,15 +1428,11 @@
// complexType reference
if ( !isPrimitiveDataType( paramType ) )
{
- List paramNameList = new ArrayList( );
- List paramTypeList = new ArrayList( );
- addParamComplexType( wsdlURI,
- getParamTypeLocalPart( paramType ),
- paramNameList,
- paramTypeList );
+
+ WSNonLeafNode newNode = generateTargetNode( wsdlURI, paramType );
// temporarily solution to handle simpleType
- if ( paramNameList.isEmpty( ) && paramTypeList.isEmpty( ) )
+ if ( newNode.getNodeList() == null )
{
if ( inOrOutput == "in" ) //$NON-NLS-1$
{
@@ -1461,10 +1454,9 @@
result += enter( )
+ tab( tabCount )
+ "<" + nameSpace + paramName + ">"; //$NON-NLS-1$//$NON-NLS-2$
- result += buildParametersByList( wsdlURI,
+ result += buildParametersByTypeTree( wsdlURI,
nameSpace,
- paramNameList,
- paramTypeList,
+ newNode,
tabCount + 1,
inOrOutput );
result += enter( )
@@ -1474,10 +1466,9 @@
else
{
result += enter( ) + "<" + paramName + ">"; //$NON-NLS-1$//$NON-NLS-2$
- result += buildParametersByList( wsdlURI,
+ result += buildParametersByTypeTree( wsdlURI,
nameSpace,
- paramNameList,
- paramTypeList,
+ newNode,
tabCount,
inOrOutput );
result += enter( ) + "</" + paramName + ">"; //$NON-NLS-1$//$NON-NLS-2$
@@ -1504,6 +1495,113 @@
return result;
}
+ /**
+ *
+ * @param wsdlURI
+ * @param nameSpace
+ * @param typeTree
+ * @param tabCount
+ * @param inOrOutput
+ * @return
+ */
+ private String buildParametersByTypeTree( String wsdlURI,
+ String nameSpace, WSNonLeafNode typeTree, int tabCount,
+ String inOrOutput )
+ {
+ String result = EMPTY_STRING;
+ List subNode = typeTree.getNodeList();
+ for( int i=0; i<subNode.size(); i++ )
+ {
+ if ( subNode.get( i ) instanceof WSLeafNode )
+ {
+ WSLeafNode leafnode = (WSLeafNode) subNode.get( i );
+ result += buildParametersByType( wsdlURI,
+ nameSpace, leafnode.getName(), leafnode.getType(), tabCount,
+ inOrOutput );
+ }
+ else if ( subNode.get( i ) instanceof WSNonLeafNode )
+ {
+ WSNonLeafNode nonLeafnode = (WSNonLeafNode) subNode.get( i );
+
+ if ( inOrOutput == "in" ) //$NON-NLS-1$
+ {
+ result += enter( )
+ + tab( tabCount )
+ + "<" + nameSpace + nonLeafnode.getName() + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ result += buildParametersByTypeTree( wsdlURI,
+ nameSpace,
+ nonLeafnode,
+ tabCount + 1,
+ inOrOutput );
+ result += enter( )
+ + tab( tabCount )
+ + "</" + nameSpace + nonLeafnode.getName() + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ }
+ else
+ {
+ result += enter( ) + "<" + nonLeafnode.getName() + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ result += buildParametersByTypeTree( wsdlURI,
+ nameSpace,
+ nonLeafnode,
+ tabCount,
+ inOrOutput );
+ result += enter( ) + "</" + nonLeafnode.getName() + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ }
+
+ }
+ }
+
+ return result;
+ }
+
+ /**
+ *
+ * @param wsdlURI
+ * @param nameSpace
+ * @param paramName
+ * @param paramType
+ * @param tabCount
+ * @param inOrOutput
+ * @return
+ */
+ private String buildParametersByType( String wsdlURI,
+ String nameSpace, String paramName, String paramType, int tabCount,
+ String inOrOutput )
+ {
+ String result = EMPTY_STRING;
+ if ( !isPrimitiveDataType( paramType ) )
+ {
+ if ( inOrOutput == "in" ) //$NON-NLS-1$
+ {
+ result += enter( )
+ + tab( tabCount ) + "<" + nameSpace + paramName //$NON-NLS-1$
+ + buildParamType( paramType ) + ">&?" + paramName //$NON-NLS-1$
+ + "?&</" + nameSpace + paramName + ">"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ else
+ {
+ result += enter( ) + "<" + paramName + ">" //$NON-NLS-1$ //$NON-NLS-2$
+ + "</" + paramName + ">"; //$NON-NLS-1$ //$NON-NLS-2$
+ }
+ }
+ else
+ {
+ if ( inOrOutput == "in" ) //$NON-NLS-1$
+ {
+ result += enter( )
+ + tab( tabCount ) + "<" + nameSpace + paramName //$NON-NLS-1$
+ + ">&?" + paramName //$NON-NLS-1$
+ + "?&</" + nameSpace + paramName + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ }
+ else
+ {
+ result += enter( ) + "<" + paramName + ">" //$NON-NLS-1$ //$NON-NLS-2$
+ + "</" + paramName + ">"; //$NON-NLS-1$//$NON-NLS-2$
+ }
+ }
+ return result;
+ }
+
private static String getNameSpaceDoc( String wsdlURI )
{
String namespace = EMPTY_STRING;