나는 XML 스키마가 :JAXB minOccurs = 0. 요소가 존재 하는가?
<xsd:element name="Person">
<xsd:complexType>
<xsd:sequence>
<xsd:element name="name" type="xsd:string" />
<xsd:element name="lat" type="xsd:double" minOccurs="0"/>
<xsd:element name="lon" type="xsd:double" minOccurs="0"/>
</xsd:sequence>
</xsd:complexType>
</xsd:element>
을 그리고 XML 메시지가 :
<Person>
<name>Fred</name>
</Person>
내가 JAXB가 (즉 Person.java 등) 내 수업을 자동으로 생성하는 데 사용합니다.
따라서 런타임시 JAXB를 사용하여 위 XML 메시지를 비 정렬 화하고 Person 객체 인스턴스를 가져옵니다. p.getLat()
또는 p.getLon()
을 수행 할 때 원본 XML에 <lat>
또는 <lon>
요소가 포함되지 않은 경우에도 반환 값은 0.0입니다.
이 점을 악화시키는 이유는 0.0, 0.0이 유효한 위도와 경도라는 것입니다. 사람이 거기에 위치하는 것은 드문 일이지만, 그 점 옆에 있습니다!
IBM 사이트의 article은 메타 데이터로 추가 XML 요소를 사용하여 선택적 요소의 존재 여부를 명시하는 것이 좋습니다. 즉
<xsd:element name="hasLat" type="xsd:boolean"/>
<xsd:element name="hasLon" type="xsd:boolean"/>
그래서 위의 XML 메시지가 될 것입니다 :
<Person>
<name>Fred</name>
<hasLat>false</hasLat>
<hasLon>false</hasLon>
</Person>
이 못생긴 해킹처럼 보인다. 내 getLat()
, getLon()
의 반환 값을 신뢰할 수 있도록 요소가 존재하는지 확인하려면 JAXB와 적절한 방법이 있어야합니까?
Java 6의 JAXB 또는 1.5와 작동하는 별도의 lib를 사용하고 있습니까? 그 과정에서 JAXB가 클래스를 생성하는 방법이 변경되었습니다. 특히 어레이의 경우. 최신 버전을 사용해보십시오. –
(패키지가 ws-jaxme-0.5.1-3.4.fc11.noarch 인 Fedora에서) JAXME을 사용하고 Java 6 (java-1.6.0-openjdk-1.6.0.0-30.b16.fc11.i586) . –
이것은 JAXME 2.0의 JAXME 구현과 관련하여 특별히 문제가있는 것으로 보입니다. Sun의 구현으로 전환하면 요소가 XML 메시지에 포함되지 않은 경우 getter는 null 값을 반환합니다. –