wsdl2codemojo.java
来自「开源的axis2框架的源码。用于开发WEBSERVER」· Java 代码 · 共 732 行 · 第 1/2 页
JAVA
732 行
/*
* 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.
*/
package org.apache.axis2.maven2.wsdl2code;
import org.apache.axis2.util.CommandLineOption;
import org.apache.axis2.util.CommandLineOptionConstants;
import org.apache.axis2.util.CommandLineOptionParser;
import org.apache.axis2.wsdl.codegen.CodeGenerationEngine;
import org.apache.axis2.wsdl.codegen.CodeGenerationException;
import org.apache.maven.artifact.Artifact;
import org.apache.maven.artifact.factory.ArtifactFactory;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
import org.apache.maven.plugin.MojoFailureException;
import org.apache.maven.plugin.logging.Log;
import org.apache.maven.project.MavenProject;
import java.io.File;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.HashMap;
import java.util.HashSet;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Properties;
/**
* @description A Mojo for generating Java sources from a WSDL.
* @goal wsdl2code
* @phase generate-sources
* @requiresDependencyResolution test
*/
public class WSDL2CodeMojo extends AbstractMojo {
/**
* The maven project.
*
* @parameter expression="${project}"
* @read-only
* @required
*/
private MavenProject project;
/**
* The artifact factory.
*
* @parameter expression="${component.org.apache.maven.artifact.factory.ArtifactFactory}"
* @read-only
* @required
*/
private ArtifactFactory artifactFactory;
/**
* The plugins artifact list.
*
* @parameter expression="${plugin.artifacts}"
* @read-only
* @required
*/
private List pluginArtifacts;
/**
* The WSDL file, which is being read.
*
* @parameter expression="${axis2.wsdl2code.wsdl}" default-value="src/main/axis2/service.wsdl"
*/
private File wsdlFile;
/**
* The output directory, where the generated sources are being created.
*
* @parameter expression="${axis2.wsdl2code.target}" default-value="${project.build.directory}/generated-sources/axis2/wsdl2code"
*/
private File outputDirectory;
/**
* Package name of the generated sources; will be used to create a package structure below the
* output directory.
*
* @parameter expression="${axis2.wsdl2code.package}"
* @required
*/
private String packageName;
/**
* The programming language of the generated sources.
*
* @parameter expression="${axis2.wsdl2code.language}" default-value="java"
*/
private String language;
/**
* The databinding framework, which is being used.
*
* @parameter expression="${axis2.wsdl2code.databindingName}" default-value="adb"
*/
private String databindingName;
/**
* Port name, for which to generate sources. By default, sources will be generated for all
* ports.
*
* @parameter expression="${axis2.wsdl2code.portName}"
*/
private String portName;
/**
* Service name, for which to generate sources. By default, sources will be generated for all
* services.
*
* @parameter expression="${axis2.wsdl2code.serviceName}"
*/
private String serviceName;
/**
* Mode, for which sources are being generated; either of "sync", "async" or "both".
*
* @parameter expression="${axis2.wsdl2code.syncMode}" default-value="both"
*/
private String syncMode;
/**
* Whether server side sources are being generated.
*
* @parameter expression="${axis2.wsdl2code.generateServerSide}" default-value="false"
*/
private boolean generateServerSide;
/**
* Whether to generate sources for a test case.
*
* @parameter expression="${axis2.wsdl2code.generateTestCase}" default-value="false"
*/
private boolean generateTestcase;
/**
* Whether to generate a "services.xml" file.
*
* @parameter expression="${axis2.wsdl2code.generateServicesXml}" default-value="false"
*/
private boolean generateServicesXml;
/**
* Whether to generate simply all classes. This is only valid in conjunction with
* "generateServerSide".
*
* @parameter expression="${axis2.wsdl2code.generateAllClasses}" default-value="false"
*/
private boolean generateAllClasses;
/**
* Whether to unpack classes.
*
* @parameter expression="${axis2.wsdl2code.unpackClasses}" default-value="false"
*/
private boolean unpackClasses;
/**
* Whether to generate the server side interface.
*
* @parameter expression="${axis2.wsdl2code.generateServerSideInterface}" default-value="false"
*/
private boolean generateServerSideInterface = false;
/**
* @parameter expression="${axis2.wsdl2code.repositoryPath}"
*/
private String repositoryPath = null;
/**
* @parameter expression="${axis2.wsdl2code.externalMapping}"
*/
private String externalMapping = null;
/**
* @parameter expression="${axis2.wsdl2code.wsdlVersion}"
*/
private String wsdlVersion = null;
/**
* @parameter expression="${axis2.wsdl2code.targetSourceFolderLocation}"
*/
private String targetSourceFolderLocation = null;
/**
* @parameter expression="${axis2.wsdl2code.targetResourcesFolderLocation}"
*/
private String targetResourcesFolderLocation = null;
/**
* @parameter expression="${axis2.wsdl2code.unwrap}" default-value="false" *
*/
private boolean unwrap = false;
/**
* @parameter expression="${axis2.wsdl2code.allPorts}" default-value="false" *
*/
private boolean allPorts = false;
/**
* @parameter expression="${axis2.wsdl2code.backwardCompatible}" default-value="false" *
*/
private boolean backwardCompatible = false;
/**
* @parameter expression="${axis2.wsdl2code.flattenFiles}" default-value="false" *
*/
private boolean flattenFiles = false;
/**
* @parameter expression="${axis2.wsdl2code.skipMessageReceiver}" default-value="false" *
*/
private boolean skipMessageReceiver = false;
/**
* @parameter expression="${axis2.wsdl2code.skipBuildXML}" default-value="false" *
*/
private boolean skipBuildXML = false;
/**
* @parameter expression="${axis2.wsdl2code.skipWSDL}" default-value="false" *
*/
private boolean skipWSDL = false;
/**
* @parameter expression="${axis2.wsdl2code.overWrite}" default-value="false" *
*/
private boolean overWrite = false;
/**
* @parameter expression="${axis2.wsdl2code.suppressPrefixes}" default-value="false" *
*/
private boolean suppressPrefixes = false;
/**
* Specify databinding specific extra options
*
* @parameter expression="${axis2.java2wsdl.options}"
*/
private Properties options;
/** @parameter expression="${axis2.wsdl2code.namespaceToPackages}" */
private String namespaceToPackages = null;
/** @parameter */
private NamespaceURIMapping[] namespaceURIs = null;
private static class InheritedArtifact {
private final String groupId, artifactId;
private boolean added;
InheritedArtifact(String pGroupId, String pArtifactId) {
groupId = pGroupId;
artifactId = pArtifactId;
}
String getGroupId() {
return groupId;
}
String getArtifactId() {
return artifactId;
}
boolean isAdded() {
return added;
}
void setAdded() {
if (added) {
throw new IllegalStateException("This artifact was already added: " +
groupId + ":" + artifactId);
}
}
}
private static final InheritedArtifact[] inheritedArtifacts =
{
new InheritedArtifact("org.apache.ws.commons.axiom", "axiom-api"),
new InheritedArtifact("org.apache.ws.commons.axiom", "axiom-impl"),
new InheritedArtifact("org.apache.ws.commons", "neethi"),
new InheritedArtifact("wsdl4j", "wsdl4j"),
new InheritedArtifact("commons-httpclient", "commons-httpclient")
};
private static final InheritedArtifact[] adbArtifacts =
{
new InheritedArtifact("org.apache.axis2", "axis2-adb")
};
private static final InheritedArtifact[] xbeanArtifacts =
{
new InheritedArtifact("org.apache.axis2", "axis2-xmlbeans"),
new InheritedArtifact("xmlbeans", "xbean")
};
/** Fills the option map. This map is passed onto the code generation API to generate the code. */
private Map fillOptionMap() throws MojoFailureException {
Map optionMap = new HashMap();
////////////////////////////////////////////////////////////////
//WSDL file name
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.WSDL_LOCATION_URI_OPTION,
getStringArray(wsdlFile.getPath())));
//output location
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.OUTPUT_LOCATION_OPTION,
getStringArray(outputDirectory.getPath())));
//////////////////////////////////////////////////////////////////
// Databinding type
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.DATA_BINDING_TYPE_OPTION,
getStringArray(databindingName)));
if ("async".equals(syncMode)) {
// Async only option - forcing to generate async methods only
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_ASYNC_ONLY_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_ASYNC_ONLY_OPTION,
new String[0]));
} else if ("sync".equals(syncMode)) {
// Sync only option - forcing to generate Sync methods only
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_SYNC_ONLY_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.CODEGEN_SYNC_ONLY_OPTION,
new String[0]));
} else if ("both".equals(syncMode)) {
// Do nothing
} else {
throw new MojoFailureException("Invalid syncMode: " + syncMode +
", expected either of 'sync', 'async' or 'both'.");
}
//Package
optionMap.put(
CommandLineOptionConstants.WSDL2JavaConstants.PACKAGE_OPTION,
new CommandLineOption(
CommandLineOptionConstants.WSDL2JavaConstants.PACKAGE_OPTION,
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?