Skip to content
This repository was archived by the owner on Jan 21, 2024. It is now read-only.

Override noContent response method name #15

Open
wants to merge 8 commits into
base: master
Choose a base branch
from
19 changes: 15 additions & 4 deletions core/src/main/java/org/raml/jaxrs/codegen/core/Configuration.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,15 @@
*/
package org.raml.jaxrs.codegen.core;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.lang.StringUtils;
import org.jsonschema2pojo.AnnotationStyle;
import org.jsonschema2pojo.DefaultGenerationConfig;
import org.jsonschema2pojo.GenerationConfig;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

public class Configuration
{
public enum JaxrsVersion
Expand Down Expand Up @@ -60,6 +60,7 @@ public static JaxrsVersion fromAlias(final String alias)
private String basePackageName;
private boolean useJsr303Annotations = false;
private AnnotationStyle jsonMapper = AnnotationStyle.JACKSON1;
private Class methodThrowException = Exception.class;

public GenerationConfig createJsonSchemaGenerationConfig()
{
Expand Down Expand Up @@ -146,4 +147,14 @@ public void setJsonMapper(final AnnotationStyle jsonMapper)
{
this.jsonMapper = jsonMapper;
}

public Class getMethodThrowException() {
return methodThrowException;
}

public void setMethodThrowException(Class methodThrowException) {
this.methodThrowException = methodThrowException;
}


}
128 changes: 54 additions & 74 deletions core/src/main/java/org/raml/jaxrs/codegen/core/Generator.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,84 +15,46 @@
*/
package org.raml.jaxrs.codegen.core;

import static com.sun.codemodel.JMod.PUBLIC;
import static com.sun.codemodel.JMod.STATIC;
import static org.apache.commons.lang.StringUtils.capitalize;
import static org.apache.commons.lang.StringUtils.defaultString;
import static org.apache.commons.lang.StringUtils.isNotBlank;
import static org.apache.commons.lang.StringUtils.join;
import static org.apache.commons.lang.StringUtils.strip;
import static org.apache.commons.lang.builder.ToStringStyle.SHORT_PREFIX_STYLE;
import static org.raml.jaxrs.codegen.core.Constants.RESPONSE_HEADER_WILDCARD_SYMBOL;
import static org.raml.jaxrs.codegen.core.Names.EXAMPLE_PREFIX;
import static org.raml.jaxrs.codegen.core.Names.GENERIC_PAYLOAD_ARGUMENT_NAME;
import static org.raml.jaxrs.codegen.core.Names.MULTIPLE_RESPONSE_HEADERS_ARGUMENT_NAME;

import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.lang.annotation.Annotation;
import java.math.BigDecimal;
import java.util.Collection;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Map.Entry;
import java.util.Set;

import javax.mail.internet.MimeMultipart;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.ws.rs.Consumes;
import javax.ws.rs.DefaultValue;
import javax.ws.rs.FormParam;
import javax.ws.rs.HeaderParam;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response.ResponseBuilder;

import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.sun.codemodel.*;
import org.apache.commons.io.IOUtils;
import org.apache.commons.lang.StringUtils;
import org.apache.commons.lang.Validate;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.apache.commons.lang.math.NumberUtils;
import org.raml.model.Action;
import org.raml.model.MimeType;
import org.raml.model.Raml;
import org.raml.model.Resource;
import org.raml.model.Response;
import org.raml.model.parameter.AbstractParam;
import org.raml.model.parameter.FormParameter;
import org.raml.model.parameter.Header;
import org.raml.model.parameter.QueryParameter;
import org.raml.model.parameter.UriParameter;
import org.raml.model.*;
import org.raml.model.parameter.*;
import org.raml.parser.rule.ValidationResult;
import org.raml.parser.visitor.RamlDocumentBuilder;
import org.raml.parser.visitor.RamlValidationService;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Function;
import com.google.common.collect.Lists;
import com.sun.codemodel.JAnnotationArrayMember;
import com.sun.codemodel.JAnnotationUse;
import com.sun.codemodel.JBlock;
import com.sun.codemodel.JClass;
import com.sun.codemodel.JDefinedClass;
import com.sun.codemodel.JDocComment;
import com.sun.codemodel.JExpr;
import com.sun.codemodel.JInvocation;
import com.sun.codemodel.JMethod;
import com.sun.codemodel.JMod;
import com.sun.codemodel.JType;
import com.sun.codemodel.JVar;
import javax.mail.internet.MimeMultipart;
import javax.validation.constraints.Max;
import javax.validation.constraints.Min;
import javax.validation.constraints.NotNull;
import javax.validation.constraints.Size;
import javax.ws.rs.*;
import javax.ws.rs.core.HttpHeaders;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.MultivaluedMap;
import javax.ws.rs.core.Response.ResponseBuilder;
import java.io.File;
import java.io.IOException;
import java.io.Reader;
import java.lang.annotation.Annotation;
import java.math.BigDecimal;
import java.util.*;
import java.util.Map.Entry;

import static com.sun.codemodel.JMod.PUBLIC;
import static com.sun.codemodel.JMod.STATIC;
import static org.apache.commons.lang.StringUtils.*;
import static org.apache.commons.lang.builder.ToStringStyle.SHORT_PREFIX_STYLE;
import static org.raml.jaxrs.codegen.core.Constants.RESPONSE_HEADER_WILDCARD_SYMBOL;
import static org.raml.jaxrs.codegen.core.Names.*;

public class Generator
{
Expand Down Expand Up @@ -242,6 +204,12 @@ private void addResourceMethod(final JDefinedClass resourceInterface,
final JMethod method = context.createResourceMethod(resourceInterface, methodName,
resourceMethodReturnType);

Configuration contiguration = context.getConfiguration();

if (contiguration.getMethodThrowException() != null ) {
method._throws(contiguration.getMethodThrowException());
}

context.addHttpMethodAnnotation(action.getType().toString(), method);

addParamAnnotation(resourceInterfacePath, action, method);
Expand Down Expand Up @@ -492,16 +460,28 @@ else if (MediaType.MULTIPART_FORM_DATA.equals(bodyMimeType.getType()))
}
}

private void addPathParameters(final Action action, final JMethod method, final JDocComment javadoc)
throws Exception
{
for (final Entry<String, UriParameter> namedUriParameter : action.getResource()
.getUriParameters()
.entrySet())
private void addAllResourcePathParameters(Resource resource, final JMethod method, final JDocComment javadoc) throws Exception {

for (final Entry<String, UriParameter> namedUriParameter : resource
.getUriParameters()
.entrySet())
{
addParameter(namedUriParameter.getKey(), namedUriParameter.getValue(), PathParam.class, method,
javadoc);
javadoc);
}

Resource parentResource = resource.getParentResource();

if (parentResource != null ) {
addAllResourcePathParameters(parentResource, method, javadoc);
}

}

private void addPathParameters(final Action action, final JMethod method, final JDocComment javadoc)
throws Exception
{
addAllResourcePathParameters(action.getResource(), method, javadoc);
}

private void addHeaderParameters(final Action action, final JMethod method, final JDocComment javadoc)
Expand Down
28 changes: 15 additions & 13 deletions core/src/main/java/org/raml/jaxrs/codegen/core/Names.java
Original file line number Diff line number Diff line change
Expand Up @@ -15,21 +15,17 @@
*/
package org.raml.jaxrs.codegen.core;

import static org.apache.commons.lang.StringUtils.defaultIfBlank;
import static org.apache.commons.lang.StringUtils.isBlank;
import static org.apache.commons.lang.StringUtils.left;
import static org.apache.commons.lang.StringUtils.remove;
import static org.apache.commons.lang.StringUtils.uncapitalize;
import static org.apache.commons.lang.WordUtils.capitalize;
import static org.apache.commons.lang.math.NumberUtils.isDigits;
import static org.raml.jaxrs.codegen.core.Constants.DEFAULT_LOCALE;

import org.apache.commons.lang.StringUtils;
import org.apache.http.impl.EnglishReasonPhraseCatalog;
import org.raml.model.Action;
import org.raml.model.MimeType;
import org.raml.model.Resource;

import static org.apache.commons.lang.StringUtils.*;
import static org.apache.commons.lang.WordUtils.capitalize;
import static org.apache.commons.lang.math.NumberUtils.isDigits;
import static org.raml.jaxrs.codegen.core.Constants.DEFAULT_LOCALE;

public class Names
{
public static final String GENERIC_PAYLOAD_ARGUMENT_NAME = "entity";
Expand All @@ -41,7 +37,7 @@ public static String buildResourceInterfaceName(final Resource resource)
final String resourceInterfaceName = buildJavaFriendlyName(defaultIfBlank(resource.getDisplayName(),
resource.getRelativeUri()));

return isBlank(resourceInterfaceName) ? "Root" : resourceInterfaceName;
return isBlank(resourceInterfaceName) ? "Root" : resourceInterfaceName.concat("Resource");
}

public static String buildVariableName(final String source)
Expand Down Expand Up @@ -76,7 +72,13 @@ public static String buildResourceMethodName(final Action action, final MimeType

public static String buildResponseMethodName(final int statusCode, final MimeType mimeType)
{
final String status = EnglishReasonPhraseCatalog.INSTANCE.getReason(statusCode, DEFAULT_LOCALE);
final String status;
if (statusCode == 204) {
status = "withoutContent";
} else {
status = EnglishReasonPhraseCatalog.INSTANCE.getReason(statusCode, DEFAULT_LOCALE);
}

return uncapitalize(getShortMimeType(mimeType)
+ buildJavaFriendlyName(defaultIfBlank(status, "_" + statusCode)));
}
Expand All @@ -100,8 +102,8 @@ public static String getShortMimeType(final MimeType mimeType)
return "";
}

return remove(StringUtils.substringAfter(mimeType.getType().toLowerCase(DEFAULT_LOCALE), "/"),
"x-www-");
return remove(remove(StringUtils.substringAfter(mimeType.getType().toLowerCase(DEFAULT_LOCALE), "/"),
"x-www-"),"+");
}

private Names()
Expand Down
6 changes: 3 additions & 3 deletions jersey-example/src/main/java/org/raml/jaxrs/example/Main.java
Original file line number Diff line number Diff line change
Expand Up @@ -22,15 +22,15 @@
import org.glassfish.jersey.media.multipart.MultiPartFeature;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.simple.SimpleContainerFactory;
import org.raml.jaxrs.example.impl.PresentationResource;
import org.raml.jaxrs.example.impl.PresentationResourceImpl;

public class Main
{
@SuppressWarnings("resource")
public static void main(final String[] args) throws Exception
{
final ResourceConfig config = new ResourceConfig();
config.register(PresentationResource.class);
config.register(PresentationResourceImpl.class);
config.register(MultiPartFeature.class);

final Closeable simpleContainer = SimpleContainerFactory.create(new URI("http://0.0.0.0:8181"),
Expand All @@ -44,4 +44,4 @@ public static void main(final String[] args) throws Exception
System.out.println("Bye!");
System.exit(0);
}
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -16,9 +16,9 @@
package org.raml.jaxrs.example.impl;

import org.raml.jaxrs.example.model.Presentation;
import org.raml.jaxrs.example.resource.Presentations;
import org.raml.jaxrs.example.resource.PresentationsResource;

public class PresentationResource implements Presentations
public class PresentationResourceImpl implements PresentationsResource
{
@Override
public GetPresentationsResponse getPresentations(final String authorization,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -15,15 +15,6 @@
*/
package org.raml.jaxrs.codegen.maven;

import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE_PLUS_RUNTIME;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.maven.plugin.AbstractMojo;
import org.apache.maven.plugin.MojoExecutionException;
Expand All @@ -37,6 +28,15 @@
import org.raml.jaxrs.codegen.core.Configuration.JaxrsVersion;
import org.raml.jaxrs.codegen.core.Generator;

import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
import java.util.Collection;
import java.util.List;

import static org.apache.maven.plugins.annotations.ResolutionScope.COMPILE_PLUS_RUNTIME;

/**
* When invoked, this goals read one or more <a href="http://raml.org">RAML</a> files and produces
* JAX-RS annotated Java classes.
Expand Down Expand Up @@ -103,6 +103,12 @@ public class RamlJaxrsCodegenMojo extends AbstractMojo
@Parameter(property = "jsonMapper", defaultValue = "jackson1")
private String jsonMapper;

/**
* Throw exception on Resource Method
*/
//@Parameter(property = "methodThrowException")
//private String methodThrowException;

@Override
public void execute() throws MojoExecutionException, MojoFailureException
{
Expand Down Expand Up @@ -147,6 +153,11 @@ public void execute() throws MojoExecutionException, MojoFailureException
configuration.setOutputDirectory(outputDirectory);
configuration.setUseJsr303Annotations(useJsr303Annotations);
configuration.setJsonMapper(AnnotationStyle.valueOf(jsonMapper.toUpperCase()));
/*
if (methodThrowException != null) {
configuration.setMethodThrowException(Class.forName(methodThrowException));
}
*/
}
catch (final Exception e)
{
Expand Down
15 changes: 15 additions & 0 deletions pom.xml
Original file line number Diff line number Diff line change
Expand Up @@ -90,4 +90,19 @@
</snapshots>
</repository>
</repositories>

<distributionManagement>
<repository>
<id>archiva.ideais</id>
<name>ideais</name>
<url>http://intranet/archiva/repository/ideais</url>
</repository>
<!-- use the following if you ARE using a snapshot version. -->
<snapshotRepository>
<id>archiva.ideais-snapshots</id>
<name>ideais-snapshots</name>
<url>http://intranet/archiva/repository/ideais-snapshots</url>
</snapshotRepository>
</distributionManagement>

</project>