###############################################################################
# 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
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
WEBSERVICE_METHOD_PARAMETERS_RETURN_TYPE_RULE=Validates Method Parameters and Return Types
WEBSERVICE_EJB_STATELESS_SESSION=@WebService may only be added to stateless session beans in an EJB module
JAXWS_CATEGORY_NAME=JAX-WS
