2013-04-03 144 views
2

我想从通过JAXB生成的类序列化XML。JAXB:命名空间丢失

类:

package ws.avail; 

@XmlAccessorType(XmlAccessType.FIELD) 
@XmlType(name = "", propOrder = { 
    "pos", 
    "uniqueID", 
    "availStatusMessages" 
}) 
@XmlRootElement(name = "OTA_HotelAvailNotifRQ") 
public class OTAHotelAvailNotifRQ { 
... 
} 

文件 “package-info.java”:

@javax.xml.bind.annotation.XmlSchema(namespace = "http://www.opentravel.org/OTA/2003/05", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED) 
package ws.avail; 

的编组(简化没有错误处理):

context = JAXBContext.newInstance(rootElement.getClass()); 
Marshaller marshaller = context.createMarshaller(); 
marshaller.marshal(rootElement, stringWriter); 
return stringWriter.toString(); 

此代码生成:

<?xml version="1.0" encoding="UTF-8" standalone="yes"?> 
<OTA_HotelAvailNotifRQ Version="1.000" Target="TEST"> 
.... 

我希望这样的事情:

<?xml version="1.0" encoding="UTF-8"?> 
<OTA_HotelAvailNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05" Version="1.000" Target="TEST"> 
.... 

我有一个类似的代码,并且能够正常运行,但我无法明白为什么这个代码不显示名称空间。任何线索?谢谢!

回答

2

您的映射是否正确

我尝试了你的模型,它为我的作品:

演示

package ws.avail; 

import java.io.StringWriter; 
import javax.xml.bind.*; 

public class Demo { 

    public static void main(String[] args) throws Exception { 
     OTAHotelAvailNotifRQ rootElement = new OTAHotelAvailNotifRQ(); 
     StringWriter stringWriter = new StringWriter(); 

     JAXBContext context = JAXBContext.newInstance(rootElement.getClass()); 
     Marshaller marshaller = context.createMarshaller(); 
     marshaller.marshal(rootElement, stringWriter); 
     System.out.println(stringWriter.toString()); 
    } 

} 

输出

<?xml version="1.0" encoding="UTF-8" standalone="yes"?><OTA_HotelAvailNotifRQ xmlns="http://www.opentravel.org/OTA/2003/05"/> 

SOLUTION

通常,当发生package-info类这个问题并没有编译或不与应用程序打包在一起。


了解更多信息