Estou usando JAXB
Primeiramente, alguém ja gerou XML a partir do Java?
Alguém tem algum exemplo de uma classe que faça isso?
Sites de indicação!?
Toda ajuda é bem vinda MESMO!
OBS.: Eu tenho que usar o JAXB nada de JDOM por causa do XSD
Estou usando JAXB
Primeiramente, alguém ja gerou XML a partir do Java?
Alguém tem algum exemplo de uma classe que faça isso?
Sites de indicação!?
Toda ajuda é bem vinda MESMO!
OBS.: Eu tenho que usar o JAXB nada de JDOM por causa do XSD
Muito bom o xstream
http://xstream.codehaus.org/
Bom ,
O pessoal usa muito o XStream - como já foi comentado. Eu trabalhei num projeto da NFe usei o JAXB e apesar de alguns problemas e limitações que tivemos que contornar funcionou legal. Gostei da forma de geração de beans a partir do XSD
Um artigo básico http://blog.caelum.com.br/jaxb-xml-e-java-de-maos-dadas/ , a partir daí dá uma “googloeada” que vc acha muita coisa.
cara eu vi no tutorial >> http://blog.caelum.com.br/jaxb-xml-e-java-de-maos-dadas/
o metodo "ObjectFactory().createCarro(carro);"
Como eu faço essa personalização do método?
Tipo eu procurei esse método e não existe na Lib original!
aqui tem um metodo simples que forma um String e salva em um arquivo XML
da uma olhada ai e adapita ao seu jeito...
String URL="c:/test.xml";
public boolean Salvar(String URL){
boolean test=false;
String XML="";
try{
XStream xstream = new XStream();
// recebe uma classe e trasforma ela pro formato em XMl
Classe xml=new Classe();// calsse simples so com get e set
xml.setString_Classe(URL);//metodo set da classe simples
List string_XMl = new ArrayList(1);
string_XMl.add(xml); // forma uma lista com uma string ja no formato do xml
// salva classe transformada em xml no endereço especifico
XML=xstream.toXML(string_XMl);
BufferedWriter bw = new BufferedWriter(new FileWriter(file));
bw.write(XML);
bw.flush();
bw.close();
test=true;
}
catch(Exception ex){
ex.printStackTrace();
JOptionPane.showMessageDialog(null, "ERRO AO SALAVAR AS URL \n\r "+ex.toString(),"ERRO 12",JOptionPane.ERROR_MESSAGE);
test=false;
}
return test;
}
qualquer coisa tenho um metodo pra ler tambem ou qualquer duvida ou erro posta ai... vo ajudar no que puder ..!
guisantogui,
Quando vc gera as classes a partir do xsd pelo comando xjc, ele cria um ObjectFactory no mesmo pacote dos beans com métodos createSuaClasse(SuaClasse objeto) que vc pode personalizar.
Como te falei antes se o seu projeto não for obrigatório usar JAXB, parte algo mais simples como o colega indicou o XStream.
Mas com o XStream eu consigo definir o XSD???
o XStream gera o arquivo xml de acordo com a sua classe simples , com os metodos q existem nela ,etc...
e so vc configurar isso .. da uma olhada e montar uma classe que te atendera ...
pelo menos eu faço assim ...
por ex:
public class Test{
private String Nome=" KIQ095";
public String getNome() {
return Nome;
}
public void setCampos(String Nome) {
this.Nome = Nome;
}
essa classe gera um arquivo XML mais ou menos assim ..
<List>
<Test>
<Nome> KIQ095 </Nome>
</Test>
</List>
tem com fazer classes com list com vetores .. com tudo cada uma forma um Xml diferente ai vc olha o q melhor te atende e configura os dados que a classe esta recebendo , o formato como serão salvos ...etc
cara acho que vou ter que usar o JAXB mesmo o Xstream não tem o esquema do XSD 
Olha só,
Tem o XMLBeans que gera beans através do XSD , dá uma olhada em http://robsonp.com/01/2011/xml-com-xmlbeans/ .
existe um programinha dentro do jdk para gerar o XSD atraves das classes java, chama-se schemagen, fica dentro do diretório bin
basta as tuas classes estarem mapeadas e rodar ele
abs
edit: http://download.oracle.com/javase/6/docs/technotes/tools/share/schemagen.html
galera acho que vou continuar no JAXB afinal já comecei com ele e não tenho tempo de começar do zero de outra tecnologia, então se souberem e puderem me esclarecer como o JAXB trabalha seria interessante! 
vlw
executei o seguinte código:
public static void main(String[] args) throws JAXBException, FileNotFoundException{
Cliente cliente = new Cliente("pedro", "rua", "78945612", Calendar.getInstance());
JAXBContext jaxbContext = JAXBContext.newInstance("Cliente");
Marshaller marshaller = jaxbContext.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jaxbContext, System.out);
que encontrei nesse tutorial: [url]http://www.devmedia.com.br/post-11547-Introducao-a-JAXB-2.html[/url]
e retornou essa excessão, estou tentando resolver aqui, se alguém souber o que é de cara a ajuda é bem vinda!
Exception in thread "main" javax.xml.bind.JAXBException: "Cliente" doesnt contain ObjectFactory.class or jaxb.index
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:127)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:276)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:279)
at NFE.ExportarNotaFiscal.main(ExportarNotaFiscal.java:25)
tentei tb com esse código e gerou a mesma excessão acima!
@XmlRootElement(name="Nfe", namespace="http://www.portalfiscal.inf.br/nfe")
public class ExportarNotaFiscal {
public static void main(String[] args) throws JAXBException, FileNotFoundException{
Cliente cliente = new Cliente("pedro", "rua", "78945612", Calendar.getInstance());
JAXBContext jaxbContext = JAXBContext.newInstance("Cliente");
File f = new File("file.xml");
Marshaller m = jaxbContext.createMarshaller();
m.marshal(cliente, new FileOutputStream(f));
Exception in thread "main" javax.xml.bind.JAXBException: "Cliente" doesnt contain ObjectFactory.class or jaxb.index
at com.sun.xml.bind.v2.ContextFactory.createContext(ContextFactory.java:197)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at javax.xml.bind.ContextFinder.newInstance(ContextFinder.java:127)
at javax.xml.bind.ContextFinder.find(ContextFinder.java:276)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:412)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:375)
at javax.xml.bind.JAXBContext.newInstance(JAXBContext.java:279)
at model.ExportarNotaFiscal.main(ExportarNotaFiscal.java:25)
CONSEGUIIII!!!! MERDA!!!!! :D
Só qro solucionar mais um bugzinho.
segue o print:
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<ns2:teste xmlns:ns2="br.inf.portalfiscal.nfe">
<id>0</id>
<cpf>[telefone removido]</cpf>
<cnpj>789789798798</cnpj>
<nome>Gui</nome>
<endereco>Rua</endereco>
<telefone>12345678</telefone>
<data>2011-03-28T17:45:19.124-03:00</data>
</ns2:teste>
eu qria tirar aquele "ns2:" da frente do troço, da pra fazer, alguém sabe como?
Segue o código que gera o XML:
public static void main(String[] args) throws JAXBException, FileNotFoundException{
Cliente ex = new Cliente();
ex.setNome("Gui");
ex.setEndereco("Rua");
ex.setData(Calendar.getInstance());
ex.setId(0);
ex.setTelefone("12345678");
ex.setCnpj("789789798798");
ex.setCpf("[telefone removido]");
// Get a JAXB Context for the object we created above
JAXBContext context = JAXBContext.newInstance(ex.getClass());
// To convert ex to XML, I need a JAXB Marshaller
Marshaller marshaller = context.createMarshaller();
// Make the output pretty
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
StringWriter sw = new StringWriter();
// marshall the object to XML
File f = new File("C:\Users\Guilherme\Documents\marshal.xml");
marshaller.marshal(ex, sw);
marshaller.marshal(ex, new FileOutputStream(f));
System.out.println(sw.toString());