Java:JAXB用char
-
13-09-2019 - |
質問
私はプロジェクトに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 詳細はます。