#
# Copyright (c) 2005, 2016, 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.
#

wsimport.usage=Usage: {0} [options] <WSDL_URI>\n\n\
Use "wsimport -help" for a detailed description of options.

wsimport.help=\nUsage: {0} [options] <WSDL_URI>\n\n\
\where [options] include:\n\
\  -b <path>                 specify jaxws/jaxb binding files or additional schemas\n\
\                            (Each <path> must have its own -b)\n\
\  -B<jaxbOption>            Pass this option to JAXB schema compiler\n\
\  -catalog <file>           specify catalog file to resolve external entity references\n\
\                            supports TR9401, XCatalog, and OASIS XML Catalog format.\n\
\  -classpath <path>         specify where to find user class files and wsimport extensions\n\
\  -cp <path>                specify where to find user class files and wsimport extensions\n\
\  -d <directory>            specify where to place generated output files\n\
\  -encoding <encoding>      specify character encoding used by source files\n\
\  -extension                allow vendor extensions - functionality not specified\n\
\                            by the specification.  Use of extensions may\n\
\                            result in applications that are not portable or\n\
\                            may not interoperate with other implementations\n\
\  -help                     display help\n\
\  -httpproxy:<proxy>        set a HTTP proxy. Format is [user[:password]@]proxyHost:proxyPort\n\
\                            (port defaults to 8080)\n\
\  -J<javacOption>           pass this option to javac\n\
\  -keep                     keep generated files\n\
\  -p <pkg>                  specifies the target package\n\
\  -m <name>                 generate module-info.java with given Java module name\n\
\  -quiet                    suppress wsimport output\n\
\  -s <directory>            specify where to place generated source files\n\
\  -target <version>         generate code as per the given JAXWS spec version\n\
\                            Defaults to 2.2, Accepted values are 2.0, 2.1 and 2.2\n\
\                            e.g. 2.0 will generate compliant code for JAXWS 2.0 spec\n\
\  -verbose                  output messages about what the compiler is doing\n\
\  -version                  print version information\n\
\  -fullversion              print full version information\n\
\  -wsdllocation <location>  @WebServiceClient.wsdlLocation value\n\
\  -clientjar <jarfile>      creates the jar file of the generated artifacts along with the\n\
\                            WSDL metadata required for invoking the web service.\n\
\  -generateJWS              generate stubbed JWS implementation file\n\
\  -implDestDir <directory>  specify where to generate JWS implementation file\n\
\  -implServiceName <name>   local portion of service name for generated JWS implementation\n\
\  -implPortName <name>      local portion of port name for generated JWS implementation

wsimport.usage.extensions=\n\
\Extensions:\n\
\  -XadditionalHeaders              map headers not bound to request or response message to \n\
\                                   Java method parameters\n\
\  -Xauthfile                       file to carry authorization information in the format \n\
\                                   http://username:password@example.org/stock?wsdl\n\
\  -Xdebug                          print debug information\n\
\  -Xno-addressing-databinding      enable binding of W3C EndpointReferenceType to Java\n\
\  -Xnocompile                      do not compile generated Java files\n\
\  -XdisableAuthenticator           disable Authenticator used by JAX-WS RI,\n\
\                                   -Xauthfile option will be ignored if set\n\
\  -XdisableSSLHostnameVerification disable the SSL Hostname verification while fetching\n\
\                                   wsdls


wsimport.usage.examples=\n\
\Examples:\n\
\  wsimport stock.wsdl -b stock.xml -b stock.xjb\n\
\  wsimport -d generated http://example.org/stock?wsdl\n\

#{0} - version number
wsimport.version=wsimport version \"{0}\"

#{0} - full version number
wsimport.fullversion=wsimport full version \"{0}\"

wsgen.usage=Usage: {0} [options] <SEI>\n\n\
Use "wsgen -help" for a detailed description of options.

wsgen.help=\nUsage: {0} [options] <SEI>\n\n\
\where [options] include:\n\
\  -classpath <path>          specify where to find input class files and wsgen extensions\n\
\  -cp <path>                 specify where to find input class files and wsgen extensions\n\
\  -d <directory>             specify where to place generated output files\n\
\  -encoding <encoding>       specify character encoding used by source files\n\
\  -extension                 allow vendor extensions - functionality not specified\n\
\                             by the specification.  Use of extensions may\n\
\                             result in applications that are not portable or\n\
\                             may not interoperate with other implementations\n\
\  -help                      display help\n\
\  -J<javacOption>            pass this option to javac\n\
\  -keep                      keep generated files\n\
\  -r <directory>             resource destination directory, specify where to\n\
\                             place resouce files such as WSDLs\n\
\  -s <directory>             specify where to place generated source files\n\
\  -verbose                   output messages about what the compiler is doing\n\
\  -version                   print version information\n\
\  -fullversion               print full version information\n\
\  -wsdl[:protocol]           generate a WSDL file. The protocol is optional.\n\
\                             Valid protocols are {1},\n\
\                             the default is soap1.1.\n\
\                             The non standard protocols {2}\n\
\                             can only be used in conjunction with the\n\
\                             -extension option.\n\
\  -inlineSchemas             inline schemas in the generated wsdl. Must be\n\
\                             used in conjunction with the -wsdl option.\n\
\  -servicename <name>        specify the Service name to use in the generated WSDL\n\
\                             Used in conjunction with the -wsdl option.\n\
\  -portname <name>           specify the Port name to use in the generated WSDL\n\
\                             Used in conjunction with the -wsdl option.\n\
\  -x <file>                  specify External Web Service Metadata xml descriptor

wsgen.usage.extensions=\n\
\Extensions:\n\
\  -Xnocompile                do not compile generated Java files

wsgen.usage.examples=\n\
\Examples:\n\
\  wsgen -cp . example.Stock\n\
\  wsgen -cp . example.Stock -wsdl -servicename '{http://mynamespace}MyService'\n\

#{0} - version number
wsgen.version=wsgen version \"{0}\"

#{0} - full version number
wsgen.fullversion=wsgen full version \"{0}\"

wrapperTask.needEndorsed=\
You are running on JDK6 which comes with JAX-WS {0} API, but this tool requires JAX-WS {1} API. \
Use the endorsed standards override mechanism (http://docs.oracle.com/javase/6/docs/technotes/guides/standards/), \
or set xendorsed="true" on <{2}>.

# {0}, {2} - version (e.g. 2.1), {1} - absolute class location
wrapperTask.loadingIncorrectApi=\
You are loading JAX-WS {0} API from {1} but this tool requires JAX-WS {2} API.

invoker.needEndorsed=\
You are running on JDK6 which comes with JAX-WS {0} API, but this tool requires JAX-WS {1} API. \
Use the endorsed standards override mechanism (http://docs.oracle.com/javase/6/docs/technotes/guides/standards/), \
or use -Xendorsed option.


#
# Generic Messages
#
wscompile.invalidOption=unrecognized parameter {0}
wscompile.existingOption=Ignoring already defined option {0}\n
wsimport.noSuchJaxbOption=no such JAXB option: {0}

wscompile.cant.get.compiler=No Java compiler found. Perhaps environment/JDK problem? \n Used JVM: {0}, {1}/{2}

wscompile.error=error: {0}
wscompile.warning=warning: {0}
wscompile.info=info: {0}
wscompile.duplicateOption=duplicate option: {0}
wscompile.noSuchDirectory=directory not found: {0}
# wscompile.missingOptionArgument
wscompile.missingOptionArgument=option \"{0}\" requires an argument
wscompile.compilationFailed=compilation failed, errors should have been reported
wscompile.unsupportedEncoding=unsupported encoding: {0}

wsimport.missingFile=Missing WSDL_URI

wsgen.invalid.protocol=\"{0}\" is not a supported protocol.  Supported protocols include: {1}.
wsgen.invalid.transport=\"{0}\" is not a supported transport.  Supported transport includes: {1}.
wsgen.class.not.found=Class not found: \"{0}\"
wsgen.could.not.create.file=Could not create file: \"{0}\"
wsgen.missingFile=Missing SEI
wsgen.soap12.without.extension=The optional protocol \"Xsoap1.2\" must be used in conjunction with the \"-extension\" option.
wsgen.protocol.without.extension=The optional protocol \"{0}\" must be used in conjunction with the \"-extension\" option.
wsgen.wsdl.arg.no.genwsdl=The \"{0}\" option can only be in conjunction with the "-wsdl" option.
wsgen.servicename.missing.namespace=The service name \"{0}\" is missing a namespace.
wsgen.servicename.missing.localname=The service name \"{0}\" is missing a localname.
wsgen.portname.missing.namespace=The port name \"{0}\" is missing a namespace.
wsgen.portname.missing.localname=The port name \"{0}\" is missing a localname.
wsgen.class.must.be.implementation.class=The class \"{0}\" is not an endpoint implementation class.
wsimport.NotAFileNorURL = \
    "{0}" is neither a file name nor an URL

wsgen.cannot.gen.wsdl.for.non.soap.binding=wsgen can not generate WSDL for non-SOAP binding: {0} on Class {1}

wsgen.cannot.gen.wsdl.for.soap12.binding=wsgen can not generate WSDL for SOAP 1.2 binding: {0} on class: {1}.\
Please specify \"-extension\" and \"-wsdl:protocol XSoap1.2\" switches. For example:\
wsgen -wsdl:protocol XSoap1.2 -extenson {1}
wsgen.inlineSchemas.only.with.wsdl=\"-inlineSchemas\" must be used in conjunction with the \"-wsdl\" option

wsgen.no.webservices.class=wsgen did not find any class with @WebService annotation. Please specify @WebService annotation on {0}.

wsimport.no.wsdl=Failed to read the WSDL document: {0}, because 1) could not find the document; \
  2) the document could not be read; \
  3) the root element of the document is not <wsdl:definitions>.

wsimport.FailedToParse = \
    Failed to parse "{0}": {1}

wsimport.ParsingWSDL=parsing WSDL...\n\n
wsimport.GeneratingCode=\nGenerating code...\n
wsimport.CompilingCode=\nCompiling code...\n
wsimport.ILLEGAL_TARGET_VERSION = \
    "{0}" is not a valid target version. "2.0" and "2.1" are supported.

wsimport.ILLEGAL_AUTH_INFO = \
    "{0}" is not a valid authorization information format. The format is http[s]://user:password@host:port//<url-path>.

wsimport.ILLEGAL_PROXY = \
    "{0}" is not a valid proxy format. The format is [user[:password]@]proxyHost:proxyPort

wsimport.readingAuthFile = \
  Trying to read authorization file : "{0}"...

# {0} - path to current authorization file, {1} - path to metro authorization file
wsimport.authFileNotFound = \
  Authorization file "{0}" not found. If the WSDL access needs Basic Authentication, please provide authorization file with read access at {1} or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//<url-path>

# {0} - exception message, {1} - systemId (e.g. location of WSDL file) , {2} - path to metro authentication file e.g.: Server returned HTTP response code: 401 for URL: http://localhost:8080/myServer/mywebService?WSDL, "http://localhost:8080/myServer/mywebService?WSDL" needs authorization, please provide authorization file with read access at C:\Documents and Settings\user\.metro\auth or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//
wsimport.authInfoNeeded = \
  {0},  "{1}" needs authorization, please provide authorization file with read access at {2} or use -Xauthfile to give the authorization file and on each line provide authorization information using this format : http[s]://user:password@host:port//<url-path>

wsimport.AUTH_INFO_LINENO = \
  line {0} of {1}


wsimport.ErrorMessage = \
        [ERROR] {0}

wsimport.WarningMessage = \
        [WARNING] {0}

wsimport.InfoMessage = \
        [INFO] {0}

wsimport.DebugMessage = \
        [DEBUG] {0}

wsimport.httpRedirect = \
  Server returned HTTP Status code: "{0}", retrying with "{1}"

wsimport.maxRedirectAttempt = \
  Can not get a WSDL maximum number of redirects(5) reached

wsimport.wsdllocation.clientjar = \
  wsdlLocation cannot be specified when using clientJar option
# {0} - path to a zip file
wsimport.archivingArtifacts=\nArchiving the generated artifacts into {0}.\n
wsimport.archiveArtifact=Adding {0} to the archive {1}
wsimport.fetchingMetadata=\nDownloading the WSDL and associated metadata\n
# {0} - URI, {1} - path to a file
wsimport.document.download=\nDownloading metadata document from {0} to {1}
