2013-04-04 4 views
1

XSD를 변환하려고합니다. JAXB를 사용하여 Java 클래스로 제어 할 수 없습니다. 내가 갖는 오류는 다음과 같습니다 오류를 포함하는 XSD에서JAXB를 사용하여 XSD를 Java로 변환하는 데 문제가 있습니다.

[ERROR] cvc-pattern-valid: Value 'true' is not facet-valid with respect to pattern '0|1' for type 'BooleanType'. 
    line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd 

[ERROR] a-props-correct.2: Invalid value constraint value '1' in attribute 'mxencrypted'. 
    line 139 of http://neon/meaweb/schema/common/meta/MXMeta.xsd 

코드에 있습니다

<xsd:complexType name="MXCryptoType"> 
    <xsd:simpleContent> 
     <xsd:extension base="xsd:base64Binary"> 
     <xsd:attribute name="changed" type="ChangeIndicatorType" use="optional" /> 
     <xsd:attribute name="mxencrypted" type="BooleanType" use="optional" default="1" /> 
     </xsd:extension> 
    </xsd:simpleContent> 

구체적으로는 속성이 BooleanType를 사용하여 mxencrypted입니다. 부울 유형은

으로 정의됩니다.
<xsd:simpleType name="BooleanType"> 
    <xsd:restriction base="xsd:boolean"> 
     <xsd:pattern value="0|1" /> 
    </xsd:restriction> 
    </xsd:simpleType> 

이 검색은 다소 일반적인 경우 인 것 같습니다. mxencrypted 행의 기본값이 1이 아니어야한다고 말할 수 있습니까? Liquid XML에 XSD를로드하면 스키마에서 오류를보고하지 않습니다. XSD 유효성 확인 (http://www.utilities-online.info/xsdvalidation/#.UV3zkL_EW0s)은 JAXB와 동일한 오류를보고합니다.

이 문제를 무시하고 기본값을 무시하는 클래스를 생성하도록 JAXB에 지시 할 수있는 방법이 있습니까?

답변

0

귀하의 질문은 this one와 유사합니다 (그리고 방금 관련 정보로 업데이트했습니다). 이 오류는 XSD 스키마 프로세서 (JAXB의 xjc가 실제로 작업을하기 전에)에서 발생하기 때문에이를 무시하도록 JAXB에 알리는 방법을 알지 못합니다.

유일한 방법은 기본 속성을 필터링하는 것일 수 있습니다. 그러나이 경우 XSD 디자이너가 생성 된 코드의 경우에는 해당하지 않는 기본값 인 true가 기본값으로 사용됩니다 (Java 기본값은 false).

이렇게하면 원치 않는 과실이 생길 수 있습니다. XSD 제공 업체와 협력하여 문제를 해결하는 것이 좋습니다. 않는 것보다는 다르게 행동 할 것 XSD에 의존되지 않은 XML 프로세서 :

아마 사이드 바는,하지만 난 개인적으로 상호 운용성 괴물 같은 XSD를에서 기본값의 사용을 고려한다.

관련 문제