JAXB 프로젝트에서 작업하고 있지만 JAXB 및 char 데이터 형식에 약간의 문제가 있습니다.Java : JAXB 및 char 사용
char gender = 'M';
는에 정렬 화 후 변환 :
<gender>77</gender>
그래서 내가 문자를 정수로 매핑하고 있다고 생각하지만, 나는 단순히 문자열로 매핑 할. 어떻게해야합니까? 심지어 가능할까요? 내가 내 마음에있어
JAXB 프로젝트에서 작업하고 있지만 JAXB 및 char 데이터 형식에 약간의 문제가 있습니다.Java : JAXB 및 char 사용
char gender = 'M';
는에 정렬 화 후 변환 :
<gender>77</gender>
그래서 내가 문자를 정수로 매핑하고 있다고 생각하지만, 나는 단순히 문자열로 매핑 할. 어떻게해야합니까? 심지어 가능할까요? 내가 내 마음에있어
는 제대로 원시 문자를 처리하기 위해 JAXB를 구성 할 수있는 방법은없는 것처럼 보인다. 나는 그것을 받아들이는데 어려움을 겪고있다.
XmlAdaptor
을 문자열로 강제 변환하려고 시도했지만 런타임은 프리미티브가 아닌 객체 유형에 주석이 달린 어댑터 만 허용하는 것으로 보입니다.
@XmlTransient
char gender = 'M';
@XmlElement(name="gender")
public void setGenderAsString(String gender) {
this.gender = gender.charAt(0);
}
public String getGenderAsString() {
return String.valueOf(gender);
}
아주 좋은 아니, 나는거야 : 내가 생각할 수있는
유일한 해결 방법은 @XmlTransient
으로 문자 필드를 표시 한 다음 얻을 getter 및 setter를 작성하고 문자열로 값을 설정하는 것입니다 당신에게 줄 수는 있지만 실제로 char 필드를 String으로 변경하는 것보다는 부족합니다.
이 문제는 특히 JAXB의 Metro 구현과 관련되어 있으며 JAXB (EclipseLink MOXy)의 다른 구현은이 사용 사례를 올바르게 처리합니다. –
우선 :) 일부 실험 후
String gender = "M";
이것은 여전히 Metro JAXB (RI), JDK 1.6.0_20과 함께 제공되는 Metro 버전 이상에서 여전히 문제가있는 것으로 보입니다.
는 EclipseLink JAXB는 (목시) 보안관이 올바르게 문자 :
은 EclipseLink가 JAXB 단순히 클래스 경로에 eclipselink.jar를 추가 사용하고 jaxb.properties는 모델 클래스에 파일을 추가하려면 다음 항목이 있습니다.
javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory
특수 XmlAdapter를 만듭니다.
그러면 package-info.java를 사용하여 전체 패키지에 등록 할 수 있습니다 (다른 클래스 내에서 정보를 잊어 버리지 않도록). 또는 특정 필드에만 사용하십시오.
http://blogs.oracle.com/CoreJavaTechTips/entry/exchanging_data_with_xml_and 자세한 내용은 참조하십시오. 트릭 그게
내가 궁금한데, 왜'v.toString()'대신에'new String (new char [] {v})'을해야할까요? –
@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
이 어댑터에서 프리미티브
와 함께 작동하도록 유형을 지정 패키지 정보에 동일하게 사용당신이 발견 패키지
을 위해 전 세계적으로 그것을 의미합니다 이것은 실험 후입니다.
public class MyAdapter extends XmlAdapter<String, Integer> {
성별을 char로 저장하지 말고 대신'enum'을 사용하십시오. –
@Joachim Sauer : 열거 형은 성을 저장하는 더 나은 옵션이 될 것이라고 말하면서도 적합합니다. 하지만 JAXB의 가능성을 모색하고 있습니다. 그리고 나는 고집스럽게 생각했기 때문에 char : -p를 사용하는 해결책이 있어야한다고 생각했습니다. – Korenaga
이것은 JAXB (Metro)의 특정 구현에서 JAXB (EclipseLink MOXy) 마샬링 문자의 다른 버그가 올바르게 발생했습니다. –