Pergunta

Eu tenho essa "tarefa" Maven para gerar classes Java a partir de um arquivo XSD usando JAXB.

        <!-- XML to Java classes -->
        <plugin>
            <groupId>com.sun.tools.xjc.maven2</groupId>
            <artifactId>maven-jaxb-plugin</artifactId>
            <executions>
                <execution>
                    <phase>generate-sources</phase>
                    <goals>
                        <goal>generate</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <generatePackage>nl.compay.service</generatePackage>
                <schemaDirectory>src/main/webapp/compay</schemaDirectory>
            </configuration>
        </plugin>

Para um tipo XSD "Usuário", ele gera uma classe chamada "User" (duh). No entanto, eu também tenho uma classe de entidade JPA chamado "Usuário" (embora em um pacote diferente). Posso alterar a configuração XML acima para deixar JAXB prefixar as classes geradas com algo como "XML"?

Foi útil?

Solução

Este é um requisito comum. Você pode fazer isso, fornecendo um JAXB adicional arquivo de ligação para personalizar como JAXB traduz os nomes de tipo de esquema para nomes de classes Java.

Estes arquivos normalmente terminam em extensão ".xjb". Você precisa criar um para o seu esquema, por exemplo:

<jxb:bindings version="1.0" 
  xmlns:jxb="http://java.sun.com/xml/ns/jaxb" 
  xmlns:xs="http://www.w3.org/2001/XMLSchema" 
  xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc" 
  jxb:extensionBindingPrefixes="xjc">

    <jxb:bindings schemaLocation="nl.company.service.xsd" node="/xs:schema">
        <jxb:schemaBindings>
            <jxb:nameXmlTransform>
                <jxb:typeName prefix="XML"/>
                <jxb:anonymousTypeName prefix="XML"/>
            </jxb:nameXmlTransform>
        </jxb:schemaBindings>
    </jxb:bindings>

</jxb:bindings>

Depois de ter feito isso, soltar a algum lugar ficheiro xjb em seu diretório de construção e dizer Maven para fazer uso dele durante a tradução:

<includeBindings>
    <includeBinding>mybindings.xjb</includeBinding>
</includeBindings>

E aqui vai uma dica para a estrada:. Se você está em um caminho que contém espaços ( "Documents and Settings \ usuário \ project" por exemplo), então JAXB vai cair com erros estranhos

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top