JAXB 模式在处理具有 Jackson 属性的类时返回 1 作为错误代码



所以我试着弄清楚了一段时间。我有一个带有JAXB注释的Java类:

import javax.xml.bind.annotation.XmlRootElement;
@XmlRootElement
public class Book {
private String title;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

然后,我可以按如下方式运行schemagen

schemagen -d d:Temp Book.java

并生成 XML 架构:schema1.xsd 。返回码为 0(同时尝试了窗口 ( echo %ERRORLEVEL% ( 和 linux ( echo $? (。

现在我需要向此类添加一些杰克逊注释,因此我添加一个 JSON 属性:

import javax.xml.bind.annotation.XmlRootElement;
import com.fasterxml.jackson.annotation.JsonProperty;
@XmlRootElement
public class Book {
    @JsonProperty("title")
    private String title;
    public String getTitle() {
        return title;
    }
    public void setTitle(String title) {
        this.title = title;
    }
}

不幸的是,现在当我运行 schemagen 时,它似乎成功了(生成了模式文件(,但返回代码为 1(在 Linux 和 Windows 上(,这对我来说是有问题的,因为它会导致 gmake 失败。

可悲的是,schemagen不会输出任何错误消息。但我怀疑它找不到杰克逊罐子,所以我将杰克逊注释罐子(具有杰克逊核心和杰克逊数据绑定的依赖项(复制到公共 D:\Temp 位置并运行schemagen如下所示:

schemagen -cp d:Temp -d d:Temp Book.java

不幸的是,如果我像这样运行它,结果相同:

schemagen -cp d:Temp* -d d:Temp Book.java

我还将在控制台上输出单个null(JAXB 人员在这里非常强调冗长(并返回代码 -1。

如何使用杰克逊注释成功运行架构(返回代码 0(?有什么建议吗?

好的,在朋友的帮助下,我知道实际命令应该是什么样子:

schemagen -cp D:Tempjackson-annotations-2.5.4.jar -d D:Temp Book.java

事实证明,我们只需要指定杰克逊注释jar,而不是依赖jar。在这个简化的场景中也不明显,但是如果您在 Linux 上的类路径(-cp 参数(上传递多个源,则需要用冒号而不是分号分隔这些源。基本上,这就是让我踏上大雁追逐的问题。

最新更新