1

次のコードがあります。

    javax.xml.bind.Marshaller m = ...
    java.io.OutputStream outputStream = ...
    Object jaxbElement = ...
    m.marshal(jaxbElement, outputStream);

それは正常に動作します。

次のコードもあります。

    javax.xml.bind.Marshaller m = ...
    java.io.BufferedWriter writer = ...
    Object jaxbElement = ...
    m.marshal(jaxbElement, writer);

この場合、marshal の呼び出しを実行すると、次の例外が発生します。

javax.xml.bind.MarshalException
 - with linked exception:
[java.io.IOException: Unrecognizable signature: "<?xml version="1.0" e".]

どちらの場合も jaxbElement は同じです。

最初の例は機能するのに、2 番目の例は失敗するのはなぜですか?

4

1 に答える 1

1

私はあなたが見ている例外を再現することができませんでした、以下は私のために働きます。

フー

import javax.xml.bind.annotation.XmlRootElement;

@XmlRootElement
public class Foo {

    private String bar;

    public String getBar() {
        return bar;
    }

    public void setBar(String bar) {
        this.bar = bar;
    }

}

デモ

import java.io.*;
import javax.xml.bind.*;
import javax.xml.namespace.QName;

public class Demo {

    public static void main(String[] args) throws Exception {
        JAXBContext jc = JAXBContext.newInstance(Foo.class);

        Foo foo = new Foo();
        foo.setBar("Hello World");
        marshal(jc, foo);

        Object jaxbElement = new JAXBElement<Foo>(new QName("root"), Foo.class, foo);
        marshal(jc, jaxbElement);
    }

    private static void marshal(JAXBContext jc, Object jaxbElement) throws Exception {
        Marshaller m = jc.createMarshaller();
        StringWriter stringWriter = new StringWriter();
        BufferedWriter writer = new BufferedWriter(stringWriter);
        m.marshal(jaxbElement, writer);
        writer.close();
        System.out.println(stringWriter.toString());
    }

}

出力

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><foo><bar>Hello World</bar></foo>
<?xml version="1.0" encoding="UTF-8" standalone="yes"?><root><bar>Hello World</bar></root>
于 2013-01-13T11:48:03.300 に答える