2009-05-21 7 views
12

JAXB를 사용하여 XSD 파일에서 Java 클래스를 생성하는 데 "Maven"태스크가 있습니다.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> 

XSD 유형 "사용자"의 경우 "사용자"(duh)라는 클래스를 생성합니다. 그러나, 나는 또한 "User"라고 불리는 JPA 엔티티 클래스를 가지고있다. 위의 XML 구성을 변경하여 JAXB가 "XML"과 같은 생성 클래스를 접두사로 사용할 수있게 할 수 있습니까?

답변

19

이것은 일반적인 요구 사항입니다. 추가 JAXB 바인딩 파일을 제공하여 JAXB가 스키마 유형 이름을 Java 클래스 이름으로 변환하는 방법을 사용자 정의하여이를 수행 할 수 있습니다.

이러한 파일의 확장자는 ".xjb"입니다. 당신은 예를 들어, 스키마를 만들어야합니다 : 당신이 그 일을 한 후에

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

, 빌드 디렉토리에 어딘가에 xjb 파일을 삭제하고 번역하는 동안 그것의 사용하기 위해 메이븐 알려주기 :

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

여기에 대한 힌트가 있습니다. 공백이 포함 된 경로 (예 : "Documents and Settings \ user \ project")에있는 경우 JAXB는 이상한 오류로 넘어집니다.

+0

maven-jaxb2-plugin 구성에는 "includeBindings"및 "includeBinding"이 아닌 "bindingIncludes"및 "bindingInclude"태그가 필요합니다. – kevinmrohr