maven java-ee jboss swagger hibernate-validator

maven - validación javax con swagger y jboss



javax validation validation (1)

Resultó que JBoss EAP estaba proporcionando su propia versión de la biblioteca de validación (una versión anterior).

Pude copiar el archivo .jar de validación correcto y editar el archivo module.xml en:

$JBOSS_HOME/modules/system/layers/base/javax/validation/api/main

Luego, señale JBoss a la biblioteca de validación correcta:

... <module xmlns="urn:jboss:module:1.1" name="javax.validation.api"> <resources> <!-- OLD ONE: <resource-root path="validation-api-1.0.0.GA-redhat-3.jar"/> --> <!-- NEW ONE BELOW: --> <resource-root path="validation-api-1.1.0.Final.jar"/> <!-- Insert resources here --> </resources> <dependencies> <module name="org.jboss.logging"/> </dependencies> </module>

Intento usar swagger para documentar mi api de descanso, y he tenido cierto éxito, pero estoy llegando a un muro cuando se trata de parámetros de recursos restringidos. Estoy usando JBoss RESTEasy con el proveedor de validadores de hibernación y POJOs anotados Jackson 2.x. El problema al que me estoy enfrentando es cuando se encuentran las anotaciones @ DecimalMin / @ DecimalMax. Obtengo un

java.lang.NoSuchMethodError: javax.validation.constraints.DecimalMin.inclusive()Z

Parece que swagger está intentando usar una versión más nueva de la biblioteca javax.validation.constraints. * (V1.1.0.Final) y jboss está usando una versión anterior (v1.0.0.GA). Intenté todo lo que se me ocurrió para incluir la biblioteca adecuada en vano.

El entorno es JBoss EAP 6.4.0.GA

Mi entrada swagger (pom.xml):

<dependency> <groupId>io.swagger</groupId> <artifactId>swagger-jaxrs</artifactId> <version>1.5.8</version> </dependency>

Ejemplo de POJO Snippet:

... import javax.validation.constraints.DecimalMax; import javax.validation.constraints.DecimalMin; ... @JsonInclude(JsonInclude.Include.NON_NULL) @Generated("org.jsonschema2pojo") @JsonPropertyOrder({ "altM", "altDatum" }) public class Altitude { @JsonProperty("altM") @DecimalMin("-2000") @DecimalMax("10000") @NotNull private Double altM; ...

He intentado muchas cosas, pero cuanto más he aprendido, creo que los siguientes son mis dos intentos más importantes para enderezar mis dependencias:

Intento 1: Excluya javax.validation del validador de hibernación y permita que swagger lo incluya:

<dependency> <groupId>org.jboss.resteasy</groupId> <artifactId>resteasy-hibernatevalidator-provider</artifactId> <version>3.0.16.Final</version> <exclusions> <exclusion> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> </exclusion> </exclusions> </dependency>

Intento 2: incluir javax.validation v1.1.0.Final explícitamente:

<dependency> <groupId>javax.validation</groupId> <artifactId>validation-api</artifactId> <version>1.1.0.Final</version> </dependency>

Maven Dependency Tree (intento 1):

[INFO] --- maven-dependency-plugin:2.8:tree (default-cli) @ MissionPlanningService --- [INFO] mil.army.cerdec.cpi.mcas:MissionPlanningService:war:0.0.2-SNAPSHOT [INFO] +- org.jboss.resteasy:resteasy-jaxrs:jar:3.0.16.Final:compile [INFO] | +- org.jboss.spec.javax.ws.rs:jboss-jaxrs-api_2.0_spec:jar:1.0.0.Final:compile [INFO] | +- org.jboss.spec.javax.annotation:jboss-annotations-api_1.2_spec:jar:1.0.0.Final:compile [INFO] | +- javax.activation:activation:jar:1.1.1:compile [INFO] | +- org.apache.httpcomponents:httpclient:jar:4.3.6:compile [INFO] | | +- org.apache.httpcomponents:httpcore:jar:4.3.3:compile [INFO] | | +- commons-logging:commons-logging:jar:1.1.3:compile [INFO] | | /- commons-codec:commons-codec:jar:1.6:compile [INFO] | +- commons-io:commons-io:jar:2.1:compile [INFO] | +- net.jcip:jcip-annotations:jar:1.0:compile [INFO] | /- org.jboss.logging:jboss-logging:jar:3.1.4.GA:compile [INFO] +- org.jboss.resteasy:resteasy-hibernatevalidator-provider:jar:3.0.16.Final:compile [INFO] | +- org.hibernate:hibernate-validator:jar:4.3.1.Final:compile [INFO] | /- org.jboss.weld.se:weld-se:jar:2.1.0.Final:compile [INFO] +- commons-lang:commons-lang:jar:2.6:compile [INFO] +- org.jboss.resteasy:resteasy-jackson2-provider:jar:3.0.16.Final:compile [INFO] | +- com.fasterxml.jackson.core:jackson-core:jar:2.6.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-databind:jar:2.6.3:compile [INFO] | +- com.fasterxml.jackson.core:jackson-annotations:jar:2.6.3:compile [INFO] | /- com.fasterxml.jackson.jaxrs:jackson-jaxrs-json-provider:jar:2.6.3:compile [INFO] | +- com.fasterxml.jackson.jaxrs:jackson-jaxrs-base:jar:2.6.3:compile [INFO] | /- com.fasterxml.jackson.module:jackson-module-jaxb-annotations:jar:2.6.3:compile [INFO] /- io.swagger:swagger-jaxrs:jar:1.5.8:compile [INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-yaml:jar:2.4.5:compile [INFO] | /- org.yaml:snakeyaml:jar:1.12:compile [INFO] +- com.fasterxml.jackson.dataformat:jackson-dataformat-xml:jar:2.4.5:compile [INFO] | /- org.codehaus.woodstox:stax2-api:jar:3.1.4:compile [INFO] +- io.swagger:swagger-core:jar:1.5.8:compile [INFO] | +- org.apache.commons:commons-lang3:jar:3.2.1:compile [INFO] | +- org.slf4j:slf4j-api:jar:1.6.3:compile [INFO] | +- com.fasterxml.jackson.datatype:jackson-datatype-joda:jar:2.4.5:compile [INFO] | | /- joda-time:joda-time:jar:2.2:compile [INFO] | +- io.swagger:swagger-models:jar:1.5.8:compile [INFO] | | /- io.swagger:swagger-annotations:jar:1.5.8:compile [INFO] | /- javax.validation:validation-api:jar:1.1.0.Final:compile [INFO] +- javax.ws.rs:jsr311-api:jar:1.1.1:compile [INFO] +- org.reflections:reflections:jar:0.9.10:compile [INFO] | +- org.javassist:javassist:jar:3.19.0-GA:compile [INFO] | /- com.google.code.findbugs:annotations:jar:2.0.1:compile [INFO] /- com.google.guava:guava:jar:18.0:compile

Entonces mi pregunta es: ¿Cómo uso Swagger con JBoss RESTEasy & Hibernate Validator?

PD: Soy nuevo en swagger / jboss / javaee así que por favor perdona cualquier pregunta tonta y no dudes en pedir más información. No estoy seguro de todo lo que debería proporcionar aquí.