2012-09-07 1 views
0

다음과 같이 나는 XSD에서 열거 있습니다JAXB 바인딩 파일 : 정수 ID로 열거

public enum Status { 
    ACTIVE(1), 
    INACTIVE(2); 

    private final int statusId; 

    Status(int statusId) { 
     this.statusId = statusId; 
    } 

    public int getId() { 
     return this.statusId 
    } 

    public static Status getStatusById(int id) { 
     // iterate through all status and return it 
    } 
} 
:이 스키마와 JAXB 바인딩 파일을 사용하여

<xsd:simpleType name="Status"> 
    <xsd:restriction base="xsd:string"> 
     <xsd:enumeration value="ACTIVE"/> 
     <xsd:enumeration value="INACTIVE"/>  
    </xsd:restriction> 
</xsd:simpleType> 

, 나는이 유사 열거를 생성 할

위의 Java enum을 얻기 위해 JAXB 바인딩 코드를 찾으려고합니다. 감사.

답변

0

웹에 대한 조사가 끝난 후 다음과 같은 결과를 얻을 수 있습니다. 질문 에서처럼 열거 형을 생성 할 수 있다고 생각하지 않습니다. 열거 형을 원하는대로 작성하고 xjc 플러그인에 생성 된 코드에서 열거 형을 사용하도록 지시합니다. binding.xml에서 요구 binding.xml

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

    <jaxb:bindings schemaLocation="Schema.xsd"> 
     <jaxb:bindings node="//xs:simpleType[@name='Status']"> 
      <jaxb:javaType name="com.yourcompany.project.enums.Status" 
       parseMethod="com.yourcompany.project.util.ProjectUtils.parseStatus" 
       printMethod="com.yourcompany.project.util.ProjectUtils.printStatus" /> 
     </jaxb:bindings>   
    </jaxb:bindings> 

</jaxb:bindings> 

다음 쓰기 인쇄 및 방법을 구문 분석 :

먼저 XSD 파일에 열거 수행 할 작업을 설명하는 바인딩 파일이 필요합니다 : ProjectUtils.java

public class ProjectUtils { 

    public static Status parseStatus(String statusStr) { 
     return Status.valueOf(statusStr.trim().toUpperCase());    
    } 

    public static String printStatus(Status status) { 
     return status.name(); 
    } 
} 

지금 당신은 당신의 xjc를 도구에서 binding.xml 파일을 참조해야합니다. 이 작업을 수행하는 방법은 여러 가지가 있지만 여기에서는 Maven 플러그인 cxf-xjc-plugin을 사용하고 XSD에서 소스 파일을 생성하는 데 사용할 수있는 프로필을 만들 수 있습니다.

<profiles> 
    <profile> 
     <id>xsdtojava</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.cxf</groupId> 
        <artifactId>cxf-xjc-plugin</artifactId> 
        <version>2.3.0</version> 
        <executions> 
         <execution> 
          <goals> 
           <goal>xsdtojava</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <sourceRoot>${basedir}/src/main/java</sourceRoot> 
         <xsdOptions> 
          <xsdOption> 
           <extension>true</extension> 
           <xsd>${basedir}/src/main/resources/schema/Schema.xsd</xsd> 
           <bindingFile>${basedir}/src/main/resources/schema/binding.xml</bindingFile> 
           <extensionArgs> 
            <arg>-Xdv</arg> 
            <arg>-Xts</arg> 
           </extensionArgs> 
           <packagename>com.yourcompany.project.generated</packagename> 
          </xsdOption> 
         </xsdOptions> 
         <extensions> 
          <extension>org.apache.cxf.xjcplugins:cxf-xjc-dv:2.3.0</extension> 
          <extension>org.apache.cxf.xjcplugins:cxf-xjc-ts:2.3.0</extension> 
         </extensions> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles>