###############################################################################
# Copyright (c) 2005, 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
# -------- -------- -----------------------------------------------------------
# 20060420   120714 kathy@ca.ibm.com - Kathy Chan
###############################################################################

#
# GetMonitorCommand
#
MSG_ERROR_UNABLE_TO_START_MONITOR=IWAB0001E Unable to monitor port {0} of {1}.

#
# WSDLUtility
#
MSG_UNABLE_TO_RESOLVE_HTTP=Could not resolve service definition http://{0}.  Service may not be running on the server.
MSG_UNABLE_TO_RESOLVE_PLATFORM_URI=Could not parse platform:/resource{0}.

#
# WSIComplianceUtils
#
IGNORE_LABEL=Ignore
IGNORE_DESCRIPTION=Ignore the WS-I non-compliance and continue
IGNORE_ALL_LABEL=Ignore All
IGNORE_ALL_DESCRIPTION=Always ignore the WS-I non-compliance and continue
CANCEL_LABEL=Cancel
CANCEL_DESCRIPTION=Cancel

#
#	WS-I Compliance Messages
#
WSI_SSBP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Your current Web services preference is set to require compliance with WS-I SSBP.
WSI_SSBP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Simple SOAP Binding Profile. Do you wish to ignore this warning and continue?
WSI_SSBP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Simple SOAP Binding Profile.
WSI_AP_ERROR=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Your current Web services preference is set to require compliance with WS-I AP.
WSI_AP_WARNING=You have made a choice that may result in a Web service that does not comply with the WS-I Attachment Profile. Do you wish to ignore this warning and continue?
WSI_AP_INCOMPLIANT_RUNTIME=The selected Web Service runtime does not comply with the WS-I Attachment Profile.

