Как получить вывод в JAXB (маршалинг)? - PullRequest
3 голосов
/ 13 июля 2011

Я попробовал пример hello world из здесь , и я не вижу никакого вывода в моей программе (в консоли при использовании команды "java").Я что-то не так делаю?Код функции маршала выглядит следующим образом:

public void marshal() {
    try {
        JAXBElement<GreetingListType> gl =
            of.createGreetings( grList );
        JAXBContext jc = JAXBContext.newInstance( "hello" );
        Marshaller m = jc.createMarshaller();
        m.marshal( gl, System.out );
    } catch( JAXBException jbe ){
        // ...
    }
}

Я также пытался поместить вывод в файл, подобный этому:

public void marshal() {
    try {
        JAXBElement<GreetingListType> gl =
            of.createGreetings( grList );
        JAXBContext jc = JAXBContext.newInstance( "hello" );
        FileOutputStream fos = new FileOutputStream("plik.xml");
        Marshaller m = jc.createMarshaller();
        //m.marshal( gl, System.out );
        m.marshal(gl, fos);
        fos.close();
    } catch( JAXBException jbe ){
        // ...
    }
  catch( IOException ioe ){
    // ...
}
}

, но это не сработало.У вас есть какие-нибудь решения?

РЕДАКТИРОВАТЬ: После печати Stack Trace он дал мне это, выглядит многообещающе:

javax.xml.bind.JAXBException: "hello" doesnt contain ObjectFactory.class or jaxb.index
    at com.sun.xml.internal.bind.v2.ContextFactory.createContext(ContextFactory.java:186)
    at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
    at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.lang.reflect.Method.invoke(Method.java:616)
    at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:148)
    at javax.xml.bind.ContextFinder.find(ContextFinder.java:310)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:392)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:357)
    at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:264)
    at Hello.marshal(Hello.java:28)
    at Hello.main(Hello.java:43)

У меня есть ObjectFactory, но я ничего не знаю о jaxb.index.Это необходимо?Как это должно выглядеть?

Ответы [ 2 ]

3 голосов
/ 19 декабря 2012

Я столкнулся с той же проблемой. Оказывается, вам нужно изменить эту строку:

JAXBContext jc = JAXBContext.newInstance( "hello" );

, но с полным пакетом, в котором вы создали свои файлы:

JAXBContext jc = JAXBContext.newInstance( "my.generated.package.etc" ); // or whatever.
1 голос
/ 13 июля 2011

Демонстрация выглядит неполной (отсутствует основной метод):

public static void main(String[] args) {
    Hello hello = new Hello();
    hello.make("FOO", "BAR");
    hello.marshal();
}

Ниже приведена исправленная версия:

package hello;

import javax.xml.bind.*;

public class Hello {

    private ObjectFactory of;
    private GreetingListType grList;

    public Hello(){
        of = new ObjectFactory();
        grList = of.createGreetingListType();
    }

    public static void main(String[] args) {
        Hello h = new Hello();
        h.make( "Bonjour, madame", "fr" ); 
        h.make( "Hey, you", "en" ); 
        h.marshal();    }

    public void make( String t, String l ){
        GreetingType g = of.createGreetingType();
        g.setText( t );
        g.setLanguage( l );
        grList.getGreeting().add( g );
    }

    public void marshal() {
        try {
            JAXBElement<GreetingListType> gl =
                of.createGreetings( grList );
            JAXBContext jc = JAXBContext.newInstance( "hello" );
            Marshaller m = jc.createMarshaller();
            m.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
            m.marshal( gl, System.out );
        } catch( JAXBException jbe ){
            // ...
        }
    }

}

выход

<?xml version="1.0" encoding="UTF-8"?>
<Greetings>
   <Greeting language="fr">
      <Text>Bonjour, madame</Text>
   </Greeting>
   <Greeting language="en">
      <Text>Hey, you</Text>
   </Greeting>
</Greetings>
...