2017-10-12 2 views
0

Ich muss Klassen generieren, die Serializable aus einem Rest WADL mit einem Maven-Plugin zu implementieren. Ich kann dies mit WSDL-Projekten tun, indem ich eine jaxb-bindings.xml hinzufüge, aber das funktioniert nicht für WADL-Projekt.Erzeuge Serialisierbare Klassen aus einem Rest WADL mit Maven

Edit: Jetzt bin ich diesen Fehler, wenn die Dateien zu erzeugen

fehlgeschlagen Ziel auszuführen org.apache.cxf: cxf-wadl2java-Plugin: 3.2.0: wadl2java (generate Quellen) auf Projekt my_project: java.lang.RuntimeException: Fehler beim Kompilieren Schema von WADL: "http://localhost:8080/rest_web/rest/application.wadl" ist kein Teil dieser Kompilierung. Ist das ein Fehler für "http://localhost:8080/rest_web/rest/application.wadl/xsd2.xsd"? -> [Hilfe 1]

  1. Ich fand heraus, dass mein Tag an der falschen Stelle auf dem Kunde war so fixiert ich es.
  2. Ich habe die extraarg für -xjc-Erweiterung becuase von Link zu Oracle Dokumente aus dieser CXF issue
  3. meine jaxb-bindings.xml Aktualisiert

Web-App pom.xml, die die WADL erzeugt:

<plugin> 
    <groupId>com.sun.jersey.contribs</groupId> 
    <artifactId>maven-wadl-plugin</artifactId> 
    <version>1.19.4</version> 
    <executions> 
     <execution> 
      <id>generate</id> 
      <goals> 
       <goal>generate</goal> 
      </goals> 
      <phase>prepare-package</phase> 
     </execution> 
    </executions> 
    <dependencies> 
     <dependency> 
      <groupId>org.slf4j</groupId> 
      <artifactId>slf4j-simple</artifactId> 
      <version>1.7.25</version> 
     </dependency> 
     <dependency> 
      <groupId>xerces</groupId> 
      <artifactId>xercesImpl</artifactId> 
      <version>2.11.0</version> 
     </dependency> 
     <dependency> 
      <groupId>com.fasterxml.jackson.core</groupId> 
      <artifactId>jackson-core</artifactId> 
      <version>2.9.1</version> 
     </dependency> 
    </dependencies> 
    <configuration> 
     <wadlFile>${project.build.outputDirectory}/application.wadl</wadlFile> 
     <formatWadlFile>true</formatWadlFile> 
     <baseUri>http://${server}:8080/${project.name}/rest</baseUri> 
     <packagesResourceConfig> 
      <param>webservice.rest</param> 
     </packagesResourceConfig> 
     <wadlGenerators> 
      <wadlGeneratorDescription> 
       <className>com.sun.jersey.server.wadl.generators.WadlGeneratorApplicationDoc 
       </className> 
       <properties> 
        <property> 
         <name>applicationDocsFile</name> 
         <value>${basedir}/src/main/doc/application-doc.xml</value> 
        </property> 
       </properties> 
      </wadlGeneratorDescription> 
      <wadlGeneratorDescription> 
       <className>com.sun.jersey.server.wadl.generators.WadlGeneratorGrammarsSupport</className> 
       <properties> 
        <property> 
         <name>grammarsFile</name> 
         <value>${basedir}/src/main/doc/application-grammars.xml</value> 
        </property> 
       </properties> 
      </wadlGeneratorDescription> 
     </wadlGenerators> 
    </configuration> 
</plugin> 

Kunde pom.xml-Datei:

<plugin> 
    <groupId>org.apache.cxf</groupId> 
    <artifactId>cxf-wadl2java-plugin</artifactId> 
    <version>3.2.0</version> 
    <executions> 
     <execution> 
      <id>generate-sources</id> 
      <phase>generate-sources</phase> 
      <configuration> 
       <sourceRoot>${basedir}/target/generated-sources</sourceRoot> 
       <wadlOptions> 
        <wadlOption> 
         <wadl>http://localhost:8080/rest_web/rest/application.wadl</wadl> 
         <extraargs> 
          <extraarg>-verbose</extraarg> 
          <extraarg>-xjc-extension</extraarg> 
         </extraargs> 
         <bindingFiles> 
          <bindingFile>${basedir}/src/main/resources/META-INF/jaxb/jaxb-bindings.xml</bindingFile> 
         </bindingFiles> 
         <packagename>org.apache.cxf.systest.jaxrs.codegen.service</packagename> 
         <schemaPackagenames> 
          <schemaPackagename>http://superbooks=org.apache.cxf.systest.jaxrs.codegen.schema</schemaPackagename> 
         </schemaPackagenames> 
        </wadlOption> 
       </wadlOptions> 
      </configuration> 
      <goals> 
       <goal>wadl2java</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

jaxb-bindings.xml

<?xml version="1.0" encoding="UTF-8"?> 
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
      xmlns:xsi="http://www.w3.org/2000/10/XMLSchema-instance" 
      xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
      xsi:schemaLocation="http://java.sun.com/xml/ns/jaxb http://java.sun.com/xml/ns/jaxb/bindingschema_2_0.xsd" 
      version="2.1"> 
    <globalBindings> 
     <serializable uid="1" /> 
    </globalBindings> 
</bindings> 

Antwort

0

Der Grund dafür ist, dass Sie mehr XSD-Schema (importierten XSD-Dateien oder explizit definiert <xs:schema> Tags) in <grammars> Block haben. Sie benötigen eine Wurzel <xs:schema> Tag innerhalb <grammars> Block in Ihrem wadl XJB Bindungen mit wadl2java zu arbeiten. Ich suche jetzt nach einem Workaround ohne Wadl-Bearbeitung, aber immer noch nicht erfolgreich, und ich wäre wirklich dankbar, wenn jemand die Lösung teilen würde.

Mit freundlichen Grüßen, Aliaksei

+0

Vielen Dank für Ihre Antwort. Lassen Sie es mich wissen, wenn Sie Informationen darüber finden, wie Sie dies ohne Wadl-Bearbeitung tun können. – user1765988

Verwandte Themen