2016-05-03 7 views
9

Ich versuche, Swagger zu verwenden, um meine Pause api zu dokumentieren, und ich hatte einige Erfolge, aber ich stoße auf eine Wand, wenn es um beschränkte Ressourcenparameter geht. Ich benutze JBoss RESTEasy mit Hibernate Validator Provider und Jackson 2.x kommentierte POJOs. Das Problem, das ich bin schlagen ist, wenn @ DecimalMin/@ DecimalMax Anmerkungen angetroffen ich einjavax validation mit swagger & jboss

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

Es scheint, dass Swagger versucht, eine neuere Version der javax.validation.constraints zu verwenden. * (V1.1.0 .Final) library und jboss verwendet eine ältere Version (v1.0.0.GA). Ich habe alles versucht, um die richtige Bibliothek zu verwenden, ohne Erfolg.

Umwelt ist JBoss EAP 6.4.0.GA

Mein Prahlerei Eintrag (pom.xml):

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

Beispiel 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; 
... 

ich viel ausprobiert habe von den Dingen, aber je mehr ich lernte, glaube ich, dass die folgenden meine zwei relevantesten Versuche sind, meine Abhängigkeiten in Ordnung zu bringen:

Versuch 1: Ausschließen javax.validation von Hibernate Validator & let Prahlerei sind es:

<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> 

Versuch 2: Fügen Sie javax.validation v1.1.0.Final ausdrücklich:

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

Maven Abhängigkeitsbaum (Versuch 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 

Also meine Frage ist: Wie kann ich Swagger mit JBoss Hibernate Validator Resteasy &?

P.S. Ich bin neu bei swagger/jboss/javaee, also bitte verzeih alle dummen Fragen und zögere nicht, nach mehr Informationen zu fragen. Ich bin mir nicht sicher, was ich hier alles geben sollte.

+0

Welche Art von Umgebung ist das? Ein Java EE Container wie JBoss EAP oder WildFly? Oder Java SE Stil, Tomcat etc.? Und können Sie das Abhängigkeitsdiagramm (mvn dependency: tree) posten? – Gunnar

+0

Der Frage hinzugefügt. Umgebung ist JBoss EAP 6.4.0.GA. Abhängigkeitsbaum für Versuch Nr. 1 oben. – Jeremy

+0

Von dem, was ich sagen kann Versuch # 1 tut, was ich erwarte, und swagger schließt die javax.validation Bibliotheken mit der korrekten Version ein. Also bin ich sprachlos, warum ich den NoSuchMethodError bekomme ... – Jeremy

Antwort

0

Es stellt sich heraus, dass JBoss EAP eine eigene Version der Validierungsbibliothek zur Verfügung stellt (eine alte Version).

Ich konnte Kopie in der richtigen Validierung .jar-Datei und bearbeiten Sie die Datei auf module.xml:

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

Dann JBoss verweisen auf die korrekte Validierung Bibliothek:

... 

<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>