###############################################################################
# Copyright (c) 2001, 2007 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
# -------- -------- -----------------------------------------------------------
# 20070413   176493 makandre@ca.ibm.com - Andrew Mak, WSE: Make message/transport stack pluggable
###############################################################################

#
# Messages in plugin.xml.
#
PLUGIN_NAME=Web Services Explorer
PLUGIN_PROVIDER=Eclipse.org

XP_WSE_TRANSPORT_PROVIDER=Web Services Explorer Transport Provider
SOAP_TRANSPORT_PROVIDER=Default SOAP Transport Provider

#
# Messages for the client type extension
#
WEBSERVICECLIENTTYPE_NAME_WSEXPLORER=Stubless (Web Services Explorer)
TASK_LABEL_EXPLORE_WSDL_USING_WSE=Explorer WSDL using Web Services Explorer.

#
# Messages for the WSExplorer type extension
#
MSG_ERROR_LAUNCH_WSEXPLORER=IWAB0366E Unable to launch Web Services Explorer.
MSG_ERROR_LOAD_LAUNCH_OPTIONS=IWAB0367E Unable to load launch options.
MSG_BROKEN_VM_DOES_NOT_SUPPORT_UTF-8=Broken VM does not support UTF-8.

#
# Messages for popup action (Test with Web Services Explorer)
#
POPUP_TEST_WSDL=Test with Web Services Explorer

#
# SOAP transport messages
#
MSG_ERROR_UNSUPPORTED_BINDING={0} binding is unsupported.
MSG_ERROR_UNSUPPORTED_TRANSPORT={0} transport is unsupported.