質問

私はプロジェクトにJAXBっ走る小さな問題のJAXB、charデータ型.

char gender = 'M';

変換後の整列化に:

<gender>77</gender>

したがってこのcharをマップする、整数値がIのお知らせいただければ地図で文字列になります。する方法を教えてください。でも可能ですか?

役に立ちましたか?

解決

いくつかの実験をした後、適切に原始文字を処理するためにJAXBを設定する方法はないようです。でも、私はそれを受け入れて苦労しています。

私は試してみて、文字列にそれを強制するXmlAdaptorを定義しようとしましたが、実行時にのみオブジェクトタイプではなく、プリミティブに注釈付きのアダプタを受け入れているようだ。

私は考えることができる唯一の回避策は@XmlTransientとchar型のフィールドをマークし、その後取得し、文字列として値を設定ゲッターとセッターを書くことです。

   @XmlTransient
   char gender = 'M';

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

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

非常に素晴らしい、それは私が持っているすべてです、私はあなたを与えるだろうが、実際にあなたのchar型のフィールドを変更する短い文字列を戸部わけではありません。

他のヒント

@XmlJavaTypeAdapter(value=MyAdapter.class, type=int.class)
トリック厥それはプリミティブで動作させるために型を指定する

あなたのアダプタで

あなたはそのパッケージに対してグローバルにそれを行うパッケージ情報で同じを使用すると意味します。

試した後、これを見つけます。

public class MyAdapter extends XmlAdapter<String, Integer> {

私は私の心に入った最初のもの:)

String gender = "M";

この続き問題のあるメトロJAXB(RI)の転のバージョンのメトロの出荷はJDK1.6.0_20.

EclipseLink JAXB(MOXy)marshals char正:

利用EclipseLink JAXB簡単に追加eclipselink.jar をclasspathに追加は、jaxb.プロパティファイルでモデルクラスを以下の入場:

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 詳細はます。

scroll top