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

#
# Error messages used in this plugin
#
MSG_ERROR_INTERAL=IWAB0512E Internal error
MSG_ERROR_PROJECT_URL=IWAB0514E Unable to get URL for project {0}
MSG_ERROR_READ_WSDL=IWAB0516E Error in reading WSDL file {0}
MSG_ERROR_WSDL_NO_PORT=IWAB0518E WSDL file at {0} has no port element
MSG_ERROR_CANNOT_NO_JAVA_BEAN=IWAB0015E A Java bean was not selected
MSG_ERROR_NO_PROJECT=IWAB0016E A project was not selected
MSG_ERROR_CANNOT_LOAD_JAVA_BEAN=IWAB0017E The Java bean, {0}, cannot be loaded from {1}
MSG_ERROR_JAVA_MOF_REFLECT_FAILED=IWAB0521E Failed to analyze the Java bean: {0}.
MSG_ERROR_READ_BEAN=IWAB0522E Error in reading methods from Java bean.
MSG_ERROR_MOVE_RESOURCE=IWAB0523E Error moving resource
MSG_ERROR_UPDATE_AXIS_WSDD=IWAB0524E Error updating Axis deploy.wsdd file
MSG_ERROR_LITERAL_SUPPORT_MESSAGE=IWAB0536E Axis 1.1 support for Document/Literal and Document/Literal (Wrapped) is minimal, thus the generated code may contain errors. RPC/Encoded is the recommended style and encoding selection.
MSG_ERROR_INITIAL_SELECTION=IWAB0018E Error getting initial selection.


#
#JavaToWSDLMethodCommand
#
TASK_LABEL_JAVA_TO_WSDL=Create deployment descriptor document model from Java bean.
TASK_DESC_JAVA_TO_WSDL=Creating deployment descriptor document model from Java bean.
MSG_ERROR_JAVA_TO_METHOD=IWAB0019E Error in getting method from Java bean.

#
#DefaultsForServerJavaWSDLTask
#
TASK_LABEL_SERVER_JAVA_WSDL_DEFAULTS=DefaultsForJavaWSDLServer
TASK_DESC_SERVER_JAVA_WSDL_DEFAULTS=Builds the JavaWSDLParameter for server side.

#
#UpdateWEBXMLCommand
#
TASK_LABEL_UPDATE_WEB_XML=UpdateWEBXMLCommand
TASK_DESC_UPDATE_WEB_XML=Update project's web.xml file with Axis servlets
MSG_ERROR_UPDATE_WEB_XML=IWAB0020E Error in adding servlet in web.xml.

#
#DefaultsForWSDL2SkeletonTask
#

#
#MoveDeploymentFilesTask
#
TASK_LABEL_MOVE_DEPLOYMENT_FILES=MoveDeploymentFilesTask
TASK_DESC_MOVE_DEPLOYMENT_FILES=Move deploy.wsdd and undeploy.wsdd from Java Source to Web Content/WEB-INF

#
#MoveJavaFilesTask
#
TASK_LABEL_MOVE_JAVA_FILES=MoveJavaFilesTask
TASK_DESC_MOVE_JAVA_FILES=Move server side java files

#
#Skeleton2WSDLTask
#
TASK_LABEL_SKELETON_WSDL=DefaultsForSkeleton2WSDLTask
TASK_DESC_SKELETON_WSDL=Creates WSDL for a Java bean skeleton.

#
#UpdateAxisWSDDFileTask
#
TASK_LABEL_UPDATE_AXIS_WSDD=UpdateAxisWSDDFileTask
TASK_DESC_UPDATE_AXIS_WSDD=Update Axis deploy.wsdd with actual service implementation class name
MSG_PLUGIN_FILE_URL=Problem locating plugin file

#
#WebServiceWSDLAxisSelectionPage
#
PAGE_MSG_NO_FILE_SPECIFIED=No file specified.
PAGE_MSG_NO_METHOD_SELECTED=No methods selected.

#
#WebServiceSkeletonAxisConfigFragment
#

#
#WebServiceSkeletonAxisConfigPage
#
TOOLTIP_PBSC_PAGE=
TOOLTIP_PBCF_TEXT_URI=The SOAP body namespace and unique identifier of the Web service.
TOOLTIP_PBCF_TEXT_WSDL_FOLDER=The folder of the WSDL file.
TOOLTIP_PBCF_TEXT_WSDL_FILE=The name of the WSDL file.
LABEL_URI=Web service URI:
LABEL_OUTPUT_FOLDER_NAME=WSDL Folder:
LABEL_OUTPUT_FILE_NAME=WSDL File:


#
#WSWSDLAxisType
#
WS_NAME_WSDLAXIS=Skeleton Java bean Axis Web service
WS_DESC_WSDLAXIS=Skeleton Java bean Axis Web service

#
#WSBeanAxisType
#

#
#WebServiceAxisBeanClassFragment
#

#
#WebServiceAxisBeanClassPage
#
PAGE_TITLE_WSBEAN_CLASS=Web Service Java Bean Selection
PAGE_DESC_WSBEAN_CLASS=Select a Java bean
LABEL_EXPLORE_MAPPINGS_BEAN2XML=Define custom mapping for package to namespace.
TOOLTIP_P2N_SHOW_MAPPINGS=Define package to namespace mapping for customization.

#
#WebServiceAxisBeanConfigFragment
#

#
#WebServiceAxisBeanConfigPage
#
TOOLTIP_PBCF_PAGE=
TOOLTIP_PBCF_TEXT_URI=The SOAP body namespace and unique identifier of the Web service.
TOOLTIP_PBME_TREE_METHODS=Java bean methods to include.
PAGE_TITLE_WSBEAN_CONFIG=Web Service Java Bean Identity
PAGE_DESC_WSBEAN_CONFIG=Configure the Java bean as a Web service.
LABEL_STYLE_USE=Style and Use
STYLE_RPC_LITERAL=Document/ Literal
STYLE_DOC_LITERAL=Document/ Literal (Wrapped)
STYLE_RPC_ENCODED=RPC/ Encoded

#
#WSDLConsumptionTaskFactory
#

#
#CopyAxisServerConfigTask
#

TASK_LABEL_COPY_SERVER_CONFIG_FILES=Copy server-config.wsdd from the server location to the Web Project
TASK_DESC_COPY_SERVER_CONFIG_FILES=Coping server-config.wsdd from the server location to the Web Project


#
#LiteralSupportMessageTask
#
TASK_LABEL_LITERAL_SUPPORT_MESSAGE=Axis support for Literal encoding message task
TASK_DESC_LITERAL_SUPPORT_MESSAGE=Axis support for Literal encoding message task

#
#BUAxisInputCommand and BUAxisOutputCommand
#

TASK_LABEL_BU_AXIS_INPUT=Bottom up Axis input commmand
TASK_DESC_BU_AXIS_INPUT=Bottom up Axis input commmand
TASK_LABEL_BU_AXIS_OUTPUT=Bottom up Axis output commmand
TASK_DESC_BU_AXIS_OUTPUT=Bottom up Axis output commmand

