我会试试
@XmlRootElement(name = "AirShoppingRQ", namespace = "http://www.iata.org/IATA/EDIST/2017.2")
public class AirShoppingRQ {
}
或者如果您有一个将该命名空间作为 targetNamespace 的架构,我认为您可以使用例如
@XmlRootElement(name = "AirShoppingRQ", namespace = "##default")
public class AirShoppingRQ {
}
您在问题中提到您尝试通过编辑
package-info.java
来提供名称空间前缀映射,但实际上您没有提供IATA 相关名称空间的映射。您是否尝试过以下方法?
@javax.xml.bind.annotation.XmlSchema(
xmlns = {
@javax.xml.bind.annotation.XmlNs(
prefix = "xsd",
namespaceURI = "http://www.w3.org/2001/XMLSchema"
),
@javax.xml.bind.annotation.XmlNs(
prefix = "xsi",
namespaceURI = "http://www.w3.org/2001/XMLSchema-instance"
),
@javax.xml.bind.annotation.XmlNs(
prefix = "iata",
namespaceURI = "http://www.iata.org/IATA/EDIST/2017.2"
)
}
)
要将“xmlns”属性的值设置为特定命名空间 URI,您可以将以下注释添加到您的 AirShoppingRQ 类:
@XmlRootElement(name = "AirShoppingRQ", namespace = "http://www.iata.org/IATA/EDIST/2017.2")
public class AirShoppingRQ {
//...
}
这会将 AirShoppingRQ 的名称空间 URI 设置为“http://www.iata.org/IATA/EDIST/2017.2”,并且应该生成所需的 XML。
您还应该从 package-info.java 文件中删除 @XmlSchema 注释,因为这对于设置单个元素的名称空间 URI 不是必需的。
但是如果服务器不接受前缀为“ns2”或“ns3”的命名空间,那么您应该确保您用于 AirShoppingRQ 元素的命名空间 URI 没有前缀。
@XmlSchema(
namespace = "http://www.iata.org/IATA/EDIST/2017.2",
elementFormDefault = XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(namespaceURI = "http://www.iata.org/IATA/EDIST/2017.2", prefix = "")
}
)
package com.example;
import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;