2011-03-01 3 views
29

JAXB를 사용하여 처리되는 두 개의 스키마가 있습니다. 첫 번째 스키마는 사전 처리되며이 정보는 에피소드 파일 (http://www.java.net/blog/2006/09/05/separate-compilation-jaxb-ri-21 다음)을 사용하여 사용됩니다. 두 번째 스키마가 첫 번째 스키마를 가져오고 jaxb를 사용하여 다시 처리됩니다. 이것은 모두 예상대로 작동합니다.요소 참조가있는 JAXB 다중 스키마

하지만 이제는 참조를 사용하여 두 번째 스키마에서 사용되는 첫 번째 스키마에 요소가 있습니다.

스키마 A :

<schema elementFormDefault="qualified" xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:test="http://www.example.org/Test/" 
targetNamespace="http://www.example.org/Test/"> 
<element name="type" type="test:MyType"></element> 

스키마 B : 처리 아무것도 동안

<schema elementFormDefault="qualified" 
xmlns="http://www.w3.org/2001/XMLSchema" 
xmlns:second="http://www.example.org/Second/" 
xmlns:test="http://www.example.org/Test/" 
targetNamespace="http://www.example.org/Second/"> 

<import namespace="http://www.example.org/Test/" /> 

<complexType name="SomeType"> 
    <sequence> 
     <element ref="test:type" minOccurs="1" maxOccurs="unbounded" /> 
    </sequence> 
</complexType> 

잘못이지만, 두 스키마에 대해 생성 된 코드와 동일한 방법 제공

public JAXBElement<EventType> createType(TypeType value) 

런타임시이 결과는 다음과 같은 오류가 발생합니다.

com.sun.xml.internal.bind.v2.runtime.IllegalAnnotationsException: 1 counts of 
    IllegalAnnotationExceptions 
The element name {http://www.example.org/Type/}type has more than one mapping. 

어떻게 JAXB가 중복 createType 메소드를 만들지 못하게 할 수 있습니까?

미리 감사드립니다.

업데이트 : 나는 JAXB 메일 링리스트에서 이와 동일한 질문을 던졌고, 그 목록에 나는 또한 실제 예제를 게시했다. 스레드와 예제는 다음에서 찾을 수 있습니다. http://java.net/projects/jaxb/lists/users/archive/2011-03/message/18

이 목록에서 해결 방법을 제안했지만 지금은 내가 좋아하는 방식으로 스키마를 사용할 수 있습니다. 그러나 JAXB는 이미 에피소드 파일에 있어야하기 때문에 추가 "작성"메소드를 작성하지 않아야한다고 생각합니다.

+1

무엇 xjc에 대한 귀하의 주장입니까? – justkt

+0

두 번째 스키마의 경우 ant에서 XJC를 사용하고 에피소드 파일은 jar 파일에 있으며 인수로 제공됩니다. 또한 첫 번째 스키마에 매핑 할 수있는 카탈로그가 있습니다. 이것은 에피소드 파일로 항아리를 사용하지 않으면 두 번째 스키마가 모든 유형을 생성하는 데 사용됩니다. 예제에서는 createType (TypeType ..) 메서드 만 복제됩니다. – Alexander

+1

전체 스키마를 제시하십시오. 어떤 정의가 "test : MyType"입니까? –

답변

1

저는 하루에 몇 가지 스키마 정의를 작성했습니다. 두 번째 스키마 선언에서 첫 번째 xsd를 선언하고 가져 오는 중입니다.

MSDN에 따라 XSD를 가져올 때 스키마 선언에 포함시키지 마십시오. 스키마 선언의 위치입니다.

의 xmlns : 테스트 = "http://www.example.org/Test/"

이를 제거하고 단지 할 가져 오기 (<xs:import namespace="http://www.example.com/IPO" />)

참조 : http://msdn.microsoft.com/en-us/library/ms256480.aspx

+0

Linux/Java-Land 및 xmllint 명령 줄 유틸리티와 JAXB xjc 컴파일러 Ant 태스크가 같은 메시지로 다소 불평했다. 가져 오기 및 접두사 선언이 모두 필요한 것처럼 보입니다. MSDN이 다르게 동작한다는 것은 약간 짜증납니다. –

관련 문제