27

早速質問です。「true」と「false」を出力する代わりに、JAXB(マーシャル)にブールフィールドを1と0としてレンダリングさせる方法を知っている人はいますか?

4

5 に答える 5

7

user20298 と同じ問題を抱えていたので、mtpettyp のヒントに従って、自分の構成に合わせました。

私の構成は次のとおりです。 - プロジェクトをビルドするmaven。- Maven の「org.jvnet.jaxb2.maven2」プラグイン。- jaxb 2.2.6 - この機会に、kml 2.2 (ogckml22.xsd) の Java クラスを作成しました。

そして、Googleマップがブール値を「1/0」にしたいときに、ブール値が「true/false」としてレンダリングされるという問題に遭遇しました

これは、maven のプラグイン構成です。

<plugin>
<groupId>org.jvnet.jaxb2.maven2</groupId>
<artifactId>maven-jaxb2-plugin</artifactId>
<executions>
    <execution>
        <phase>generate-sources</phase>
        <goals>
            <goal>generate</goal>
        </goals>
    </execution>
</executions>
<configuration>
    <generateDirectory>src/main/generated</generateDirectory>
    <extension>true</extension>
    <removeOldOutput>true</removeOldOutput>
</configuration>

src/main/resources フォルダーに、次の内容の jaxb-bindings.xjb ファイルを追加しました。

    <?xml version="1.0" ?>
<bindings xmlns="http://java.sun.com/xml/ns/jaxb" 
          version="2.1" 
          xmlns:kml="http://www.opengis.net/kml/2.2"
          xmlns:xjc="http://java.sun.com/xml/ns/jaxb/xjc"
          xmlns:xsd="http://www.w3.org/2001/XMLSchema">
    <globalBindings>
        <xjc:simple/>
        <xjc:javaType name="java.lang.Boolean" 
                      xmlType="xsd:boolean" 
                      adapter="path.to.my.JaxbBooleanAdapter"/>
    </globalBindings>
    ...
    ...
</bindings>

アダプタ クラスは次のようになります。

package path.to.my;

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

/**
 * Utility class to correctly render the xml types used in JAXB.
 */
public class JaxbBooleanAdapter extends XmlAdapter<String, Boolean>
{
    @Override
    public Boolean unmarshal(String v) throws Exception
    {
        if ("1".equals(v))
        {
            return true;
        }
        return false;
    }

    @Override
    public String marshal(Boolean v) throws Exception
    {
        if (v == null)
        {
            return null;
        }
        if (v)
        {
            return "1";
        }
        return "0";
    }
}
于 2011-12-14T09:47:21.087 に答える
6

JAXB は、バインディングを柔軟にカスタマイズする方法を提供します。XML と Java の型をバインドする方法を示す XML ファイルを作成するだけです。あなたの場合、 aと a<javaType>を指定できる宣言を使用できます。これらの方法は、次のように簡単です。parseMethodprintMethod

public boolean myParseBool(String s)
{
    return s.equals("1");
}

public String myPrintBool(boolean b)
{
    return b ? "1" : "0";
}

おそらくDatatypeConverterを使用するなど、より簡単な方法が存在する可能性がありますが、私はこの主題を十分に認識していないため、さらに役立ちます!

于 2008-12-05T15:13:11.673 に答える
1

私はおそらくブール値をintに変換するための型アダプターを作成するでしょう。JAXBユーザーガイドにはいくつかの例があります。

于 2008-12-05T12:44:16.013 に答える
0

パーサー/ライターのペアを記述し、JAXBXMLのバインディングでプロパティマッピングを定義できます。

于 2008-12-05T12:40:15.570 に答える