2013-01-04 37 views
6
public final String getMessage() { 
      JAXBContext jaxbContext; 
      StringWriter sw = new StringWriter(); 
      try { 
       jaxbContext = JAXBContext.newInstance(Login.class);   
       Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 

       jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1");      
         jaxbMarshaller.marshal(this, sw); 
      } catch (JAXBException e) { 
       // TODO Auto-generated catch block 
       e.printStackTrace(); 
      } 
      return sw.toString(); 
     } 

これは私が使っているコードです。以下のように出力されています。jaxbからstandalone = "yes"を生成xml

<?xml version="1.0" encoding="ISO-8859-1" standalone="yes"?> 

ここで私は、私がリンク JAXB - Remove 'standalone="yes"' from generated XML をチェックするが、ここでの回答が完了

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 

一部

を削除する "はい" =スタンドアロンを削除し、

<?xml version="1.0" encoding="ISO-8859-1"?> 

として出力を行いたい場合

私はそれを望んでいません...

...私を助けてください

答えて

6

あなたの質問に対処する必要のある問題がいくつかあります:

ISSUE#1 - エンコーディングが

"jaxb.encoding"プロパティがセットに直接影響を与えます出力がOutputStreamの場合のエンコーディング独自のエンコーディングを扱う責任がある出力(Writerなど)を使用している場合は、Writerの一部としてそれを処理する必要があります。あなたはあなたのためのあなたのStringWriterをラップするためのStAX(JSR-173)XMLStreamWriterを作成することができますstandalone="yes"

から

2問題#

詳細情報

XML出力とそのマーシャリング。

import java.io.*; 
import javax.xml.bind.*; 
import javax.xml.bind.annotation.XmlRootElement; 
import javax.xml.stream.*; 

@XmlRootElement 
public class Login { 

    private JAXBContext jaxbContext; 
    private XMLOutputFactory xmlOutputFactory; 

    public Login() { 
     try { 
      jaxbContext = JAXBContext.newInstance(Login.class); 
      xmlOutputFactory = XMLOutputFactory.newFactory(); 
     } catch(Exception e) { 
      e.printStackTrace(); 
     } 

    } 

    public static void main(String[] args) { 
     Login demo = new Login(); 
     System.out.println(demo.getMessage()); 
    } 

    public final String getMessage() { 
     try { 
      Marshaller jaxbMarshaller = jaxbContext.createMarshaller(); 
      jaxbMarshaller.setProperty("jaxb.encoding", "ISO-8859-1"); 
      jaxbMarshaller.setProperty(Marshaller.JAXB_FRAGMENT, true); 

      ByteArrayOutputStream baos = new ByteArrayOutputStream(); 
      XMLStreamWriter xmlStreamWriter = xmlOutputFactory.createXMLStreamWriter(baos, (String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING)); 
      xmlStreamWriter.writeStartDocument((String) jaxbMarshaller.getProperty(Marshaller.JAXB_ENCODING), "1.0"); 
      jaxbMarshaller.marshal(this, xmlStreamWriter); 
      xmlStreamWriter.writeEndDocument(); 
      xmlStreamWriter.close(); 
      return new String(baos.toByteArray()); 
     } catch (Exception e) { 
      // TODO Auto-generated catch block 
      e.printStackTrace(); 
     } 
     return null; 
    } 

} 

出力

<?xml version="1.0" encoding="ISO-8859-1"?><login></login> 

別のアプローチ

注:私はEclipseLink JAXB (MOXy)リードとJAXB (JSR-222)専門家グループのメンバーです。

使用できるXML出力の一部としてstandalone="yes"を出力しない、MOXyなどの他のJAXB(JSR-222)プロバイダがあります。

+2

そんなにブレーズDoughan.Itが働いてありがとう! – vg123

関連する問題