// Path: src/main/java/net/winroad/wrdoclet/data/APIParameter.java
// @Data
// public class APIParameter {
// 	private String name;
// 	private String description;
// 	private ParameterOccurs parameterOccurs;
// 	private ParameterLocation parameterLocation;
// 	private String type;
// 	private ModificationHistory history;
// 	private List<APIParameter> fields;
// 	private Example example;
// 	/**
// 	 * whether it's type argument for parent (the parent is generic type).
// 	 */
// 	private boolean isParentTypeArgument;
// 
// 	/*
// 	 * @return Whether this parameter has modification on specified version. If
// 	 * no version specified, returns true.
// 	 */
// 	public boolean isModifiedOnVersion(String version) {
// 		if (version == null || version.isEmpty()) {
// 			return true;
// 		}
// 		if (this.history != null && this.history.isModifiedOnVersion(version)) {
// 			return true;
// 		}
// 		if (this.fields != null) {
// 			for (APIParameter param : this.fields) {
// 				if (param.isModifiedOnVersion(version)) {
// 					return true;
// 				}
// 			}
// 		}
// 		return false;
// 	}
// 
// 	public void appendField(APIParameter field) {
// 		if (this.fields == null) {
// 			this.fields = new LinkedList<APIParameter>();
// 		}
// 
// 		this.fields.add(field);
// 	}
// 
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/ParameterOccurs.java
// public enum ParameterOccurs {
// 	//It should be appeared each time.
// 	REQUIRED,
// 	//It may not be appeared.
// 	OPTIONAL,
// 	//It may not be appeared. But in some cases, depends on other field, 
// 	//it will be appeared each time when other field equals to specified value.
// 	DEPENDS
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/ParameterType.java
// public enum ParameterType {
// 	Request,
// 	Response
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/RequestMapping.java
// @Data
// public class RequestMapping {
// 	private String url;
// 	private String methodType;
// 	private String tooltip;
// 	private String containerName;
// 	private String consumes;
// 	private String produces;
// 	private String headers;
// 	private String params;
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/WRDoc.java
// public class WRDoc {
// 	private Map<String, List<OpenAPI>> taggedOpenAPIs = new HashMap<String, List<OpenAPI>>();
// 
// 	private List<AbstractDocBuilder> builders = new LinkedList<AbstractDocBuilder>();
// 
// 	// The collection of tag name in this Doc.
// 	private Set<String> wrTags = new HashSet<String>();
// 
// 	private Configuration configuration;
// 
// 	private String docGeneratedDate;
// 	
// 	private Logger logger = LoggerFactory.getLogger(this.getClass());
// 	
// 	public Configuration getConfiguration() {
// 		return configuration;
// 	}
// 
// 	public Set<String> getWRTags() {
// 		return this.wrTags;
// 	}
// 
// 	public Map<String, List<OpenAPI>> getTaggedOpenAPIs() {
// 		return taggedOpenAPIs;
// 	}
// 	
// 	public String getDocGeneratedTime() {
// 		return this.docGeneratedDate;
// 	}
// 
// 	public WRDoc(Configuration configuration) {
// 		this.configuration = configuration;
// 		Calendar c = Calendar.getInstance();
// 		DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ssz");
// 		this.docGeneratedDate = df.format(c.getTime());
// 		this.builders.add(new RESTDocBuilder(this));
// 		this.logger.debug("RESTDocBuilder loaded.");
// 		this.builders.add(new SOAPDocBuilder(this));
// 		this.logger.debug("SOAPDocBuilder loaded.");
// 		String dubboConfigPath = ((AbstractConfiguration) this.configuration).dubboconfigpath;
// 		this.builders.add(new DubboDocBuilder(this));
// 		this.logger.debug("DubboDocBuilder loaded with config path:" + dubboConfigPath);
// 		this.builders.add(new MQDocBuilder(this));
// 		this.logger.debug("MQDocBuilder loaded.");
// 		this.build();
// 	}
// 
// 	private void build() {
// 		for (AbstractDocBuilder builder : this.builders) {
// 			builder.buildWRDoc();
// 		}
// 	}
// }


import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import net.winroad.wrdoclet.data.APIParameter;
import net.winroad.wrdoclet.data.ParameterOccurs;
import net.winroad.wrdoclet.data.ParameterType;
import net.winroad.wrdoclet.data.RequestMapping;
import net.winroad.wrdoclet.data.WRDoc;
import com.sun.javadoc.AnnotationDesc;
import com.sun.javadoc.AnnotationDesc.ElementValuePair;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.Tag;
package net.winroad.wrdoclet.builder;




public class SOAPDocBuilder extends AbstractServiceDocBuilder {
	public SOAPDocBuilder(WRDoc wrDoc) {
		super(wrDoc);
	}

	@Override
// Path: src/main/java/net/winroad/wrdoclet/data/APIParameter.java
// @Data
// public class APIParameter {
// 	private String name;
// 	private String description;
// 	private ParameterOccurs parameterOccurs;
// 	private ParameterLocation parameterLocation;
// 	private String type;
// 	private ModificationHistory history;
// 	private List<APIParameter> fields;
// 	private Example example;
// 	/**
// 	 * whether it's type argument for parent (the parent is generic type).
// 	 */
// 	private boolean isParentTypeArgument;
// 
// 	/*
// 	 * @return Whether this parameter has modification on specified version. If
// 	 * no version specified, returns true.
// 	 */
// 	public boolean isModifiedOnVersion(String version) {
// 		if (version == null || version.isEmpty()) {
// 			return true;
// 		}
// 		if (this.history != null && this.history.isModifiedOnVersion(version)) {
// 			return true;
// 		}
// 		if (this.fields != null) {
// 			for (APIParameter param : this.fields) {
// 				if (param.isModifiedOnVersion(version)) {
// 					return true;
// 				}
// 			}
// 		}
// 		return false;
// 	}
// 
// 	public void appendField(APIParameter field) {
// 		if (this.fields == null) {
// 			this.fields = new LinkedList<APIParameter>();
// 		}
// 
// 		this.fields.add(field);
// 	}
// 
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/ParameterOccurs.java
// public enum ParameterOccurs {
// 	//It should be appeared each time.
// 	REQUIRED,
// 	//It may not be appeared.
// 	OPTIONAL,
// 	//It may not be appeared. But in some cases, depends on other field, 
// 	//it will be appeared each time when other field equals to specified value.
// 	DEPENDS
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/ParameterType.java
// public enum ParameterType {
// 	Request,
// 	Response
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/RequestMapping.java
// @Data
// public class RequestMapping {
// 	private String url;
// 	private String methodType;
// 	private String tooltip;
// 	private String containerName;
// 	private String consumes;
// 	private String produces;
// 	private String headers;
// 	private String params;
// }
// 
// Path: src/main/java/net/winroad/wrdoclet/data/WRDoc.java
// public class WRDoc {
// 	private Map<String, List<OpenAPI>> taggedOpenAPIs = new HashMap<String, List<OpenAPI>>();
// 
// 	private List<AbstractDocBuilder> builders = new LinkedList<AbstractDocBuilder>();
// 
// 	// The collection of tag name in this Doc.
// 	private Set<String> wrTags = new HashSet<String>();
// 
// 	private Configuration configuration;
// 
// 	private String docGeneratedDate;
// 	
// 	private Logger logger = LoggerFactory.getLogger(this.getClass());
// 	
// 	public Configuration getConfiguration() {
// 		return configuration;
// 	}
// 
// 	public Set<String> getWRTags() {
// 		return this.wrTags;
// 	}
// 
// 	public Map<String, List<OpenAPI>> getTaggedOpenAPIs() {
// 		return taggedOpenAPIs;
// 	}
// 	
// 	public String getDocGeneratedTime() {
// 		return this.docGeneratedDate;
// 	}
// 
// 	public WRDoc(Configuration configuration) {
// 		this.configuration = configuration;
// 		Calendar c = Calendar.getInstance();
// 		DateFormat df = new SimpleDateFormat("yyyy.MM.dd HH:mm:ssz");
// 		this.docGeneratedDate = df.format(c.getTime());
// 		this.builders.add(new RESTDocBuilder(this));
// 		this.logger.debug("RESTDocBuilder loaded.");
// 		this.builders.add(new SOAPDocBuilder(this));
// 		this.logger.debug("SOAPDocBuilder loaded.");
// 		String dubboConfigPath = ((AbstractConfiguration) this.configuration).dubboconfigpath;
// 		this.builders.add(new DubboDocBuilder(this));
// 		this.logger.debug("DubboDocBuilder loaded with config path:" + dubboConfigPath);
// 		this.builders.add(new MQDocBuilder(this));
// 		this.logger.debug("MQDocBuilder loaded.");
// 		this.build();
// 	}
// 
// 	private void build() {
// 		for (AbstractDocBuilder builder : this.builders) {
// 			builder.buildWRDoc();
// 		}
// 	}
// }


// Path: src/main/java/net/winroad/wrdoclet/builder/SOAPDocBuilder.java
import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import net.winroad.wrdoclet.data.APIParameter;
import net.winroad.wrdoclet.data.ParameterOccurs;
import net.winroad.wrdoclet.data.ParameterType;
import net.winroad.wrdoclet.data.RequestMapping;
import net.winroad.wrdoclet.data.WRDoc;
import com.sun.javadoc.AnnotationDesc;
import com.sun.javadoc.AnnotationDesc.ElementValuePair;
import com.sun.javadoc.ClassDoc;
import com.sun.javadoc.MethodDoc;
import com.sun.javadoc.Parameter;
import com.sun.javadoc.Tag;

package net.winroad.wrdoclet.builder;




public class SOAPDocBuilder extends AbstractServiceDocBuilder {
	public SOAPDocBuilder(WRDoc wrDoc) {
		super(wrDoc);
	}

	@Override
	protected RequestMapping parseRequestMapping(MethodDoc method) {