4

我正在尝试从通过 JAXB 生成的类中序列化 XML。

班上:

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">  
....

我有类似的代码并且工作正常,但我无法理解为什么此代码不显示命名空间。有什么线索吗?谢谢!

4

1 回答 1

4

你的映射是正确的

我试用了您的模型,它对我有用:

演示

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"/>

解决方案

通常当出现此问题时,package-info该类未编译或未与应用程序打包。


了解更多信息

于 2013-04-03T11:31:19.727 回答