2013-02-26 2 views
1

이름, 전화 번호, 주소가있는 JAXB 생성 PersonType 클래스가 있습니다. XSD에서는 "phone"minoccurs = "1"을 정의합니다. 속성 "전화"가 XSD에 필요하거나없는 경우 프로그래밍 방식으로 (예 : 반사 등을 통해) Java 코드에서 어떻게 테스트 할 수 있습니까?JAXB 생성 필드가 필요한지 테스트합니다.

나중에 편집 : JAXB 생성기는 "필수"속성 등이없는 클래스를 만듭니다. 따라서 클래스에 주석이 없거나 필드가 필수인지 아닌지를 나타내는 필드가 있습니다. 그러나 XSD와 동일한 요소를 지정하는 필드에는 @XmlElement 주석이 있습니다. 그래서 유일한 해결책은이 주석을 검사 한 다음 XSD에 대해 XPath 또는 무언가를 만드는 것입니다.

감사합니다.

+0

클래스에'@XmlElement (required = true)'가 포함되어 있는지 테스트하려고하거나 클래스 인스턴스에 require 'name' 요소가 있는지 테스트하고 싶습니까? –

+0

http://www.mkyong.com/java/jaxb-hello-world-example/# –

+0

@BlaiseDoughan 해당 필드가 XSD 측에 필요한지 여부를 테스트하는 방법이 필요합니다. Java 생성 클래스에서는 그 사실을 알 수 없습니다. 고맙습니다! –

답변

1

@XmlElement 주석에는 XML 요소가 필요함을 나타내는 데 사용되는 required 속성 (기본값 : false)이 있습니다 (minOccurs> 0). java.lang.reflect API를 사용하여이 값을 클래스에서 가져올 수 있습니다. foo 요소 아래의 XML 스키마에서

XML 스키마

이 필요하며 bar 요소는 아니다. 다음은

클래스 생성

<?xml version="1.0" encoding="UTF-8"?> 
<schema 
    xmlns="http://www.w3.org/2001/XMLSchema" 
    targetNamespace="http://www.example.org/schema" 
    xmlns:tns="http://www.example.org/schema" 
    elementFormDefault="qualified"> 

    <complexType name="root"> 
     <sequence> 
      <element name="foo" type="string"/> 
      <element name="bar" type="string" minOccurs="0"/> 
     </sequence> 
    </complexType> 

</schema> 

는 XML 스키마에서 생성 된 클래스입니다. foo 필드에는 @XmlElement(required=true)bar 필드가 주석으로 표시되어 있습니다.

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "root", propOrder = { 
    "foo", 
    "bar" 
}) 
public class Root { 

    @XmlElement(required = true) 
    protected String foo; 

    protected String bar; 

} 
+0

고마워요! 좋은 해결책이지만,이 필드가 기본 유형의 제한 사항의 일부인 경우 JAXB는 "확장"유형에 대한 메타 데이터를 생성하지 않습니다. 필드는 기본 유형 (Java 코드)에서만 정의됩니다. –

+0

@leadgy - 리플렉션을 사용하여 계승 된 필드/속성도 검사 할 수 있습니다. 클래스 수퍼 클래스를 직접 가져 와서 직접 검사 할 수도 있습니다. –

+0

부모 유형에서 제한하는 경우 하위 유형에 설정된 제한 사항이 생성 된 Java 코드에 나타나지 않는 것입니다. 따라서 나는 그것이 어떻게 가능한지를 확신 할 수 없다. 감사! –

관련 문제