基于XSD文件的JAXB java代码生成

时间:2014-06-25 19:24:40

标签: java xml jaxb

我在基于XSD文件生成java源代码时遇到问题。

请注意,XSD文件是基于XML示例生成的。

XML示例

<resposta_importacao>
  <RetornoEnvio xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <num_apolice xmlns="compuletra">202476600001</num_apolice>
    <cod_retorno xmlns="compuletra">651</cod_retorno>
    <mensagem xmlns="compuletra">Erro de layout de dadosobrigat&#195;&#179;rios: cod_cobertura</mensagem>
    <id_validacao xmlns="compuletra">0</id_validacao>
  </RetornoEnvio>
  <RetornoEnvio xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
    <num_apolice xmlns="compuletra">202476600002</num_apolice>
    <cod_retorno xmlns="compuletra">651</cod_retorno>
    <mensagem xmlns="compuletra">Erro de layout de dados obrigat&#195;&#179;rios: cod_cobertura</mensagem>
    <id_validacao xmlns="compuletra">0</id_validacao>
  </RetornoEnvio>
</resposta_importacao>

生成XSD

<xsd:schema attributeFormDefault="unqualified" elementFormDefault="qualified" xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <xsd:complexType name="RetornoEnvio">
        <xsd:sequence>
            <xsd:element name="num_apolice" type="xsd:integer" xmlns="compuletra" />
            <xsd:element name="cod_retorno" type="xsd:int" xmlns="compuletra" />
            <xsd:element name="mensagem" type="xsd:string" xmlns="compuletra" />
            <xsd:element name="id_validacao" type="xsd:int" xmlns="compuletra" />
        </xsd:sequence>
    </xsd:complexType>

    <xsd:element name="resposta_importacao">
        <xsd:complexType>
            <xsd:sequence>
                <xsd:element maxOccurs="unbounded" type="RetornoEnvio" name="RetornoEnvio" />
            </xsd:sequence>
        </xsd:complexType>
    </xsd:element>
</xsd:schema>

生成的Java类

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "RetornoEnvio", propOrder = {
    "numApolice",
    "codRetorno",
    "mensagem",
    "idValidacao"
})
public class RetornoEnvio {

    @XmlElement(name = "num_apolice", required = true)
    protected BigInteger numApolice;
    @XmlElement(name = "cod_retorno")
    protected int codRetorno;
    @XmlElement(required = true)
    protected String mensagem;
    @XmlElement(name = "id_validacao")
    protected int idValidacao;

这里的问题是XML有

  

的xmlns = “compuletra”

但java类没有。

我知道我可以将 命名空间 属性插入到 XmlElement 注释中但是如果它更好代码生成可以为我插入。

谢谢

2 个答案:

答案 0 :(得分:0)

XML Schema中元素定义中的xmlns属性与元素的名称空间限定无关。这就是JAXB不做任何事情的原因。

<xsd:element name="cod_retorno" type="xsd:int" xmlns="compuletra" />

答案 1 :(得分:0)

好吧,只是为了回答我自己的问题,以便它不会得不到答案。

在考虑了一点之后,我可以用最明显的解决方案来实现这种命名空间差异。基本上使用两个具有两个不同命名空间的XSD文件,并将它们导入第三个XSD文件。

这一切都按预期工作。

谢谢,

蒂亚戈