# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements.  See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership.  The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License.  You may obtain a copy of the License at
#
#   http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied.  See the License for the
# specific language governing permissions and limitations
# under the License.

OpenIDE-Module-Name=Maven JAX-WS
OpenIDE-Module-Display-Category=Maven
OpenIDE-Module-Short-Description=JAX-WS Support for Maven
OpenIDE-Module-Long-Description=JAX-WS Support for Maven project type

MSG_CannotFindWEB-INF=Cannot find deployment descriptor folder (WEB-INF).
MSG_GenerateDDEntries=<html>The web server you have selected does not seem to support JSR109 specification.<br>To enable the web server to process annotated web services, the sun-jaxws.xml file should be created<br>and servlet entries for web services need to be generated in web.xml file.<br><br>Do you agree to make these changes in {0} project?<br><br><i>Warning: Please, rebuild the project to ensure the changes are propagated to target directory!</i></html>
TTL_GenerateDDEntries=Non JSR-109 compliant web server detected.
MSG_RemoveDDEntries=<html>The web server you have selected seems to support JSR109 specification.<br>The GlassFish-specific sun-jaxws.xml configuration file is not required in this case\nas well as servlet entries for web services in web.xml file.<br><br>Do you agree to remove sun-jaxws.xml file and web service entries from web.xml?<br><br><i>Warning: Please, rebuild the project to ensure the changes are propagated to target directory!</i></html>
TTL_RemoveDDEntries=JSR-109 compliant web server detected.

# MavenProjectRestSupport
MSG_MissingServer=The target server has not been set or has been removed.\n\nPlease, fix the server problem first.
ConfirmationPanel.dontAskAgain.text=Don't ask this question next time
MSG_Deploy=Deploy {0} project.

TTL_ExtendProjectClasspath=Extending classpath with Jersey libraries. Please wait...