## 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.

/**
 * Please modify this class to meet your needs
 * This class is not complete
 */

package $intf.PackageName;

import java.util.logging.Logger;
#foreach ($import in $intf.Imports)
import ${import};
#end

/**
 * This class was generated by $fullversion
 * $currentdate
 * Generated source version: $version
 * 
 */

@javax.jws.WebService(name = "$intf.Name",
#if ($service.ServiceName != "") 
                      serviceName = "$service.ServiceName",
#end
#if ($port != "") 
                      portName = "$port",
#end
#if ($service.Namespace != "") 
                      targetNamespace = "$service.Namespace", 
#end
#if ($intf.Location != "") 
                      wsdlLocation = "$intf.Location",
#end
                      endpointInterface = "$intf.PackageName.$intf.Name")
                      
public class ${intf.Name}Impl implements $intf.Name {

    private static final Logger LOG = Logger.getLogger(${intf.Name}Impl.class.getName());

#foreach ($method in $intf.Methods)
    /* (non-Javadoc)
     * @see $intf.PackageName.$intf.Name#${method.Name}(#foreach ($parameter in $method.Parameters)$parameter.ClassName  $parameter.Name #if ($velocityCount != $method.getParameters().size()),#end)#end*
     */
    public $method.return.ClassName ${method.Name}(#if($method.ParameterListWithoutAnnotation.size() == 0))#end#if($method.ParameterListWithoutAnnotation.size() != 0)#foreach($param in ${method.ParameterListWithoutAnnotation})$param#end)#end#if($method.Exceptions.size() > 0) throws #foreach($exception in $method.Exceptions)$exception.ClassName #if($velocityCount != $method.Exceptions.size()),#end #end #end { 
#if ($method.Async)
       return null;
       /* not called */
#else
        LOG.info("Executing operation $method.Name");
#foreach ($parameter in $method.Parameters)
#if ($parameter.Style.toString() == "IN")
        System.out.println($parameter.Name);
#elseif ($parameter.Style.toString() == "INOUT")        
        System.out.println(${parameter.Name}.value);
#end
#end
        try {
#foreach ($parameter in $method.Parameters)
#if ($parameter.Style.toString() == "OUT")
#set($paramValueName = "${parameter.Name}Value")
            ${parameter.writeDefaultValue(${out}, "            ", ${method.Name}, ${paramValueName})}
            ${parameter.Name}.value = ${paramValueName};
#end        
#end
#if ($method.return.ClassName != "void")
            ${method.return.writeDefaultValue(${out}, "            ", ${method.Name}, "_return")}
            return _return;
#end
        } catch (Exception ex) {
            ex.printStackTrace();
            throw new RuntimeException(ex);
        }
#if ($method.Exceptions.size() > 0) 
#foreach($exception in $method.Exceptions)
        //throw new ${exception.ClassName}("${exception.Name}...");
#end
#end
#end
    }

#end
}
