###############################################################################
# Copyright (c) 2009 Shane Clarke 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:
# Shane Clarke - initial API and implementation
###############################################################################

#properties file for JAXWS Core
pluginName=JAX-WS Tools Core (Incubation)
pluginProvider=Eclipse Web Tools Platform

WEBSERVICE_CLASS_DEFAULT_PUBLIC_CONSTRUCTOR_RULE=Classes annotated with @WebService must have a default public constructor
WEBSERVICE_CLASS_PUBLIC_ABSTRACT_FINAL_RULE=Classes annotated with @WebService must be an outer public class, must not be final, and must not be abstract
WEBSERVICE_CLASS_NO_FINALIZE_METHOD_RULE=Classes annotated with @WebService must not define a finalize() method
WEBMETHOD_ONLY_SUPPORTED_ON_CLASSES_WITH_WEBSERVICE_ANNNOTATION=@WebMethod annotations only supported in classes with the @WebService annotation
WEBSERVICE_SEI_NO_WEBMETHOS_RULE=No @WebMethod annotations allowed in an implementation class that contains an endpointInterface attribute in it's @WebService annotation
WEBSERVICE_ON_SEI_ATTRIBUTES_RULE=Certain @WebService annotation attributes are restricted when used on SEI's
WEBSERVICE_WEBSERVICE_PROVIDER_COEXIST_RULE=@WebService and @WebServiceProvider annotations cannot coexist
ONEWAY_NO_RETURN_VALUE=@Oneway methods must not return a value
WEBMETHOD_ONLY_PUBLIC_METHODS=Methods annotated with @WebMethod must be public, and must not be declared static or final
SOAPBINDING_RULES=@SOAPBinding Rules. Encoded use not supported. No RPC style on methods. No mixing of SOAPBinding styles. RPC style only with wrapped parameter style
WEBMETHOD_EXCLUDE_SPECIFIED_RULE=@WebMethod exclude attribute is not allowed in SEI's. If specified in an implementation class, then other attributes in the @WebMethod annotation are not allowed
SOAPBINDING_DOCUMENT_BARE_RULES=Document Bare operations are subject to a number of restrictions. Combinations of @Oneway. Not @Oneway. Void Return. Non-Void Return. @WebParam Modes IN, OUT, INOUT. Header parameters
HOLDER_TYPES_PARAMETERS_RULE=Parameters that conform to the definition of Holder Types must be annotated with @WebParam.Mode.OUT or @WebParam.Mode.INOUT
UNIQUE_NAMES_RULE=Checks @ResponseWrapper, @RequestWrapper and @WebFault Beans for unique className and faultBean attributes
HANDLERCHAIN_RULES=@HandlerChain and @SOAPMessageHandlers annotations cannot coexist. @HandlerChain allowed on TYPE only
WEBSERVICEREFS_RULES=Each @WebServiceRef annotation inside a @WebServiceRefs must contain name and type elements with non-default values
WEBSERVICE_TARGET_NAMESPACE_RULE=Classes or Interfaces in the default package that are annotated with @javax.jws.WebService must specify a target namespace
WEBSERVICE_WSDL_LOCATION_RULE=The service implementation bean must remain consistent with the portType and bindings declared in this WSDL referenced in the @WebService.wsdlLocation attribute
WEBSERVICEPROVIDER_RULES=A Provider based service endpoint implementation must implement a typed Provider interface and provide a public default constructor.
JAXWS_CATEGORY_NAME=JAX-WS
