无法使用命名空间编组 xml 请求

Unable to marshal xml request with namespace

我正在使用以下代码:

JAXBContext jaxbContext = (JAXBContext) JAXBContext.newInstance(AFDType.class);

        AFDType AFDType = new AFDType();
        DeviceInfoType devInfoType = new DeviceInfoType();
        DeviceDetailInfoType devDetailInfoType = new DeviceDetailInfoType();

        devDetailInfoType.setEsnMeidDec("esn1234");
        devInfoType.setBrandCode("brand123");
        devInfoType.setSkuType("sku12345");
        devInfoType.setDeviceDetailInfo(devDetailInfoType);
        AFDType.setDeviceInfo(devInfoType);
        JAXBMarshaller marshaller = jaxbContext.createMarshaller();
        StringWriter sw = new StringWriter();
        marshaller.setProperty(JAXBMarshaller.JAXB_FORMATTED_OUTPUT, true);
        marshaller.marshal(AFDType, sw);

这会生成以下格式的 xml:

<?xml version="1.0" encoding="UTF-8"?>
<ns0:deviceInfo>
   <ns0:deviceDetailInfo>
      <esnMeidDec>esn1234</esnMeidDec>
   </ns0:deviceDetailInfo>
   <ns0:brandCode>brand123</ns0:brandCode>
   <ns0:skuType>sku12345</ns0:skuType>
</ns0:deviceInfo>

但是我需要遵循 xml:

<ns0:addFD xmlns:ns0="http://ee.abc.com/interfaces/afd/v1/afd.xsd">
         <ns0:deviceInfo>
            <ns0:deviceDetailInfo>
               <ns0:esnMeidHex>36748298746378</ns0:esnMeidHex>
            </ns0:deviceDetailInfo>
            <ns0:brandCode>SPR</ns0:brandCode>
            <ns0:skuType>BYO</ns0:skuType>
         </ns0:deviceInfo>
      </ns0:addFD>

谁能帮助我如何获得第二个xml。

package-info.java 添加到 interfaces.afd 根文件夹,内容如下

@XmlSchema(
    elementFormDefault=XmlNsForm.QUALIFIED,
    namespace="http://ee.abc.com/interfaces/afd/v1",
    xmlns={@XmlNs(prefix="ns0",
                  namespaceURI="http://ee.abc.com/interfaces/afd/v1")}
)
package interfaces.afd;

import javax.xml.bind.annotation.XmlNs;
import javax.xml.bind.annotation.XmlNsForm;
import javax.xml.bind.annotation.XmlSchema;

Read more about it here.

封闭的根元素 <ns0:addFd></ns0:addFd> 可以通过在 AddFd.class 上方添加 @XmlRootElement(name = "addFd") 标签来实现,如下所示:

@XmlRootElement(name = "addFd")
public class AddFd {
..
}