2012-02-20 4 views
3

JAXB를 사용하여 XML 스키마에서 Java 파일을 생성하려고합니다. 스키마의 데이터 유형 중 하나는 약 300 개의 가능한 값이있는 문자열입니다. 이 값은 256보다 크므로 xjc는 기본적으로이 유형에 대한 열거 형을 생성하지 않고 대신 문자열을 사용합니다. 내가 열거를 생성 갖고 싶어하기 때문에, 나는 다음과 같은 내용이있는 bindings.xml을 만듭니다JAXB : bindings.xml의 globalBindings가 무시됩니다.

 
<bindings version="2.0" xmlns="http://java.sun.com/xml/ns/jaxb"> 
    <globalBindings typesafeEnumMaxMembers="1000" /> 
</bindings>

이 알 수없는 이유로 작동하지 않습니다. xjc는 어떤 단서도주지 않습니다. 처음에는 파일을 포함시키지 않았다고 생각 했으므로 확인했습니다. 또한 의도적으로 globalBindings과 같은 요소 이름을 globalBinding으로 잘못 입력하려고 시도했는데 xjc가 잘못된 요소에 대해 불만을 나타 냈습니다. 이는 분명히 xjc가 바인딩 파일을 읽음을 의미합니다.

그러나 globalbindings를 xsd에 넣으면 완벽하게 작동합니다. 열거 형이 생성됩니다.

 
<xs:schema ....> 
    <xs:annotation> 
    <xs:appinfo> 
     <jaxb:globalBindings typesafeEnumMaxMembers="1000" /> 
    </xs:appinfo> 
    </xs:annotation> 
... 
... 
</xs:schema > 

그래서 제 질문은 옵션 (xjc를 읽습니다) 컴파일을 사용자 지정하는 데 사용되지 않는 bingings.xml에 설정 와서 어떻게? 나는 여기서 무엇을 놓칠까요?

도움을 주셔서 대단히 감사드립니다.

답변

0

는 하나

+0

몇 가지 참조 및/또는 예제를 추가하면 대답이 크게 향상 될 수 있습니다. – mathielo

0

난 당신이 같은 태그 전에 JAXB 주석을 추가해야한다고 생각 xjb 파일이 아닙니다 및 XML을 사용할 필요가 : 나는 깨달았다

<jaxb:bindings 
     xmlns:jaxb="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" 
     jaxb:extensionBindingPrefixes="xjc" 
     jaxb:version="1.0"> 
     <jaxb:globalBindings typesafeEnumMaxMembers="2000"> 
     </jaxb:globalBindings> 
    </jaxb:bindings> 
+0

음, 왜? "xmlns = ..."및 "xmlns : jaxb = ..."를 사용하는 것의 차이점은 전역 바인딩을 실제로 전역 화하는 측면에서 무엇입니까? – NestorDRod

3

을 그 현재 디렉토리의 길이 xjc가 Y 인딩 구성을 + 시하 게합니다. 다음 명령을 실행

실패하거나 성공은 프로젝트의 기본 디렉토리에 따라 (바인딩 관련) :

: 그래서 짧은 프로젝트의 디렉토리수록 것 가능성이 성공

xjc -extension src/main/resources/schema/schema.xsd -b src/main/resources/schema/bindings.xjb -d target/tmp 

FAILS: C:/anydir/tstaaaaaaaaaaaaaaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaaaaaaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaaa/asubdirectory/_this_is_any_project_directory_ 
FAILS: C:/anydir/tstaa/asubdirectory/_this_is_any_project_directory_ 
WORKS: C:/anydir/tsta/asubdirectory/_this_is_any_project_directory_ 
WORKS: C:/anydir/tst/asubdirectory/_this_is_any_project_directory_ 

비슷한 환경 (Windows, 동일한 JDK, 동일한 프로젝트 소스)을 사용하는 저의 동료들은 엄격한 길이 제한이 없습니다. 그래서 나는 그 제한을 야기하는 어떤 단서가 없습니다. 그러나 루트 디렉토리에 가까운 프로젝트 소스를 배치 한 후에는 저에게 도움이되었습니다.

+0

나를 위해 동일! 문제 해결을 위해 하루 이상을 보냈습니다! 대답으로 받아 들여야한다. – Dennis

0

Achim Tromm의 응답을 확인하면 현재 기본 디렉토리의 길이로 인해 xjc가 바인딩 구성을 무시하게됩니다. 폴더 경로를 줄이면 성공적으로 빌드됩니다. 이것은 JAXB 버그입니까?