[119296] Web service wizard hangs when WSDL not available..
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUI.properties b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUI.properties index e261ae4..b264a23 100644 --- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUI.properties +++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUI.properties
@@ -23,6 +23,7 @@ # 20060420 120714 kathy@ca.ibm.com - Kathy Chan # 20060420 135912 joan@ca.ibm.com - Joan Haggarty # 20060510 141115 rsinha@ca.ibm.com - Rupam Kuehner +# 20060509 119296 pmoogk@ca.ibm.com - Peter Moogk ############################################################################### # @@ -626,3 +627,5 @@ # Note to translation do not translate keyword ServerId MSG_INFO_ANT_SERVER_HEADING=Server IDs (ServerId) MSG_INFO_ANT_SERVER=Server: {0} + +MSG_INFO_WSDL_OPERATION_TIMED_OUT=Could not retrieve the WSDL file {0}. Do you want to continue to wait for this file?
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUIMessages.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUIMessages.java index b7169fb..4aaeaa6 100644 --- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUIMessages.java +++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/ConsumptionUIMessages.java
@@ -23,6 +23,7 @@ * 20060420 135912 joan@ca.ibm.com - Joan Haggarty * 20060426 138647 joan@ca.ibm.com - Joan Haggarty * 20060510 141115 rsinha@ca.ibm.com - Rupam Kuehner + * 20060509 119296 pmoogk@ca.ibm.com - Peter Moogk *******************************************************************************/ package org.eclipse.jst.ws.internal.consumption.ui; @@ -382,6 +383,7 @@ public static String MSG_PROJECT_MUST_EXIST; public static String MSG_ERROR_INVALID_MULTIPLE_SERVICE_SELECT; public static String MSG_ERROR_MODULE_DEPENDENCY; + public static String MSG_INFO_WSDL_OPERATION_TIMED_OUT; static {
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java index b3729af..45236c7 100644 --- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java +++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/ClientWizardWidget.java
@@ -15,6 +15,7 @@ * 20060420 135912 joan@ca.ibm.com - Joan Haggarty * 20060424 138052 kathy@ca.ibm.com - Kathy Chan * 20060425 137831 rsinha@ca.ibm.com - Rupam Kuehner + * 20060509 119296 pmoogk@ca.ibm.com - Peter Moogk *******************************************************************************/ package org.eclipse.jst.ws.internal.consumption.ui.widgets; @@ -22,6 +23,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.Dialog; +import org.eclipse.jst.ws.internal.consumption.common.WSDLParserFactory; import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages; import org.eclipse.jst.ws.internal.consumption.ui.command.data.EclipseIPath2URLStringTransformer; import org.eclipse.jst.ws.internal.consumption.ui.common.ValidationUtils; @@ -277,13 +279,13 @@ public WebServicesParser getWebServicesParser() { - return parser_; + return WSDLParserFactory.getWSDLParser(); } public void setWebServicesParser(WebServicesParser parser) { - parser_ = parser; - clientWidget_.setWebServicesParser(parser); + parser_ = getWebServicesParser(); + clientWidget_.setWebServicesParser(parser_); } public TypeRuntimeServer getClientTypeRuntimeServer() @@ -466,7 +468,7 @@ wsdlDialog_.setComponentName(getComponentName()); wsdlDialog_.setProject(getProject()); - wsdlDialog_.setWebServiceURI(getWebServiceURI()); + wsdlDialog_.setWebServiceURI(getWebServiceURI()); int result = wsdlDialog_.open();
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/TimedWSDLSelectionConditionCommand.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/TimedWSDLSelectionConditionCommand.java new file mode 100644 index 0000000..df2b7ca --- /dev/null +++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/TimedWSDLSelectionConditionCommand.java
@@ -0,0 +1,85 @@ +/******************************************************************************* + * Copyright (c) 2004, 2006 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 + * yyyymmdd bug Email and other contact information + * -------- -------- ----------------------------------------------------------- + * 20060504 119296 pmoogk@ca.ibm.com - Peter Moogk + *******************************************************************************/ +package org.eclipse.jst.ws.internal.consumption.ui.widgets; + +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages; +import org.eclipse.wst.command.internal.env.core.common.Condition; +import org.eclipse.wst.command.internal.env.ui.common.TimedOperation; +import org.eclipse.wst.common.frameworks.datamodel.AbstractDataModelOperation; +import org.eclipse.wst.ws.internal.parser.wsil.WebServicesParser; + + +public class TimedWSDLSelectionConditionCommand extends AbstractDataModelOperation implements Condition +{ + WSDLSelectionConditionCommand selectionCommand; + + public TimedWSDLSelectionConditionCommand() + { + selectionCommand = new WSDLSelectionConditionCommand(); + } + + public void setWebServicesParser(WebServicesParser webServicesParser) + { + selectionCommand.setWebServicesParser( webServicesParser ); + } + + public WebServicesParser getWebServicesParser() + { + return selectionCommand.getWebServicesParser(); + } + + public IStatus execute( IProgressMonitor monitor, IAdaptable adaptable ) + { + String timeOutMessage = ConsumptionUIMessages.bind( ConsumptionUIMessages.MSG_INFO_WSDL_OPERATION_TIMED_OUT, getWebServiceURI() ); + + TimedOperation timedOperation = new TimedOperation( selectionCommand, 10000, timeOutMessage ); + + return timedOperation.execute(monitor, adaptable); + } + + public boolean evaluate() + { + return selectionCommand.evaluate(); + } + + public String getWebServiceURI() + { + return selectionCommand.getWebServiceURI(); + } + + public void setWebServiceURI(String webServiceURI) + { + selectionCommand.setWebServiceURI(webServiceURI); + } + + public String getWsdlURI() + { + return getWebServiceURI(); + } +/** + * @return Returns the httpBasicAuthPassword. + */ +public String getHttpBasicAuthPassword() { + return selectionCommand.getHttpBasicAuthPassword(); +} +/** + * @return Returns the httpBasicAuthUsername. + */ +public String getHttpBasicAuthUsername() { + return selectionCommand.getHttpBasicAuthUsername(); +} +}
diff --git a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java index fbda8d9..1b83415 100644 --- a/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java +++ b/bundles/org.eclipse.jst.ws.consumption.ui/src/org/eclipse/jst/ws/internal/consumption/ui/widgets/object/WSDLSelectionWidget.java
@@ -12,12 +12,12 @@ * 20060410 135441 joan@ca.ibm.com - Joan Haggarty * 20060410 136011 kathy@ca.ibm.com - Kathy Chan * 20060420 135912 joan@ca.ibm.com - Joan Haggarty + * 20060504 119296 pmoogk@ca.ibm.com - Peter Moogk *******************************************************************************/ package org.eclipse.jst.ws.internal.consumption.ui.widgets.object; import java.io.File; import java.net.MalformedURLException; - import org.eclipse.core.resources.IFile; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; @@ -38,7 +38,7 @@ import org.eclipse.jst.ws.internal.common.ResourceUtils; import org.eclipse.jst.ws.internal.consumption.common.WSDLParserFactory; import org.eclipse.jst.ws.internal.consumption.ui.ConsumptionUIMessages; -import org.eclipse.jst.ws.internal.consumption.ui.widgets.WSDLSelectionConditionCommand; +import org.eclipse.jst.ws.internal.consumption.ui.widgets.TimedWSDLSelectionConditionCommand; import org.eclipse.jst.ws.internal.consumption.ui.widgets.WSDLSelectionTreeWidget; import org.eclipse.jst.ws.internal.ui.common.DialogResourceBrowser; import org.eclipse.jst.ws.internal.ui.common.FileExtensionFilter; @@ -230,7 +230,7 @@ } if (wsURI != null && wsURI.indexOf(':') >= 0 && webServicesParser.getWebServiceEntityByURI(wsURI) == null) { - WSDLSelectionConditionCommand cmd = new WSDLSelectionConditionCommand(); + TimedWSDLSelectionConditionCommand cmd = new TimedWSDLSelectionConditionCommand(); cmd.setWebServicesParser(webServicesParser); cmd.setWebServiceURI(wsURI); cmd.execute(null, null); @@ -601,7 +601,7 @@ } if (wsURI != null && wsURI.indexOf(':') >= 0 && webServicesParser.getWebServiceEntityByURI(wsURI) == null) { - WSDLSelectionConditionCommand cmd = new WSDLSelectionConditionCommand(); + TimedWSDLSelectionConditionCommand cmd = new TimedWSDLSelectionConditionCommand(); cmd.setWebServicesParser(webServicesParser); cmd.setWebServiceURI(wsURI); cmd.execute(null, null);
diff --git a/bundles/org.eclipse.wst.command.env.ui/META-INF/MANIFEST.MF b/bundles/org.eclipse.wst.command.env.ui/META-INF/MANIFEST.MF index 27d61c5..2de362a 100644 --- a/bundles/org.eclipse.wst.command.env.ui/META-INF/MANIFEST.MF +++ b/bundles/org.eclipse.wst.command.env.ui/META-INF/MANIFEST.MF
@@ -7,6 +7,7 @@ Bundle-Vendor: %PLUGIN_PROVIDER Bundle-Localization: plugin Export-Package: org.eclipse.wst.command.internal.env.ui;x-internal:=true, + org.eclipse.wst.command.internal.env.ui.common;x-internal:=true, org.eclipse.wst.command.internal.env.ui.dialog;x-internal:=true, org.eclipse.wst.command.internal.env.ui.eclipse;x-internal:=true, org.eclipse.wst.command.internal.env.ui.plugin;x-internal:=true,
diff --git a/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUI.properties b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUI.properties index 0c74610..4c0ebd8 100644 --- a/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUI.properties +++ b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUI.properties
@@ -1,12 +1,15 @@ ############################################################################### -# Copyright (c) 2001, 2004 IBM Corporation and others. +# Copyright (c) 2001, 2006 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 +# IBM Corporation - initial API and implementation +# yyyymmdd bug Email and other contact information +# -------- -------- ----------------------------------------------------------- +# 20060509 119296 pmoogk@ca.ibm.com - Peter Moogk ############################################################################### BUTTON_SHOW_ALL_DIALOGS=&Show All @@ -27,3 +30,4 @@ DIALOG_TITLE_OVERWRITE=Confirm Overwrite MSG_ERROR_WIZARD_ID_NOT_FOUND=IWAB0013E Could not find wizard id: {0} +MSG_ERROR_OPERATION_TIMED_OUT=Operation timed out.
diff --git a/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUIMessages.java b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUIMessages.java index a332a5f..8931d84 100644 --- a/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUIMessages.java +++ b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/EnvironmentUIMessages.java
@@ -1,12 +1,15 @@ /******************************************************************************* - * Copyright (c) 2000, 2005 IBM Corporation and others. + * Copyright (c) 2000, 2006 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 + * IBM Corporation - initial API and implementation + * yyyymmdd bug Email and other contact information + * -------- -------- ----------------------------------------------------------- + * 20060509 119296 pmoogk@ca.ibm.com - Peter Moogk *******************************************************************************/ package org.eclipse.wst.command.internal.env.ui; @@ -35,8 +38,9 @@ public static String MSG_ERR_COPYING_ANT_FILES; public static String MSG_WARNING_FILE_EXISTS; public static String DIALOG_TITLE_OVERWRITE; + public static String MSG_ERROR_OPERATION_TIMED_OUT; static { NLS.initializeMessages(BUNDLE_NAME, EnvironmentUIMessages.class); } -} \ No newline at end of file +}
diff --git a/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/common/TimedOperation.java b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/common/TimedOperation.java new file mode 100644 index 0000000..1bc3b9f --- /dev/null +++ b/bundles/org.eclipse.wst.command.env.ui/src/org/eclipse/wst/command/internal/env/ui/common/TimedOperation.java
@@ -0,0 +1,175 @@ +/******************************************************************************* + * Copyright (c) 2003, 2006 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 + * yyyymmdd bug Email and other contact information + * -------- -------- ----------------------------------------------------------- + * 20060504 119296 pmoogk@ca.ibm.com - Peter Moogk + *******************************************************************************/ +package org.eclipse.wst.command.internal.env.ui.common; + +import org.eclipse.core.commands.ExecutionException; +import org.eclipse.core.commands.operations.AbstractOperation; +import org.eclipse.core.commands.operations.IUndoContext; +import org.eclipse.core.commands.operations.IUndoableOperation; +import org.eclipse.core.runtime.IAdaptable; +import org.eclipse.core.runtime.IProgressMonitor; +import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.Status; +import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.swt.widgets.Shell; +import org.eclipse.ui.PlatformUI; +import org.eclipse.wst.command.internal.env.ui.EnvironmentUIMessages; + +public class TimedOperation implements IUndoableOperation +{ + private AbstractOperation operation; + private int timeout; + private IProgressMonitor tempMonitor; + private IAdaptable tempInfo; + private IStatus returnStatus; + private boolean operationComplete; + private String timeOutMessage; + + public TimedOperation( AbstractOperation operation, int timeout, String timeOutMessage ) + { + this.operation = operation; + this.timeout = timeout; + this.timeOutMessage = timeOutMessage; + } + + public IStatus execute(IProgressMonitor monitor, IAdaptable info) + { + Thread executeThread = new Thread( new OperationRunnable() ); + + returnStatus = Status.OK_STATUS; + tempMonitor = monitor; + tempInfo = info; + operationComplete = false; + executeThread.start(); + + synchronized( operation ) + { + while( !operationComplete ) + { + try + { + operation.wait(timeout); + } + catch( InterruptedException exc ) + { + Status errorStatus = new Status( IStatus.ERROR,"id", 0, exc.getMessage(), exc ); + executeThread.interrupt(); + return errorStatus; + } + + if( !operationComplete ) + { + // We timed out, since the execution thread hasn't set operationComplete + // to true. + Status errorStatus = new Status( IStatus.ERROR,"id", 0, EnvironmentUIMessages.MSG_ERROR_OPERATION_TIMED_OUT, null); + Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(); + boolean waitMore = MessageDialog.openConfirm(shell, EnvironmentUIMessages.MSG_ERROR_OPERATION_TIMED_OUT, timeOutMessage ); + + if( !waitMore ) + { + executeThread.interrupt(); + operationComplete = true; + return errorStatus; + } + } + } + } + + // We completed successfully. Therefore return the status set in the forked + // thread. + return returnStatus; + } + + private class OperationRunnable implements Runnable + { + public void run() + { + try + { + returnStatus = operation.execute(tempMonitor, tempInfo); + } + catch( Throwable exc ) + { + returnStatus = new Status( IStatus.ERROR,"id", 0, exc.getMessage(), exc ); + } + finally + { + synchronized( operation ) + { + operationComplete = true; + operation.notify(); + } + } + } + } + + public IStatus redo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + return operation.redo(monitor, info); + } + + public IStatus undo(IProgressMonitor monitor, IAdaptable info) throws ExecutionException + { + return operation.undo(monitor, info); + } + public IUndoContext[] getContexts() + { + return operation.getContexts(); + } + + public boolean hasContext(IUndoContext context) + { + return operation.hasContext(context); + } + + public void addContext(IUndoContext context) + { + operation.addContext(context); + } + + public boolean canExecute() + { + return operation.canExecute(); + } + + public boolean canRedo() + { + return operation.canRedo(); + } + + public boolean canUndo() + { + return operation.canUndo(); + } + + public void dispose() + { + operation.dispose(); + } + + public String getLabel() + { + return operation.getLabel(); + } + + public void removeContext(IUndoContext context) + { + operation.removeContext(context); + } + + public void setLabel(String name) + { + operation.setLabel(name); + } +}
diff --git a/bundles/org.eclipse.wst.ws.parser/src/org/eclipse/wst/ws/internal/parser/wsil/WebServicesParser.java b/bundles/org.eclipse.wst.ws.parser/src/org/eclipse/wst/ws/internal/parser/wsil/WebServicesParser.java index 1acc20c..166e27c 100644 --- a/bundles/org.eclipse.wst.ws.parser/src/org/eclipse/wst/ws/internal/parser/wsil/WebServicesParser.java +++ b/bundles/org.eclipse.wst.ws.parser/src/org/eclipse/wst/ws/internal/parser/wsil/WebServicesParser.java
@@ -1,13 +1,16 @@ /******************************************************************************* - * Copyright (c) 2001, 2004 IBM Corporation and others. + * Copyright (c) 2001, 2006 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 - ******************************************************************************/ + * yyyymmdd bug Email and other contact information + * -------- -------- ----------------------------------------------------------- + * 20060504 119296 pmoogk@ca.ibm.com - Peter Moogk + *******************************************************************************/ package org.eclipse.wst.ws.internal.parser.wsil; @@ -181,13 +184,24 @@ private void parseURL(int parseOption) throws MalformedURLException, IOException, ParserConfigurationException, SAXException, WWWAuthenticationException { WebServiceEntity wsEntity = new WebServiceEntity(); - wsEntity.setURI(uri_); - byte[] b = getInputStreamAsByteArray(uri_); + + // This variable makes this object a little more thread safe than it was + // before, although this object is not completely thread safe. The scenario + // that we are trying to avoid is where one call to this method gets blocked + // at the getInputStreamAsByteArray call. Then a second call to the method + // is made that changes the uri_ global variable. When the first call + // completes it would use uri_ value from the second invocation instead + // of the value from the first. Storing the uri_ into this variable helps + // avoid this bad scenario. + String theUri = uri_; + + wsEntity.setURI(theUri); + byte[] b = getInputStreamAsByteArray(theUri); wsEntity.setBytes(b); setHTTPSettings(wsEntity); - uriToEntityTable_.put(uri_, wsEntity); + uriToEntityTable_.put(theUri, wsEntity); // parse uri_ as a HTML document - HTMLHeadHandler headHandler = new HTMLHeadHandler(uri_); + HTMLHeadHandler headHandler = new HTMLHeadHandler(theUri); byte[] head = headHandler.harvestHeadTags(b); SAXParserFactory factory = SAXParserFactory.newInstance(); factory.setNamespaceAware(false); @@ -208,7 +222,7 @@ wsEntity.setType(WebServiceEntity.TYPE_HTML); for (int i = 0; i < wsilURIs.length; i++) { - String absoluteURI = convertToAbsoluteURI(uri_, wsilURIs[i]); + String absoluteURI = convertToAbsoluteURI(theUri, wsilURIs[i]); WebServiceEntity wsilEntity = new WebServiceEntity(); wsilEntity.setType(WebServiceEntity.TYPE_WSIL); wsilEntity.setURI(absoluteURI); @@ -250,7 +264,7 @@ { try { - parseWSIL(uri_, parseOption); + parseWSIL(theUri, parseOption); // no exception thrown if uri_ is a WSIL document wsEntity.setType(WebServiceEntity.TYPE_WSIL); } @@ -260,7 +274,7 @@ // then parse uri_ as a DISCO document. try { - parseDISCO(uri_, parseOption); + parseDISCO(theUri, parseOption); // no exception thrown if uri_ is a DISCO document wsEntity.setType(WebServiceEntity.TYPE_DISCO); } @@ -270,7 +284,7 @@ // then parse uri_ as a WSDL document try { - parseWSDL(uri_); + parseWSDL(theUri); // no exception thrown if uri_ is a WSDL document wsEntity.setType(WebServiceEntity.TYPE_WSDL); }