0

オブジェクトをマーシャリングするために JAXB を使用していますが、現在のコンソール出力は、生成された XML ファイルとは異なります。

コンソール:

<!-- My awesome comment --> 
 <?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<Cat>
    <name>Toby</name>
</Cat>

生成:

<Cat>
    <name>Toby</name>
</Cat>

コンソールの出力が内部で生成されたものと一致することを期待していますが、Cat.xmlそうではありません。私の質問は、「正しい」を生成するための私のアプローチで何が間違っているのCat.xmlですか? 以下の最小機能プログラム:

public class CatDriver{  
public static void main(String[] args) throws JAXBException, IOException,
            ParserConfigurationException, TransformerException {

        Cat cat = new Cat();
        cat.setName("Toby");
        JAXBContext context = JAXBContext.newInstance(Cat.class);

        Marshaller m = context.createMarshaller();
        m.setProperty(Marshaller.JAXB_FRAGMENT, Boolean.TRUE);
        m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE);
        m.setProperty(
                "com.sun.xml.bind.xmlHeaders",
                "<!-- My awesome comment"
                        + " --> \n <?xml version=\"1.0\" encoding=\"UTF-8\" standalone=\"yes\"?>");
        m.marshal(cat, System.out);
        Writer w = null;
        try {
            w = new FileWriter("C:/test/Cat.xml");
            m.marshal(cat, w);

        } finally {
            try {
                w.close();
            } catch (Exception e) {
            }
        }

    }
}

@XmlRootElement(name = "Cat")
class Cat {
    private String name;

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

}
4

2 に答える 2

1

この記事をご覧ください: http://blog.bdoughan.com/2010/09/jaxb-xml-infoset-preservation.html

それはまさにあなたが必要とするものではありませんが、おそらくそれはさらに良いアプローチです。

于 2012-05-07T18:25:26.693 に答える
-1
Cat cat = new Cat();
cat.setName( "Toby" );
JAXBContext context = JAXBContext.newInstance( Cat.class );

Marshaller m = context.createMarshaller();
m.setProperty( Marshaller.JAXB_FORMATTED_OUTPUT, Boolean.TRUE );
m.setProperty( Marshaller.JAXB_FRAGMENT, Boolean.FALSE );

m.marshal( cat, System.out );
Writer w = null;
try
{
  w = new FileWriter( "Cat.xml" );
  w.append( "<!-- My awesome comment -->" );
  w.flush();
  m.marshal( cat, w );

}
finally
{
  try
  {
    w.close();
  }
  catch ( Exception e )
  {
  }
}
于 2012-05-07T17:59:37.923 に答える