<?xml version="1.0" encoding="UTF-8"?>
<!--
  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.
-->
<toolspec xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
      xmlns:xhtml="http://www.w3.org/TR/xhtml1/strict"
      xsi:schemaLocation="http://cxf.apache.org/Xutil/ToolSpecification http://cxf.apache.org/schema/xutil/tool-specification.xsd"
      xmlns="http://cxf.apache.org/Xutil/ToolSpecification"
      xmlns:ts="http://cxf.apache.org/Xutil/ToolSpecification">

    <annotation>
Examples:

        wsdl2java HelloWorld.wsdl
        wsdl2java -p com.iona.greeting Greeting.wsdl
        wsdl2java -client HelloWorld.wsdl
    </annotation>

    <usage>
        <optionGroup id="options">
            <option id="frontend" maxOccurs="unbounded">
                <annotation>
                    Specify the frontend (defaults to JAXWS)
                </annotation>
                <switch>fe</switch>
                <switch>frontend</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>frontend name</annotation>
                </associatedArgument>
            </option>

            <option id="databinding" maxOccurs="unbounded">
                <annotation>
                    Specify the data binding (defaults to JAXB)
                </annotation>
                <switch>db</switch>
                <switch>databinding</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>data binding name</annotation>
                </associatedArgument>
            </option>

            <option id="wsdlversion" maxOccurs="unbounded">
                <annotation>
                    WSDL version, default is WSDL1.1
                </annotation>
                <switch>wv</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>[wsdl version]</annotation>
                </associatedArgument>
            </option>

            <option id="packagename" maxOccurs="unbounded">
                <annotation>
                    The java package name to use for the generated code.
                    Also, optionally specify the wsdl namespace mapping
                    to a particular java packagename.
                </annotation>
                <switch>p</switch>
                <associatedArgument placement="afterSpace">
                    <valuetype>NamingSpacePackageString</valuetype>
                    <annotation>[wsdl namespace =]Package Name</annotation>
                </associatedArgument>
            </option>

            <option id="servicename">
                <annotation>
                    The wsdl service name name to use for the generated code.
                    Also, optionally specify the wsdl namespace.
                </annotation>
                <switch>sn</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>service-name</annotation>
                </associatedArgument>
            </option>

            <option id="binding" maxOccurs="unbounded">
                <annotation>
                    Specify external jaxws or jaxb binding files, (Each
                    file must have its own -b)
                </annotation>
                <switch>b</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>binding-name</annotation>
                </associatedArgument>
            </option>

            <option id="catalog" maxOccurs="1">
                <annotation>
                    Specify catalog file to map the imported wsdl/schema
                </annotation>
                <switch>catalog</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>catalog-file-name</annotation>
                </associatedArgument>
            </option>

            <option id="outputdir" maxOccurs="1">
                <annotation>
                    The directory in which the code is placed</annotation>
                <switch>d</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>output-directory</annotation>
                </associatedArgument>
            </option>

            <option id="compile" maxOccurs="1">
                <annotation>
                    Compile the generated file</annotation>
                <switch>compile</switch>
            </option>

            <option id="classdir" maxOccurs="1">
                <annotation>
                    Specify where to place generated class files</annotation>
                <switch>classdir</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>compile-classes-directory</annotation>
                </associatedArgument>
            </option>

            <option id="impl" maxOccurs="1">
                <annotation>
                    Generate the dummy service implementation.</annotation>
                <switch>impl</switch>
            </option>

            <option id="server" maxOccurs="1">
                <annotation>
                    Generates the server code</annotation>
                <switch>server</switch>
            </option>

            <option id="client" maxOccurs="1">
                <annotation>
                    Generates the client code.</annotation>
                <switch>client</switch>
            </option>

            <option id="all" maxOccurs="1">
                <annotation>
                    Generates interfaces,types,service,server,impl,client
                    and ant script.
                </annotation>
                <switch>all</switch>
            </option>

	        <option id="defaultValues" maxOccurs="1">
                <annotation>
                    Generate default values in the impl and client.  Ignored if impl or client
                    is not being generated.
                    
                    Optionally specify the name of the class to provide the default vaules.
                    (default is a RandomValueProvider)
                </annotation>
                <switch>defaultValues</switch>
                <associatedArgument placement="immediate">
                    <annotation>=class name for DefaultValueProvider</annotation>
                </associatedArgument>
            </option>

            <option id="ant" maxOccurs="1">
                <annotation>
                    ant script generation.
                </annotation>
                <switch>ant</switch>
            </option>

            <option id="nexclude" maxOccurs="unbounded">
                <annotation>
                    The wsdl namespace to exclude when generating code. This
                    option can be specified multiple times. Also, optionally
                    specify the java package name to use for this wsdl namespace.
                </annotation>
                <switch>nexclude</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>schema namespace [= java packagename]</annotation>
                </associatedArgument>
            </option>

            <option id="exsoapheader" maxOccurs="1">
                <annotation>
                    To enable processing of extended soap header message binding
                </annotation>
                <switch>exsh</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>enable extended soap header message binding (true, false)</annotation>
                    <valueenum>true|false</valueenum>
                </associatedArgument>
            </option>

            <option id="defaultns" maxOccurs="1">
                <annotation>
                    To enable loading the default namespace package name mapping
                </annotation>
                <switch>dns</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>Default value is true</annotation>
                    <valueenum>true|false</valueenum>
                </associatedArgument>
            </option>

            <option id="defaultex" maxOccurs="1">
                <annotation>
                    To enable loading the default excludes namespace mapping</annotation>
                <switch>dex</switch>
                <associatedArgument placement="afterSpace">
                    <annotation>Default value is true</annotation>
                    <valueenum>true|false</valueenum>
                </associatedArgument>
            </option>

            <option id="validate" maxOccurs="1">
                <annotation>
                    To validate the wsdl before generating the code.  Usage of 
                    this option is highly recommended.
                </annotation>
                <switch>validate</switch>
            </option>

            <option id="newonly" maxOccurs="1">
                <annotation>
                    Don't overwrite any preexisting files, NOTE: You will have to solve any resulting compilation problems by yourself
                </annotation>
                <switch>keep</switch>
            </option>

            <option id="wsdlLocation" maxOccurs="1">
                <annotation>
                    The wsdlLocation that is injected into code.  This location could be the location
                    of the wsdl once the app is deployed which could be different than at
                    code generation time.
                </annotation>
                <associatedArgument placement="afterSpace">
                    <annotation>wsdlLocation attribute</annotation>
                </associatedArgument>
                <switch>wsdlLocation</switch>
            </option>

            <option id="xjc" maxOccurs="1">
                <annotation>
                    Comma separated arguments that are passed directly to XJC when the
                    default databinding of JAXB is used. Using this option, it is possible
                    to cause XJC to load additional plugins that can augment code generation.
                    For example to load the toString(ts) plugin that will add a toString() 
                    method to all generated types the following &lt;xjc arguments&gt; would 
                    be used:
                          -xjc-Xts
                    A list of available XJC plugins can be obtained by pasing -X as the 
                    &lt;xjc arguments&gt;.                     
                </annotation>
                <associatedArgument placement="immediate">
                    <annotation>xjc arguments</annotation>
                </associatedArgument>
                <switch>xjc</switch>
            </option>

        </optionGroup>
        <optionGroup id="common_options">
            <option id="help" maxOccurs="1">
                <annotation>
                    Display detailed information for options.</annotation>
                <switch>h</switch>
                <switch>?</switch>
                <switch>help</switch>
            </option>

            <option id="version">
                <annotation>
                    Display the version of the tool.</annotation>
                <switch>v</switch>
            </option>

            <option id="verbose">
                <annotation>
                    Verbose mode</annotation>
                <switch>verbose</switch>
                <switch>V</switch>
            </option>

            <option id="quiet">
                <annotation>
                    Quiet mode</annotation>
                <switch>quiet</switch>
                <switch>q</switch>
            </option>

        </optionGroup>
        <argument id="wsdlurl" minOccurs="1" maxOccurs="1">
            <annotation>
                WSDL URL</annotation>
        </argument>
    </usage>
</toolspec>
