无法使用命名空间封送xml请求

时间:2018-03-27 11:12:02

标签: java xml jaxb eclipselink marshalling

我正在使用以下代码:

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。

1 个答案:

答案 0 :(得分:1)

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.

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

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