###############################################################################
# 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
# -------- -------- -----------------------------------------------------------
# 20060216   126989 pmoogk@ca.ibm.com - Peter Moogk
# 20060329   127016 andyzhai@ca.ibm.com - Andy Zhai
###############################################################################

#
# Messages in plugin.xml.
#

MSG_ERROR_DEFAULT_BEAN=IWAB0491E Error encountered while setting up default values for Java bean
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
#
MSG_ERROR_WSDL_LOCATION_NOT_SET=IWAB0501E WSDL location not set.

#
#AddJarsToProjectBuildPathTask
#
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
#
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
#
MSG_ERROR_REFRESH_PROJECT=IWAB0508E Unable to refresh project.

#
#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

#
# 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 Axis Emitter Preference Page
TOOLTIP_PPAE_PAGE=Set preferences that control Axis Emitter.
TOOLTIP_PPAE_CHECKBOX_ALL_WANTED=By default, code is generated only for referenced elements. \nCall bGenerateAll(true) and WSDL2Java will generate code \nfor all elements in the scope regardless of whether they are referenced. \nScope means: by default, all WSDL files; if generateImports(false),\nthen only the immediate WSDL file.
TOOLTIP_PPAE_CHECKBOX_HELPER_WANTED=Emits separate Helper classes for meta data.
TOOLTIP_PPAE_CHECKBOX_WRAP_ARRAYS=Prefers building beans to straight arrays for wrapped XML array types.
TOOLTIP_PPAE_CHECKBOX_USE_INHERITED_METHODS=If this option is selected, the Java2WSDL parser will look into extended classes to determine the list of methods to export into the WSDL file.
TOOLTIP_PPAE_COMBO_DEPLOY_SCOPE=Add scope to deploy.wsdd.
TOOLTIP_PPAE_FIELD_TIME_OUT=Timeout in seconds (default is 45, specify -1 to disable).
TOOLTIP_PPAE_GROUP_WSDL2JAVA=Set preferences for wsdl2java.
TOOLTIP_PPAE_GROUP_JAVA2WSDL=Set preferences for java2wsdl.
BUTTON_ALL_WANTED=&Generate code for all elements, even unreferenced ones.
BUTTON_HELPER_WANTED=Emits separate &Helper classes for meta data.
BUTTON_WRAP_ARRAYS=Prefers building beans to straight arrays for &wrapped XML array types.
BUTTON_USE_INHERITED_METHODS=Look for allowed &methods in inherited class
LABEL_DEPLOY_SCOPE=Add &scope to deploy.wsdd:
LABEL_TIME_OUT=&Timeout in seconds:
GROUP_WSDL2JAVA_NAME=Wsdl2Java
GROUP_JAVA2WSDL_NAME=Java2Wsdl
DEPLOY_SCOPE_APPLICATION=Application
DEPLOY_SCOPE_REQUEST=Request
DEPLOY_SCOPE_SESSION=Session
MSG_ERROR_INVALID_TIME_OUT=Invalid timeout! Timeout should be positive integer or -1 to disable.
MSG_USE_JVM_ARGUMENT_FOR_TIME_OUT=You are using the value of timeout from JVM arguments AxisWsdl2JavaTimeout which specifies timeout in milliseconds.


