-
Notifications
You must be signed in to change notification settings - Fork 6k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #1967 from wing328/support-jaxrs-cxf-2
[Java][JAX-RS] Support JAX-RS CXF
- Loading branch information
Showing
32 changed files
with
1,168 additions
and
279 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,31 @@ | ||
#!/bin/sh | ||
|
||
SCRIPT="$0" | ||
|
||
while [ -h "$SCRIPT" ] ; do | ||
ls=`ls -ld "$SCRIPT"` | ||
link=`expr "$ls" : '.*-> \(.*\)$'` | ||
if expr "$link" : '/.*' > /dev/null; then | ||
SCRIPT="$link" | ||
else | ||
SCRIPT=`dirname "$SCRIPT"`/"$link" | ||
fi | ||
done | ||
|
||
if [ ! -d "${APP_DIR}" ]; then | ||
APP_DIR=`dirname "$SCRIPT"`/.. | ||
APP_DIR=`cd "${APP_DIR}"; pwd` | ||
fi | ||
|
||
executable="./modules/swagger-codegen-cli/target/swagger-codegen-cli.jar" | ||
|
||
if [ ! -f "$executable" ] | ||
then | ||
mvn clean package | ||
fi | ||
|
||
# if you've executed sbt assembly previously it will use that instead. | ||
export JAVA_OPTS="${JAVA_OPTS} -XX:MaxPermSize=256M -Xmx1024M -DloggerPath=conf/log4j.properties" | ||
ags="$@ generate -t modules/swagger-codegen/src/main/resources/JavaJaxRS -i modules/swagger-codegen/src/test/resources/2_0/petstore.json -l jaxrs-cxf -o samples/server/petstore/jaxrs-cxf" | ||
|
||
java $JAVA_OPTS -jar $executable $ags |
183 changes: 183 additions & 0 deletions
183
...er-codegen/src/main/java/io/swagger/codegen/languages/AbstractJavaJAXRSServerCodegen.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,183 @@ | ||
package io.swagger.codegen.languages; | ||
|
||
import java.util.ArrayList; | ||
import java.util.Arrays; | ||
import java.util.HashMap; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import io.swagger.codegen.CodegenOperation; | ||
import io.swagger.codegen.CodegenResponse; | ||
import io.swagger.codegen.CodegenType; | ||
import io.swagger.models.Operation; | ||
import io.swagger.models.Path; | ||
import io.swagger.models.Swagger; | ||
|
||
public abstract class AbstractJavaJAXRSServerCodegen extends JavaClientCodegen | ||
{ | ||
/** | ||
* Name of the sub-directory in "src/main/resource" where to find the | ||
* Mustache template for the JAX-RS Codegen. | ||
*/ | ||
protected static final String JAXRS_TEMPLATE_DIRECTORY_NAME = "JavaJaxRS"; | ||
protected String implFolder = "src/main/java"; | ||
protected String title = "Swagger Server"; | ||
|
||
public AbstractJavaJAXRSServerCodegen() | ||
{ | ||
super(); | ||
} | ||
|
||
// ================ | ||
// ABSTRACT METHODS | ||
// ================ | ||
|
||
@Override | ||
public abstract String getHelp(); | ||
|
||
@Override | ||
public abstract String getName(); | ||
|
||
// =============== | ||
// COMMONS METHODS | ||
// =============== | ||
|
||
@Override | ||
public CodegenType getTag() | ||
{ | ||
return CodegenType.SERVER; | ||
} | ||
|
||
@Override | ||
public void preprocessSwagger(Swagger swagger) | ||
{ | ||
if ( "/".equals(swagger.getBasePath()) ) { | ||
swagger.setBasePath(""); | ||
} | ||
|
||
String host = swagger.getHost(); | ||
String port = "8080"; // Default value for a JEE Server | ||
if ( host != null ) { | ||
String[] parts = host.split(":"); | ||
if ( parts.length > 1 ) { | ||
port = parts[1]; | ||
} | ||
} | ||
this.additionalProperties.put("serverPort", port); | ||
if ( swagger.getPaths() != null ) { | ||
for ( String pathname : swagger.getPaths().keySet() ) { | ||
Path path = swagger.getPath(pathname); | ||
if ( path.getOperations() != null ) { | ||
for ( Operation operation : path.getOperations() ) { | ||
if ( operation.getTags() != null ) { | ||
List<Map<String, String>> tags = new ArrayList<Map<String, String>>(); | ||
for ( String tag : operation.getTags() ) { | ||
Map<String, String> value = new HashMap<String, String>(); | ||
value.put("tag", tag); | ||
value.put("hasMore", "true"); | ||
tags.add(value); | ||
} | ||
if ( tags.size() > 0 ) { | ||
tags.get(tags.size() - 1).remove("hasMore"); | ||
} | ||
if ( operation.getTags().size() > 0 ) { | ||
String tag = operation.getTags().get(0); | ||
operation.setTags(Arrays.asList(tag)); | ||
} | ||
operation.setVendorExtension("x-tags", tags); | ||
} | ||
} | ||
} | ||
} | ||
} | ||
} | ||
|
||
@Override | ||
public Map<String, Object> postProcessOperations(Map<String, Object> objs) | ||
{ | ||
@SuppressWarnings("unchecked") | ||
Map<String, Object> operations = (Map<String, Object>) objs.get("operations"); | ||
if ( operations != null ) { | ||
@SuppressWarnings("unchecked") | ||
List<CodegenOperation> ops = (List<CodegenOperation>) operations.get("operation"); | ||
for ( CodegenOperation operation : ops ) { | ||
List<CodegenResponse> responses = operation.responses; | ||
if ( responses != null ) { | ||
for ( CodegenResponse resp : responses ) { | ||
if ( "0".equals(resp.code) ) { | ||
resp.code = "200"; | ||
} | ||
} | ||
} | ||
if ( operation.returnType == null ) { | ||
operation.returnType = "void"; | ||
} else if ( operation.returnType.startsWith("List") ) { | ||
String rt = operation.returnType; | ||
int end = rt.lastIndexOf(">"); | ||
if ( end > 0 ) { | ||
operation.returnType = rt.substring("List<".length(), end).trim(); | ||
operation.returnContainer = "List"; | ||
} | ||
} else if ( operation.returnType.startsWith("Map") ) { | ||
String rt = operation.returnType; | ||
int end = rt.lastIndexOf(">"); | ||
if ( end > 0 ) { | ||
operation.returnType = rt.substring("Map<".length(), end).split(",")[1].trim(); | ||
operation.returnContainer = "Map"; | ||
} | ||
} else if ( operation.returnType.startsWith("Set") ) { | ||
String rt = operation.returnType; | ||
int end = rt.lastIndexOf(">"); | ||
if ( end > 0 ) { | ||
operation.returnType = rt.substring("Set<".length(), end).trim(); | ||
operation.returnContainer = "Set"; | ||
} | ||
} | ||
} | ||
} | ||
return objs; | ||
} | ||
|
||
@Override | ||
public String toApiName(final String name) | ||
{ | ||
String computed = name; | ||
if ( computed.length() == 0 ) { | ||
return "DefaultApi"; | ||
} | ||
computed = sanitizeName(computed); | ||
return camelize(computed) + "Api"; | ||
} | ||
|
||
@Override | ||
public String apiFilename(String templateName, String tag) | ||
{ | ||
String result = super.apiFilename(templateName, tag); | ||
|
||
if ( templateName.endsWith("Impl.mustache") ) { | ||
int ix = result.lastIndexOf('/'); | ||
result = result.substring(0, ix) + "/impl" + result.substring(ix, result.length() - 5) + "ServiceImpl.java"; | ||
result = result.replace(apiFileFolder(), implFileFolder(implFolder)); | ||
} else if ( templateName.endsWith("Factory.mustache") ) { | ||
int ix = result.lastIndexOf('/'); | ||
result = result.substring(0, ix) + "/factories" + result.substring(ix, result.length() - 5) + "ServiceFactory.java"; | ||
result = result.replace(apiFileFolder(), implFileFolder(implFolder)); | ||
} else if ( templateName.endsWith("Service.mustache") ) { | ||
int ix = result.lastIndexOf('.'); | ||
result = result.substring(0, ix) + "Service.java"; | ||
} | ||
return result; | ||
} | ||
|
||
private String implFileFolder(String output) | ||
{ | ||
return outputFolder + "/" + output + "/" + apiPackage().replace('.', '/'); | ||
} | ||
|
||
@Override | ||
public boolean shouldOverwrite(String filename) | ||
{ | ||
return super.shouldOverwrite(filename) && !filename.endsWith("ServiceImpl.java") && !filename.endsWith("ServiceFactory.java"); | ||
} | ||
|
||
} |
73 changes: 73 additions & 0 deletions
73
modules/swagger-codegen/src/main/java/io/swagger/codegen/languages/JavaCXFServerCodegen.java
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,73 @@ | ||
|
||
package io.swagger.codegen.languages; | ||
|
||
import java.io.File; | ||
import java.util.List; | ||
import java.util.Map; | ||
|
||
import io.swagger.codegen.CliOption; | ||
import io.swagger.codegen.CodegenConstants; | ||
import io.swagger.codegen.CodegenOperation; | ||
import io.swagger.models.Operation; | ||
|
||
public class JavaCXFServerCodegen extends AbstractJavaJAXRSServerCodegen | ||
{ | ||
public JavaCXFServerCodegen() | ||
{ | ||
super(); | ||
|
||
sourceFolder = "src/gen/java"; | ||
invokerPackage = "io.swagger.api"; | ||
artifactId = "swagger-jaxrs-server"; | ||
outputFolder = "generated-code/JavaJaxRS-CXF"; | ||
|
||
modelTemplateFiles.put("model.mustache", ".java"); | ||
apiTemplateFiles.put("api.mustache", ".java"); | ||
apiPackage = "io.swagger.api"; | ||
modelPackage = "io.swagger.model"; | ||
|
||
additionalProperties.put("title", title); | ||
|
||
super.embeddedTemplateDir = templateDir = JAXRS_TEMPLATE_DIRECTORY_NAME + File.separator + "cxf"; | ||
|
||
for ( int i = 0; i < cliOptions.size(); i++ ) { | ||
if ( CodegenConstants.LIBRARY.equals(cliOptions.get(i).getOpt()) ) { | ||
cliOptions.remove(i); | ||
break; | ||
} | ||
} | ||
|
||
cliOptions.add(new CliOption(CodegenConstants.IMPL_FOLDER, CodegenConstants.IMPL_FOLDER_DESC)); | ||
} | ||
|
||
@Override | ||
public void processOpts() | ||
{ | ||
super.processOpts(); | ||
sourceFolder = "gen" + File.separator + "java"; | ||
|
||
modelTemplateFiles.clear(); | ||
modelTemplateFiles.put("entityModel.mustache", ".java"); | ||
|
||
supportingFiles.clear(); | ||
} | ||
|
||
@Override | ||
public String getName() | ||
{ | ||
return "jaxrs-cxf"; | ||
} | ||
|
||
|
||
@Override | ||
public void addOperationToGroup(String tag, String resourcePath, Operation operation, CodegenOperation co, Map<String, List<CodegenOperation>> operations) { | ||
super.addOperationToGroup(tag, resourcePath, operation, co, operations); | ||
co.subresourceOperation = !co.path.isEmpty(); | ||
} | ||
|
||
@Override | ||
public String getHelp() | ||
{ | ||
return "Generates a Java JAXRS Server application based on Apache CXF framework."; | ||
} | ||
} |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Oops, something went wrong.