###############################################################################
# Copyright (c) 2004 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
###############################################################################

#
# Messages in plugin.xml.
#

MSG_ERROR_DEFAULT_BEAN=IWAB0491E Error encountered while setting up default values for Java bean
MSG_ERROR_READ_WSDL=IWAB0494E Error in reading WSDL file {0}
MSG_ERROR_WSDL_NO_DEFINITION=IWAB0495E WSDL file at {0} has no definition element
MSG_ERROR_WSDL_NO_PORT=IWAB0496E WSDL file at {0} has no port element
MSG_ERROR_WRITE_WSDL=IWAB0497E Error in writing WSDL file {0}



#
# Messages for CopyClientWSDLTask
#
MSG_ERROR_IMPORT_WSDL=IWAB0531E Error in resolving WSDL file {0}, import WSDL file must have absolute URL or relative URL in the same directory


#
#DefaultsForClientJavaWSDLCommand
#
TASK_LABEL_CLIENT_JAVA_WSDL_DEFAULTS=DefaultsForClientJavaWSDL
TASK_DESC_CLIENT_JAVA_WSDL_DEFAULTS=Builds the JavaWSDLParameter for client side.
MSG_ERROR_WSDL_LOCATION_NOT_SET=IWAB0501E WSDL location not set.

#
#AddJarsToProjectBuildPathTask
#
TASK_LABEL_JARS_TO_PROJECT=AddJarsToProjectBuildPathTask
TASK_DESC_JARS_TO_PROJECT=Add Jars to project build path.
MSG_WARN_NO_JAVA_NATURE=IWAB0502W The project is not a Java project.
MSG_ERROR_BAD_BUILDPATH=IWAB0503E Unable to update Java build path. Please check your system environment.

#
#CopyAxisJarCommand
#
TASK_DESC_COPY_JARS_TO_PROJECT=CopyAxisJarCommand
TASK_LABEL_COPY_JARS_TO_PROJECT=Copy required Axis runtime jars from plugin to web project.
PROGRESS_INFO_COPY_AXIS_CFG=IWAB0505I Copying Axis jar files to web project.
MSG_ERROR_FILECOPY=IWAB0506E Error when copying Axis jar files to web project

#
#RefreshProjectTask
#
TASK_LABEL_REFESH_PROJECT=RefreshProjectTask
TASK_DESC_REFESH_PROJECT=Refresh the files on the project with the local file system.
MSG_ERROR_REFRESH_PROJECT=IWAB0508E Unable to refresh project.


#
#WebServiceAxisProxyFragment
#

#
#WebServiceAxisProxyPage
#
TOOLTIP_PWJB_PAGE=Page
TOOLTIP_PWJB_TEXT_FOLDER=Folder for proxy to be generated for the selected binding.
TOOLTIP_PWJB_CHECKBOX_GENPROXY=Check to enable/disable the generation of a proxy.

PAGE_TITLE_WS_AXIS_PROXY=Web Service Proxy Page
PAGE_DESC_WS_AXIS_PROXY=Select generate proxy if you want to generate proxy for your service.
CHECKBOX_GENPROXY=Generate proxy
LABEL_FOLDER_NAME=Output folder

#
# CheckAxisDeploymentDescriptorsTask
#
CHECK_WS_DD_TASK_DESCRIPTION=CheckAxisDeploymentDescriptorsTask
CHECK_WS_DD_TASK_LABEL=CheckAxisDeploymentDescriptorsTask

#
#ClasspathUtils
#
MSG_ERROR_CLASSPATH_UTILS_IOEXCEPTION=IWAB0509E IOException in ClasspathUtils

#
# Messages for WebSerivceAxisMappingsPage
#
PAGE_TITLE_WS_BEAN2XML=Web Service package to namespace mapping
PAGE_TITLE_WS_XML2PROXY=Web Service Client namespace to package mapping
PAGE_DESC_P2N_MAPPINGS=Define custom mapping for package to namespace.
LABEL_MAPPING_PAIRS=Mapping pairs
TABLE_COLUMN_LABEL_PACKAGE=package
TABLE_COLUMN_LABEL_NAMESPACE=namespace
LABEL_EXPLORE_MAPPINGS_XML2BEAN=Define custom mapping for namespace to package.
TOOLTIP_N2P_SHOW_MAPPINGS=Define namespace to package mapping for customization.

#
# Messages for CheckAxisDeploymentDescriptorsTask
#
MSG_ERROR_XML_FILE_OVERWRITE_DISABLED=IWAB0532E Do you want to overwrite the Apache Axis deployment descriptor?

#
#Messages for CopyClientWSDLCommand
#
TASK_DESC_COPY_CLIENT_WSDL=Copies WSDL to Client project
TASK_LABEL_COPY_CLIENT_WSDL=Copy WSDL to Client project

#
#AxisClientInputCommand and AxisClientOutputCommand
#

TASK_LABEL_AXIS_CLIENT_INPUT=Axis client input commmand
TASK_DESC_AXIS_CLIENT_INPUT=Axis client input commmand
TASK_LABEL_AXIS_CLIENT_OUTPUT=Axis client output commmand
TASK_DESC_AXIS_CLIENT_OUTPUT=Axis client output commmand
