我正在使用 JAXB 和 RestEasy。
我从一个需要具有的 xml 文件返回一个 Comprobante.class(JAXB 生成的类):
<cfdi:Comprobante xmlns:cfdi="http://www.sat.gob.mx/cfd/3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd">...</cfdi:Comprobante>
我在包声明中有这个:
@XmlSchema(
location = "http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd",
namespace = "http://www.sat.gob.mx/cfd/3",
elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED,
attributeFormDefault = javax.xml.bind.annotation.XmlNsForm.UNQUALIFIED,
xmlns={
@XmlNs(
prefix="cfdi",
namespaceURI="http://www.sat.gob.mx/cfd/3"
),
@XmlNs(
prefix="xsi",
namespaceURI="http://www.w3.org/2001/XMLSchema-instance"
)
})
但是从 XML 文件解组到 JAXB 类的结果没有:
xsi:schemaLocation="http://www.sat.gob.mx/cfd/3 http://www.sat.gob.mx/sitio_internet/cfd/3/cfdv32.xsd"
它只打印
<cfdi:Comprobante
xmlns:cfdi="http://www.sat.gob.mx/cfd/3"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">..</cfdi:Comprobante>
我的代码是:
File p = new File(servletContext.getRealPath("/")+factura.getXml().getCfdi());
JAXBContext context = JAXBContext.newInstance("foo.bar.Model.CFDIv32");
Unmarshaller u = context.createUnmarshaller();
return (foo.bar.Comprobante) u.unmarshal(p);
我如何告诉 JAXB Unmarshaller 放置 xsi:schemaLocation="" 属性。
谢谢你。
编辑:我是如何解决的
看我自己的答案