2010-04-26 5 views
0

xml 스키마 분석기에서 작업 중이며 XMLSchema.xsd와 함께 JAXB를 사용하고 있습니다. 모든 최상위 요소에 대한 클래스를 얻지 못하기 때문에 JAXB에 문제가 있습니다. 예를 들어XMLschema.xsd의 누락 JAXB 클래스

<xs:element name="maxLength" id="maxLength" type="xs:numFacet"> 

나는 MaxLength 클래스 나 그와 같은 것을 얻지 못한다. NumFacet 만 존재합니다.

그 밖의 경험이 있거나 도움이 될만한 사람이 있습니까?

건배, XLR

답변

0

지금까지 내가 JAXB, 주어진 스키마의 각 복합 형식의 클래스를 생성하는 xjc 스키마 컴파일러를 기억한다. 당신이 당신의 스키마에 복합 유형 선언을 추가해야 최대 길이 클래스를 갖고 싶은 경우에 따라서 :

<xs:complexType name="MaxLength">
<xs:attribute name="value" type="xs:int"/>
</xs:complexType>
<xs:element name="MyMaxLength" type="MaxLength"/>

이제 멤버 변수와 정수 유형의 을 클래스 최대 길이을 얻어야한다.

+0

진심으로? XMLSchema.xsd를 사용하고 있는데 조작하고 싶지 않습니다. 또한 이미 보았 듯이 형식이있는 요소가 있습니다.) – XLR

+0

물론입니다. 당신의 예제는 말하지 않습니다 : 이봐, maxLength라고 부르는 numFacet 타입의 인스턴스가있다. 자바에서는 NumFacet maxLength = new NumFacet(); 다른 클래스가 필요 없습니다. 어쨌든 클래스 MaxLength는 어떻게 생겼을까요? – user306708

0

JAXB는 이미 유형이있는 항목에 대한 클래스를 생성하지 않으며 어느 것도 필요하지 않습니다.

maxLength 요소와 같은 전역 요소를 비 정렬 화하면 JAXB는 NumFacet 유형을 래핑하는 JAXBElement를 반환합니다. 이런 식으로 뭔가 :

요소 이름이 무엇인지 알아내는 JAXBElement 첨부의 다른 방법이 있습니다
JAXBElement<?> root = unmarshaller.unmarshal(myStream); 
NumFacet value = (NumFacet) root.getValue();