#
# Copyright (c) 1997, 2017, Oracle and/or its affiliates. All rights reserved.
# DO NOT ALTER OR REMOVE COPYRIGHT NOTICES OR THIS FILE HEADER.
#
# This code is free software; you can redistribute it and/or modify it
# under the terms of the GNU General Public License version 2 only, as
# published by the Free Software Foundation.  Oracle designates this
# particular file as subject to the "Classpath" exception as provided
# by Oracle in the LICENSE file that accompanied this code.
#
# This code is distributed in the hope that it will be useful, but WITHOUT
# ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
# FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License
# version 2 for more details (a copy is included in the LICENSE file that
# accompanied this code).
#
# You should have received a copy of the GNU General Public License version
# 2 along with this work; if not, write to the Free Software Foundation,
# Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA.
#
# Please contact Oracle, 500 Oracle Parkway, Redwood Shores, CA 94065 USA
# or visit www.oracle.com if you need additional information or have any
# questions.
#

# Wrapped into an Exception. {0} - localizable exception message of another exception
nestedModelerError=erreur de modeleur d''ex\u00E9cution : {0}

runtime.modeler.no.webservice.annotation=Aucune annotation WebService ne figure sur la classe {0}
runtime.modeler.endpoint.interface.no.webservice=L''interface d''adresse {0} ne comporte aucune annotation WebService
# Wrapped into an Exception. Not concatenated with any other string.
runtime.modeler.class.not.found=la classe {0} est introuvable
# APT - Annotation Processing Tool. Should not be translated.
runtime.modeler.wrapper.not.found=La classe de wrapper {0} est introuvable. Avez-vous ex\u00E9cut\u00E9 le traitement d''annotation pour la g\u00E9n\u00E9rer ?
# Wrapped into an Exception. Not concatenated with any other string.
runtime.modeler.method.not.found=la m\u00E9thode {0} est introuvable sur la classe {1}
runtime.modeler.webmethod.must.be.public=@WebMethod n''est pas autoris\u00E9e sur une m\u00E9thode d''un type autre que public {0}
runtime.modeler.webmethod.must.be.nonstatic=@WebMethod n''est pas autoris\u00E9e sur une m\u00E9thode de type static {0}
runtime.modeler.webmethod.must.be.nonstaticfinal=@WebMethod n''est pas autoris\u00E9e sur une m\u00E9thode de type static ou final {0}
runtime.modeler.oneway.operation.no.out.parameters=une op\u00E9ration unidirectionnelle ne doit pas comporter une classe de param\u00E8tres OUT : {0} m\u00E9thode : {1}
runtime.modeler.oneway.operation.no.checked.exceptions=L''op\u00E9ration unidirectionnelle ne doit g\u00E9n\u00E9rer aucune classe d''exceptions contr\u00F4l\u00E9es : {0}. La m\u00E9thode {1} g\u00E9n\u00E8re {2}
runtime.modeler.cannot.get.serviceName.from.interface=L''\u00E9l\u00E9ment serviceName ne peut pas \u00EAtre extrait d''une interface. Classe : {0}
runtime.modeler.portname.servicename.namespace.mismatch=Les espaces de noms de l''\u00E9l\u00E9ment serviceName \"{0}\" et de l''\u00E9l\u00E9ment portName \"{1}\" doivent correspondre
runtime.modeler.no.package=Une annotation @WebService.targetNamespace doit \u00EAtre indiqu\u00E9e sur les classes sans package. Classe : {0}
runtime.modeler.no.operations=Le service Web d\u00E9fini par la classe {0} ne contient aucun \u00E9l\u00E9ment WebMethod valide.
runtime.modeler.mtom.conflict = Erreur dans @BindingType : la configuration MTOM dans l''identificateur de binding {0} est en conflit avec la fonctionnalit\u00E9 @MTOM {1}
# {0} - feature class name, {1} - feature class name
runtime.modeler.feature.conflict= La fonctionnalit\u00E9 {0} dans l''impl\u00E9mentation est en conflit avec {1} dans la configuration WSDL
# {0} - absolute class location
runtime.modeler.addressing.responses.nosuchmethod = L''API JAX-WS 2.1 est charg\u00E9e \u00E0 partir de {0}, mais le runtime JAX-WS exige l''API JAX-WS 2.2 ou une version plus r\u00E9cente. Utilisez le m\u00E9canisme Standard Override Mechanism pour charger l''API JAX-WS 2.2 ou une version plus r\u00E9cente.
runtime.modeler.wsfeature.no.ftrconstructor=L''annotation {0} n''est pas reconnaissable, au moins un constructeur de {1} doit \u00EAtre marqu\u00E9 avec @FeatureConstructor
runtime.modeler.wsfeature.morethanone.ftrconstructor=L''annotation {0} est interdite, seul un constructeur de {1} peut \u00EAtre marqu\u00E9 comme @FeatureConstructor
runtime.modeler.wsfeature.illegal.ftrconstructor=L''annotation {0} est interdite ; dans {1}, la valeur @FeatureConstructor ne correspond pas aux param\u00E8tres constructeur
# WRAPPED is a member of enumeration and should not be translated. {0} - SoapBinding annotation, {1} - class name
runtime.modeler.invalid.soapbinding.parameterstyle= Syntaxe incorrecte de l''annotation {0} sur {1}, ParameterStyle ne peut \u00EAtre que WRAPPED avec le service Web de style RPC.
runtime.modeler.soapbinding.conflict= Le style SOAPBinding {0} de la m\u00E9thode {1} est en conflit avec le style SOAPBinding {2} global
runtimemodeler.invalid.soapbindingOnMethod=Annotation {0} non valide sur la m\u00E9thode {1} dans la classe {2}, une m\u00E9thode ne peut pas \u00EAtre annot\u00E9e avec @SOAPBinding avec le style \"RPC\"
unable.to.create.JAXBContext=Impossible de cr\u00E9er JAXBContext
# BARE is a member of enumeration and should not be translated.
not.a.valid.bare.method=L''interface d''adresse de service {0} comporte la m\u00E9thode {1} qui est annot\u00E9e comme \u00E9tant BARE mais contient plus d''un param\u00E8tre li\u00E9 au corps. Cela n''est pas valide. Annotez la m\u00E9thode comme suit : @SOAPBinding(parameterStyle=SOAPBinding.ParameterStyle.WRAPPED)
