문제

JAXB를 사용하여 프로젝트를 진행 중인데 JAXB 및 char 데이터 유형에 작은 문제가 발생했습니다.

char gender = 'M';

마샬링 후 다음으로 변환됩니다.

<gender>77</gender>

그래서 나는 char이 정수에 매핑된다고 생각하는데, 나는 단순히 그것을 문자열에 매핑하고 싶습니다.어떻게 해야 하나요?심지어 가능합니까?

도움이 되었습니까?

해결책

일부 실험 후에는 원시 숯을 올바르게 처리하도록 JAXB를 구성 할 방법이없는 것으로 보입니다. 그래도 받아들이는 데 어려움을 겪고 있습니다.

나는 정의를 시도했다 XmlAdaptor 그것을 문자열로 강요하려고 시도하지만 런타임은 원시가 아닌 객체 유형에 주석이 달린 어댑터 만 허용하는 것 같습니다.

내가 생각할 수있는 유일한 해결 방법은 숯불을 @XmlTransient, 그런 다음 값을 문자열로 가져오고 설정하는 getters and setters를 작성합니다.

   @XmlTransient
   char gender = 'M';

   @XmlElement(name="gender")
   public void setGenderAsString(String gender) {
      this.gender = gender.charAt(0);
   }

   public String getGenderAsString() {
      return String.valueOf(gender);
   }

그다지 좋지는 않지만, 나는 당신에게 부여 할 것입니다. 그러나 실제로 당신의 숯불을 바꾸는 것은 부족합니다. 그게 내가 가진 전부입니다.

다른 팁

@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)

그것이 프리미티브와 함께 작동하도록 유형을 지정하는 트릭입니다.

어댑터에서

패키지 -info에서 동일하게 사용하면 해당 패키지에 대해 전 세계적으로 수행 할 수 있습니다.

실험 후 이것을 발견했습니다.

public class MyAdapter extends XmlAdapter<String, Integer> {

내가 가장 먼저 내 마음 속에 얻은 것 :)

String gender = "M";

이는 JDK 1.6.0_20과 함께 제공되는 Metro 버전 이상인 Metro JAXB(RI)에서 여전히 문제가 있는 것으로 보입니다.

EclipseLink JAXB(MOXy)는 char을 올바르게 마샬링합니다.

EclipseLink JAXB를 사용하려면 클래스 경로에 eclipselink.jar을 추가하고 다음 항목을 사용하여 모델 클래스에 jaxb.properties 파일을 추가하면 됩니다.

javax.xml.bind.context.factory=org.eclipse.persistence.jaxb.JAXBContextFactory

특수 Xmladapter를 만듭니다.

package br.com.maritima.util;

import javax.xml.bind.annotation.adapters.XmlAdapter;

public class CharAdapter extends XmlAdapter<String,Character>{

 @Override
 public String marshal(Character v) throws Exception {
  return new String(new char[]{v});
 }

 @Override
 public Character unmarshal(String v) throws Exception {
   if(v.length()>0)
   return v.charAt(0);
  else return ' ';
 }

}

그런 다음 Package-Info.java (다른 클래스 내부에서 잊어 버리지 않도록)로 전체 패키지에 등록하거나 특정 필드에 특별히 사용할 수 있습니다.

보다 http://blogs.oracle.com/corejavatechtips/entry/exchanging_data_with_xml_and더 많은 정보를 위해서.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top