2015-01-20 1 views
0

에 같은 공간에 여러 파일을 바인딩 :는 JAXB는이 같은 스키마 계층 구조를 가지고있어 동일한 패키지

common 
    |---legacy 
    |  |---legacy.xsd xmlns="http://common/legacy" 
    |  |---other.xsd xmlns="http://common/legacy" 
    |  '---....xsd xmlns="http://common/legacy" 
    |---send 
      |---file.xsd xmlns="http://common/send" 
      '---text.xsd xmlns="http://common/send" 
      '---....xsd xmlns="http://common/send" 

하나 개의 폴더의 모든 파일이 동일한 네임 스페이스를 가지고있다.

이제 네임 스페이스를 특정 자바 패키지에 매핑하려고합니다 (네임 스페이스를 변경할 수 없음).

스키마를 패키지에 바인딩하는 솔루션을 찾았습니다.

<jaxb:bindings schemaLocation="./common/legacy/legacy.xsd"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="com.company/legacy"/> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 
<jaxb:bindings schemaLocation="./common/legacy/other.xsd"> 
    <jaxb:schemaBindings> 
     <jaxb:package name="com.company/legacy"/> 
    </jaxb:schemaBindings> 
</jaxb:bindings> 
..... 

직접 네임 스페이스와 패키지 이름 사이의 바인딩을 정의하는 방법이 있나요 :하지만 나는 XSD 파일 당 하나 개의 항목을 작성해야?

<plugin> 
<groupId>org.jvnet.jaxb2.maven2</groupId> 
<artifactId>maven-jaxb2-plugin</artifactId> 
<configuration> 
    <generatePackage>com.company/legacy</generatePackage> 
</configuration> 
</plugin> 

하지만 난 정말 내가 원하는 것이 아니다 폴더 당 하나 개의 실행을 만들어야 할 것입니다 :

다른 방법은 받는다는에서 패키지를 정의하는 것입니다.

+0

시도해 볼 수 있습니까? /common/legacy/*.xsd –

답변

1

면책 조항 : 나는 maven-jaxb2-plugin의 저자입니다.

XJC는 네임 스페이스에서 패키지를 파생하므로 일반적으로 한 네임 스페이스에 대해 여러 패키지를 생성 할 수 없습니다. jaxb:class/@ref으로 몇 가지 트릭이 있지만, 모든 종류의 충돌로 이어질 수 있으므로이를 원하지 않습니다.

제 제안은 동일한 네임 스페이스에서 고유 한 스키마 당 하나씩 여러 실행을 정의하는 것입니다. 일반적으로 바인딩에 패키지 매핑을 정의하는 것이 좋지만, 대신 generatePackage을 사용할 수 있습니다.

여러 번 실행하는 경우 실행마다 고유 한 generateDirectory을 사용해야합니다.

그런데 왜 여러 바인딩이 마음에 들지 않습니까?

+1

파일 당 하나의 바인딩을 원하지 않는다는 문제가 있습니다. 이는 10 개 이상의 파일에 대해 많은 쓸모없는 복사본 붙여 넣기입니다. 또한 새 파일이 폴더에 추가되었지만 바인딩에서 처리되지 않을 때 가능한 오류 원본을 생성합니다. – Seega

+0

@Seega Legacy는 당신을 괴롭히게합니다. 미안합니다. 다중 실행과 실행 당 하나의 바인딩은 개인적으로 수행 할 작업입니다. – lexicore

+0

알겠습니다. 바인딩에 무엇을 써야할까요? – Seega

관련 문제