2017-10-25 19 views
1

typesafeEnumBase이 XSD로 설정하면 linkJAXB 바인딩 - 설정 typesafeEnumBase가 비어 (문자열로 열거 변환)하는

에 따르면 : 문자열, 모든 단순 유형 정의가 도출 지정 에 글로벌 방법이 될 것입니다 직접적으로 또는 을 xsd : string에서 간접적으로 열거하고 열거 형 패싯을 사용하면 이 형식 보증 열거 형으로 바인딩되어야합니다. typesafeEnumBase가 빈 문자열 ""으로 설정된 경우 간단한 유형 정의는 기본적으로 typesafe enum 클래스에 바인딩되지 않습니다. typesafeEnumBase의 값은 원자 단위의 단순한 형식 정의 (xsd : boolean 및 이진수는 모두 유형 제외)이 될 수 있습니다.

<jxb:globalBindings typesafeEnumBase=""/> 

을 나는 다음과 같은 예외가 얻을 jaxb2-maven-plugin 실행할 때 : 지금까지 내가 내가 설정할 수 없습니다 이해

lineNumber: 5; columnNumber: 46; cvc-minLength-valid: Value '' with length = '0' is not facet-valid with respect to minLength '1' for type '#AnonType_typesafeEnumBaseglobalBindings'. 
... 
lineNumber: 5; columnNumber: 46; cvc-attribute.3: The value '' of attribute 'typesafeEnumBase' on element 'jxb:globalBindings' is not valid with respect to its type, 'null'. 

그래서 나는 다음 내 binding.xjb로 설정 빈 문자열 "" ~ typesafeEnumBase에도 불구하고 문서에 그렇게 나와 있습니다. 문서에는 또한 xsd:boolean 일 수 없다고 언급되어 있습니다.

내가 원하는 건은 관련 SO 질문 here하지만 String에 다음 대신 enum

<xs:simpleType name="phraseID"> 
    <xs:restriction base="escapedStringUserType"> 
     <xs:enumeration value="NOT_SPECIFIED"/> 
     <xs:enumeration value="X000-9999"/> 
     <xs:enumeration value="X000-9998"/> 
    </xs:restriction> 
</xs:simpleType> 

변환하는 것입니다 나는 빈 문자열 ""를 설정하거나 답변의 xsd:booleantypesafeEnumBase에 전혀 설정되지 수 없기 때문에 나를 위해 일한다 (양쪽 다 시험해 보았다).

+0

당신이 인용 한 문서가 잘못 표현되어 있고 빈 문자열에'typesafeEnumBase'를 설정하는 것이 가능하다고 실제로 말하지는 않습니다 - 마치 가상의 상황을 설명하는 것처럼 ("would"이라는 단어의 사용으로 판단 할 때) . [JAXB 명세] (https://jcp.org/en/jsr/detail?id=222)는 이것에 대해서는 아무 말도하지 않는다. 그래서 이것은 이것이 지원되는 것이 아니라는 것을 의미한다고 생각한다. – Jesper

+0

@Jesper, 답장을 보내 주셔서 감사합니다. 다른 솔루션으로 열거 형 대신 문자열을 생성 하시겠습니까? – pleft

+0

열거 제한이있는 특정 단순 유형에는''를 사용할 수 있지만 이러한 유형 모두에 대해 전역으로 설정하는 방법은 없습니다. – Jesper

답변

2

설정 다음

<jxb:globalBindings typesafeEnumMaxMembers="0"/> 

대신 문자열로 변환됩니다 열거 제한 모든 단순 유형에 대한 열거를 생성하지 않습니다, 그러나 그것은 다음과 같은 콘솔에 경고를 뱉어 :

Simple type "xxx-address" was not mapped to Enum due to EnumMemberSizeCap limit. Facets count: 10, current limit: 0. You can use customization attribute "typesafeEnumMaxMembers" to extend the limit. 
1
당신은 당신이이 예에서와 같이 자바 enum에 매핑하지 않으 열거 제한 특정 간단한 유형을 지정할 수 있습니다

:

<?xml version="1.0" encoding="UTF-8"?> 
<jaxb:bindings 
     xmlns:jaxb="http://java.sun.com/xml/ns/jaxb" 
     xmlns:xs="http://www.w3.org/2001/XMLSchema" version="1.0"> 
    <jaxb:bindings 
      schemaLocation="myschema.xsd" 
      node="/xs:schema/xs:simpleType[@name='phraseID']"> 
     <jaxb:typesafeEnumClass map="false"/> 
    </jaxb:bindings> 
</jaxb:bindings> 

그러나이 내가 아는 한,이 없음 (예를 들어 <jaxb:globalBindings> 안에 직접 <jaxb:typesafeEnumClass map="false"/>을 사용할 수 없다.) 열거 형 제한이있는 모든 단순 유형에 대해 전역으로 설정하는 방법.

(누군가가이를 수행하는 방법을 알고 있다면 나는 또한 알고 싶습니다. 의견이나 답을주십시오.)

+1

나는 당신의 솔루션을 시도했으나 효과가있다. 그러나 당신이 이미 전역 적으로 적용 할 수 없다고 말한 것처럼 열거 제한을 가진 각각의 간단한 타입을 선언해야한다. 나는''이 열거 제한을 가진 모든 단순한 타입에 적용되어 문자열로 변환된다는 것을 알았지 만 출력에'경고 '를 표시 할 것이다. 나는 당신의 대답을 upvote하지만'이 정확히 필요하기 때문에 다른 대답을 게시 할 것입니다. 도와 줘서 고마워. – pleft