【问题标题】:Generate Serializable classes from a rest WADL with maven使用 maven 从 rest WADL 生成可序列化的类
【发布时间】:2017-10-12 18:21:46
【问题描述】:

我需要使用 maven 插件从其他 WADL 生成实现 Serializable 的类。我可以通过添加jaxb-bindings.xml 对 WSDL 项目执行此操作,但这不适用于 WADL 项目。

编辑: 现在生成文件时出现此错误

未能执行目标 org.apache.cxf:cxf-wadl2java-plugin:3.2.0:wadl2java (generate-sources) 在项目 my_project:java.lang.RuntimeException:编译错误 来自 WADL 的架构: “http://localhost:8080/rest_web/rest/application.wadl”不是一部分 本汇编的。这是一个错误吗 “http://localhost:8080/rest_web/rest/application.wadl/xsd2.xsd”? -> [帮助1]

  1. 我发现我的标签在 客户所以我修好了。
  2. 我为 -xjc-extension 添加了额外参数,因为链接到 oracle 来自此CXF issue 的文件
  3. 更新了我的 jaxb-bindings.xml

生成 WADL 的网络应用 pom.xml:

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

客户端 pom.xml 文件:

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

【问题讨论】:

    标签: java rest maven wadl


    【解决方案1】:

    原因是您在 &lt;grammars&gt; 块中有多个 XSD 模式(导入的 xsd 文件或明确定义的 &lt;xs:schema&gt; 标记)。您需要在 wadl 中的 &lt;grammars&gt; 块内有一个根 &lt;xs:schema&gt; 标记,以使 XJB 绑定与 wadl2java 一起使用。我现在正在寻找没有 wadl 编辑的解决方法,但仍未成功,如果有人分享解决方案,我将不胜感激。

    最好的问候,Aliaksei

    【讨论】:

    • 感谢您的回复。如果您找到有关如何在不进行 wadl 编辑的情况下执行此操作的任何信息,请告诉我。
    猜你喜欢
    • 1970-01-01
    • 2014-12-21
    • 2014-06-16
    • 1970-01-01
    • 2016-02-13
    • 1970-01-01
    • 1970-01-01
    • 2015-04-29
    • 1970-01-01
    相关资源
    最近更新 更多