Tuscany WSDL2Java can't handle WSDL fault messages
--------------------------------------------------

                 Key: TUSCANY-978
                 URL: http://issues.apache.org/jira/browse/TUSCANY-978
             Project: Tuscany
          Issue Type: Bug
          Components: Java SCA Tools
    Affects Versions: Java-M2
         Environment: Tuscany Java-M2 and current trunk
            Reporter: Matthew Sykes


I've been playing with the BigBank sample and have added a fault to the 
AccountService's withdraw operation.  After changing the AccountService.wsdl 
(attached), the Tuscany WSDL2Java no longer works:

[INFO] Generating Java service interfaces from 
/home/sykesm/oss-code/tuscany/sca-java-M2/samples/applications/bigbank/account/src/main/resources/wsdl/AccountService.wsdl
[INFO] ------------------------------------------------------------------------
[ERROR] FATAL ERROR
[INFO] ------------------------------------------------------------------------
[INFO] org.apache.axis2.wsdl.codegen.CodeGenerationException: 
org.apache.axis2.wsdl.databinding.UnmatchedTypeException: No type was mapped to 
the name insufficientFundsFault with namespace http://www.bigbank.com/account
[INFO] ------------------------------------------------------------------------
[INFO] Trace
java.lang.IllegalArgumentException: 
org.apache.axis2.wsdl.codegen.CodeGenerationException: 
org.apache.axis2.wsdl.databinding.UnmatchedTypeException: No type was mapped to 
the name insufficientFundsFault with namespace http://www.bigbank.com/account
        at 
org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator.generateFromWSDL(WSDL2JavaGenerator.java:244)
        at 
org.apache.tuscany.tools.wsdl2java.plugin.WSDL2JavaGeneratorMojo.execute(WSDL2JavaGeneratorMojo.java:134)
        at 
org.apache.maven.plugin.DefaultPluginManager.executeMojo(DefaultPluginManager.java:412)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoals(DefaultLifecycleExecutor.java:534)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalWithLifecycle(DefaultLifecycleExecutor.java:475)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoal(DefaultLifecycleExecutor.java:454)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeGoalAndHandleFailures(DefaultLifecycleExecutor.java:306)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.executeTaskSegments(DefaultLifecycleExecutor.java:273)
        at 
org.apache.maven.lifecycle.DefaultLifecycleExecutor.execute(DefaultLifecycleExecutor.java:140)
        at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:322)
        at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:115)
        at org.apache.maven.cli.MavenCli.main(MavenCli.java:256)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at 
sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:64)
        at 
sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:615)
        at org.codehaus.classworlds.Launcher.launchEnhanced(Launcher.java:315)
        at org.codehaus.classworlds.Launcher.launch(Launcher.java:255)
        at org.codehaus.classworlds.Launcher.mainWithExitCode(Launcher.java:430)
        at org.codehaus.classworlds.Launcher.main(Launcher.java:375)
Caused by: org.apache.axis2.wsdl.codegen.CodeGenerationException: 
org.apache.axis2.wsdl.databinding.UnmatchedTypeException: No type was mapped to 
the name insufficientFundsFault with namespace http://www.bigbank.com/account
        at 
org.apache.tuscany.tools.wsdl2java.generate.JavaInterfaceGenerator.generate(JavaInterfaceGenerator.java:178)
        at 
org.apache.tuscany.tools.wsdl2java.generate.WSDL2JavaGenerator.generateFromWSDL(WSDL2JavaGenerator.java:242)
        ... 19 more
Caused by: org.apache.axis2.wsdl.databinding.UnmatchedTypeException: No type 
was mapped to the name insufficientFundsFault with namespace 
http://www.bigbank.com/account
        at 
org.apache.axis2.wsdl.databinding.TypeMappingAdapter.getTypeMappingName(TypeMappingAdapter.java:73)
        at 
org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultParamElements(AxisServiceBasedMultiLanguageEmitter.java:1958)
        at 
org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.getFaultElement(AxisServiceBasedMultiLanguageEmitter.java:1867)
        at 
org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.generateMethodElement(AxisServiceBasedMultiLanguageEmitter.java:1618)
        at 
org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.loadOperations(AxisServiceBasedMultiLanguageEmitter.java:1533)
        at 
org.apache.axis2.wsdl.codegen.emitter.AxisServiceBasedMultiLanguageEmitter.createDOMDocumentForInterface(AxisServiceBasedMultiLanguageEmitter.java:740)
        at 
org.apache.tuscany.tools.wsdl2java.generate.JavaInterfaceEmitter.writeInterface(JavaInterfaceEmitter.java:196)
        at 
org.apache.tuscany.tools.wsdl2java.generate.JavaInterfaceGenerator.generate(JavaInterfaceGenerator.java:174)
        ... 20 more 

The updated WSDL:

<?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.    
-->
<wsdl:definitions xmlns:soap="http://schemas.xmlsoap.org/wsdl/soap/";
        xmlns:wsdl="http://schemas.xmlsoap.org/wsdl/";
        xmlns:xsd="http://www.w3.org/2001/XMLSchema";
        xmlns:account="http://www.bigbank.com/account";
        targetNamespace="http://www.bigbank.com/account";
        name="AccountService">

        <wsdl:types>
                <xsd:schema targetNamespace="http://www.bigbank.com/account";
                        xmlns:xsd="http://www.w3.org/2001/XMLSchema";
                        xmlns:account="http://www.bigbank.com/account";
                        
                        > <!-- xmlns:sdojava="commonj.sdo/java" 
sdojava:package="org.apache.tuscany.samples.bigbank.account" -->
                        
                        
<!--    <xsd:complexType name="DataGraphRoot">  
                <xsd:sequence>
            <xsd:element name="customerProfileData" 
type="account:CustomerProfileData" maxOccurs="unbounded" minOccurs="0" />
            <xsd:element name="StockSummaries" type="account:StockSummary" 
maxOccurs="unbounded" minOccurs="0" />
            <xsd:element name="AccountSummaries" type="account:AccountSummary" 
maxOccurs="unbounded" minOccurs="0" />
            <xsd:element name="StockLogEntries" type="account:StockLogEntry" 
maxOccurs="unbounded" minOccurs="0" />
            <xsd:element name="AccountLogEntries" 
type="account:AccountLogEntry" maxOccurs="unbounded" minOccurs="0" />
        </xsd:sequence>
        </xsd:complexType>-->
                        

                        <xsd:element name="getAccountReport">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="customerID"
                                                        type="xsd:int" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="getAccountReportResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="accountReport"
                                                        
type="account:AccountReport" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:complexType name="AccountReport">
                                <xsd:sequence>
                                        <xsd:element name="accountSummaries"
                                                type="account:AccountSummary" 
maxOccurs="unbounded" />
                                        <xsd:element name="stockSummaries"
                                                type="account:StockSummary" 
maxOccurs="unbounded" />
                                                
                                </xsd:sequence>
                        </xsd:complexType>
                        <xsd:complexType name="AccountSummary">
                                <xsd:attribute name="accountNumber" 
type="xsd:string" />
                                <xsd:attribute name="accountType" 
type="xsd:string" />
                                <xsd:attribute name="balance" type="xsd:float" 
/>
                        </xsd:complexType>

                        <xsd:complexType name="StockSummary">
                            <!-- xsd:attribute name="id" type="xsd:int" / -->
                                <xsd:attribute name="purchaseLotNumber" 
type="xsd:int" />
                                <!-- unique id for this purchase -->
                                <xsd:attribute name="symbol" type="xsd:string" 
/>
                                <xsd:attribute name="quantity" type="xsd:int" />
                                <xsd:attribute name="purchaseDate" 
type="xsd:dateTime" />
                                <xsd:attribute name="purchasePrice" 
type="xsd:float" />
                                <xsd:attribute name="currentPrice" 
type="xsd:float" />
                                <xsd:attribute name="company" type="xsd:string" 
/>
                                <xsd:attribute name="highPrice" 
type="xsd:float" />
                                <xsd:attribute name="lowPrice" type="xsd:float" 
/>
                                
                        </xsd:complexType>

                        <!-- Profile in data base  -->
                        <xsd:element name="getCustomerProfile">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="loginID" 
type="xsd:string" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:complexType name="CustomerProfileData">
                                <xsd:sequence>
                                        <xsd:element name="firstName" 
type="xsd:string" />
                                        <xsd:element name="lastName" 
type="xsd:string" />
                                        <xsd:element name="address" 
type="xsd:string" />
                                        <xsd:element name="email" 
type="xsd:string" />
                                        <xsd:element name="loginID" 
type="xsd:string" />
                                        <xsd:element name="password" 
type="xsd:string" />
                                        <xsd:element name="id" type="xsd:int" />
                                </xsd:sequence>
                        </xsd:complexType>

                        <xsd:element name="getCustomerProfileResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="customerProfile"
                                                        
type="account:CustomerProfileData" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:element name="withdraw">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="accountNumber"
                                                        type="xsd:string" />
                                                <xsd:element name="amount" 
type="xsd:float" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="withdrawResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="balance" 
type="xsd:float" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <!-- @start added fault -->
                        <xsd:element name="insufficientFundsFault">
                            <xsd:complexType name="insufficientFundsFault">
                                <xsd:sequence>
                                    <xsd:element name="message" 
type="xsd:string"/>
                                </xsd:sequence>
                            </xsd:complexType>
                        </xsd:element>
                        <!-- @end added fault -->

                        <xsd:element name="deposit">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="accountNumber"
                                                        type="xsd:string" />
                                                <xsd:element name="amount" 
type="xsd:float" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="depositResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="balance" 
type="xsd:float" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:element name="purchaseStock">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="id" 
type="xsd:int" />
                                                <xsd:element name="stock" 
type="account:StockSummary" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:element name="purchaseStockResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="purchaseSummary"
                                                        
type="account:StockSummary" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>



                        <xsd:element name="sellStock">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="purchaseLotNumber"
                                                        type="xsd:int" /><!-- 
unique id for this purchase -->
                                                <xsd:element name="quantity" 
type="xsd:int" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:element name="createAccount">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="customerProfile"
                                                        
type="account:CustomerProfileData" />
                        <xsd:element name="createSavings"
                                                        type="xsd:boolean" />
                        <xsd:element name="createCheckings"
                                                        type="xsd:boolean" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>  
                        <xsd:element name="createAccountResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element 
name="customerProfile"
                                                        
type="account:CustomerProfileData" />
                                        </xsd:sequence>
                                </xsd:complexType>
                                
                        </xsd:element>

                        <xsd:element name="getAccountLog">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="customerID"
                                                        type="xsd:int" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>
                        <xsd:element name="getAccountLogResponse">
                                <xsd:complexType>
                                        <xsd:sequence>
                                                <xsd:element name="accountLog"
                                                        
type="account:AccountLog" />
                                        </xsd:sequence>
                                </xsd:complexType>
                        </xsd:element>

                        <xsd:complexType name="AccountLog">
                                <xsd:sequence>
                                        <xsd:element name="accountLogEntries"
                                                type="account:AccountLogEntry" 
maxOccurs="unbounded" />
                                        <xsd:element name="stockLogEntries"
                                                type="account:StockLogEntry" 
maxOccurs="unbounded" />
                                                
                                </xsd:sequence>
                        </xsd:complexType>

                        <xsd:complexType name="AccountLogEntry">
                                <xsd:attribute name="logSeqNo" type="xsd:int" />
                                <xsd:attribute name="id" type="xsd:int" />
                                <xsd:attribute name="accountNumber" 
type="xsd:string" />
                                <xsd:attribute name="actionType" 
type="xsd:string" />
                                <xsd:attribute name="amount" type="xsd:float" />
                        </xsd:complexType>

                        <xsd:complexType name="StockLogEntry">
                                <xsd:attribute name="logSeqNo" type="xsd:int" />
                                <xsd:attribute name="id" type="xsd:int" />
                                <xsd:attribute name="symbol" type="xsd:string" 
/>
                                <xsd:attribute name="quantity" type="xsd:int" />
                                <xsd:attribute name="actionType" 
type="xsd:string" />
                                <xsd:attribute name="purchaseLotNumber" 
type="xsd:int" />
                        </xsd:complexType>

                </xsd:schema>
        </wsdl:types>
        <wsdl:message name="getAccountReportRequest">
                <wsdl:part element="account:getAccountReport"
                        name="getAccountReportRequest" />
        </wsdl:message>
        <wsdl:message name="getAccountReportResponse">
                <wsdl:part element="account:getAccountReportResponse"
                        name="getAccountReportResponse" />
        </wsdl:message>

        <wsdl:message name="getCustomerProfileRequest">
                <wsdl:part element="account:getCustomerProfile"
                        name="getCustomerProfile" />
        </wsdl:message>
        <wsdl:message name="getCustomerProfileResponse">
                <wsdl:part element="account:getCustomerProfileResponse"
                        name="getCustomerProfileResponse" />
        </wsdl:message>

        <wsdl:message name="withdrawRequest">
                <wsdl:part element="account:withdraw" name="withdrawRequest" />
        </wsdl:message>

        <wsdl:message name="withdrawResponse">
                <wsdl:part element="account:withdrawResponse"
                        name="withdrawResponse" />
        </wsdl:message>

        <!-- @start added fault -->
        <wsdl:message name="insufficientFundsFault">
            <wsdl:part element="account:insufficientFundsFault" 
name="insufficientFundsFault" />
        </wsdl:message>
        <!-- @end added fault -->

        <wsdl:message name="depositRequest">
                <wsdl:part element="account:deposit" name="depositRequest" />
        </wsdl:message>

        <wsdl:message name="depositResponse">
                <wsdl:part element="account:depositResponse"
                        name="depositResponse" />
        </wsdl:message>

        <wsdl:message name="purchaseStockRequest">
                <wsdl:part element="account:purchaseStock"
                        name="purchaseStockRequest" />
        </wsdl:message>

        <wsdl:message name="purchaseStockResponse">
                <wsdl:part element="account:purchaseStockResponse"
                        name="purchaseStockResponse" />
        </wsdl:message>

        <wsdl:message name="sellStockRequest">
                <wsdl:part element="account:sellStock" name="sellStockRequest" 
/>
        </wsdl:message>
        
        <wsdl:message name="createAccountRequest">
                <wsdl:part element="account:createAccount" 
name="createAccountRequest" />
        </wsdl:message>

        <wsdl:message name="createAccountResponse">
                <wsdl:part element="account:createAccountResponse" 
name="createAccountResponse" />
        </wsdl:message>

        <wsdl:message name="getAccountLogRequest">
                <wsdl:part element="account:getAccountLog"
                        name="getAccountLogRequest" />
        </wsdl:message>
        
        <wsdl:message name="getAccountLogResponse">
                <wsdl:part element="account:getAccountLogResponse"
                        name="getAccountLogResponse" />
        </wsdl:message>

        <wsdl:portType name="AccountService">
                <wsdl:operation name="getAccountReport">
                        <wsdl:input message="account:getAccountReportRequest" />
                        <wsdl:output message="account:getAccountReportResponse" 
/>
                </wsdl:operation>

                <wsdl:operation name="getCustomerProfile">
                        <wsdl:input message="account:getCustomerProfileRequest" 
/>
                        <wsdl:output 
message="account:getCustomerProfileResponse" />
                </wsdl:operation>

                <wsdl:operation name="withdraw">
                        <wsdl:input message="account:withdrawRequest" />
                        <wsdl:output message="account:withdrawResponse" />
                        <!-- @start added fault -->
                        <wsdl:fault message="account:insufficientFundsFault" 
name="insufficientFundsFault"/>
                        <!-- @end added fault -->
                </wsdl:operation>

                <wsdl:operation name="deposit">
                        <wsdl:input message="account:depositRequest" />
                        <wsdl:output message="account:depositResponse" />
                </wsdl:operation>

                <wsdl:operation name="purchaseStock">
                        <wsdl:input message="account:purchaseStockRequest" />
                        <wsdl:output message="account:purchaseStockResponse" />
                </wsdl:operation>

                <wsdl:operation name="sellStock">
                        <wsdl:input message="account:sellStockRequest" />
                        <wsdl:output message="account:purchaseStockResponse" />
                </wsdl:operation>


                <wsdl:operation name="createAccount">
                        <wsdl:input message="account:createAccountRequest" />
                        <wsdl:output message="account:createAccountResponse" />
                </wsdl:operation>

                <wsdl:operation name="getAccountLog">
                        <wsdl:input message="account:getAccountLogRequest" />
                        <wsdl:output message="account:getAccountLogResponse" />
                </wsdl:operation>

        </wsdl:portType>



        <wsdl:binding name="AccountServiceSOAP" type="account:AccountService">
                <soap:binding style="document"
                        transport="http://schemas.xmlsoap.org/soap/http"; />
                <wsdl:operation name="getAccountReport">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/getAccountReport"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>
                <wsdl:operation name="getCustomerProfile">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/getCustomerProfile"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="withdraw">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/withdraw"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                        <!-- @start added fault -->
                        <wsdl:fault name="insufficientFundsFault">
                            <soap:fault name="insufficientFundsFault" 
use="literal"/>
                        </wsdl:fault>
                        <!-- @end added fault -->
                </wsdl:operation>

                <wsdl:operation name="deposit">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/deposit"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="purchaseStock">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/purchaseStock"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="sellStock">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/sellStock"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="createAccount">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/createAccount"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

                <wsdl:operation name="getAccountLog">
                        <soap:operation
                                
soapAction="http://www.bigbank.com/account/getAccountLog"; />
                        <wsdl:input>
                                <soap:body use="literal" />
                        </wsdl:input>
                        <wsdl:output>
                                <soap:body use="literal" />
                        </wsdl:output>
                </wsdl:operation>

        </wsdl:binding>
        <wsdl:service name="AccountService">
                <wsdl:port binding="account:AccountServiceSOAP"
                        name="AccountServiceSOAP">
                        <soap:address
                                
location="http://localhost:8080/sample-bigbank-account/services/AccountService"; 
/>
                </wsdl:port>
        </wsdl:service>
</wsdl:definitions>


-- 
This message is automatically generated by JIRA.
-
If you think it was sent incorrectly contact one of the administrators: 
http://issues.apache.org/jira/secure/Administrators.jspa
-
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to