java – 具有多个名称空间的解组
所以,假设我有几个名称空间的xml.
<Envelope xmlns:pdi="http://www.mypage.com/schemas/pdi" xmlns:ib="http://www.mypage.com/schemas/ib" xmlns="http://www.mypage.com/schemas/envelope"> <Product> <pdi:number>123456</pdi:number> </Product> <Instance> <ib:serial>abcdefg</ib:serial> </Instance> </Envelope> 我正在尝试为它建立一个客户端.我有一个像这样声明的信封POJO @XmlRootElement(name ="Envelope",namespace = "http://www.mypage.com/schemas/envelope") public class Envelope 在里面,它有这些属性 @XmlElement(name="Product",namespace = "http://www.mypage.com/schemas/pdi") public Product getProduct(){...} @XmlElement(name="Instance",namespace = "http://www.mypage.com/schemas/ib") public Instance getInstance(){...} 此外,产品POJO如下所示: @XmlRootElement(name="Product",namespace = "http://www.mypage.com/schemas/pdi") public class Product 和属性 @XmlElement(name="pdi:number",namespace = "http://www.mypage.com/schemas/pdi") public int getNumber(){...} 出于某种原因,我无法获得产品编号.我一直收到请求错误.我是否正确处理名称空间,或者我错过了什么? 解决方法
对于此用例,我建议利用包级别@XmlSchema注释来指定命名空间限定.
package-info(forum14651918 / package-info.java) @XmlSchema( namespace="http://www.mypage.com/schemas/envelope",elementFormDefault=XmlNsForm.QUALIFIED,xmlns={ @XmlNs(namespaceURI = "http://www.mypage.com/schemas/envelope",prefix = ""),@XmlNs(namespaceURI = "http://www.mypage.com/schemas/ib",prefix = "ib"),@XmlNs(namespaceURI = "http://www.mypage.com/schemas/pdi",prefix = "pdi") } ) @XmlAccessorType(XmlAccessType.FIELD) package forum14651918; import javax.xml.bind.annotation.*; 信封(forum14651918 / Envelope.java) 由于我们在@XmlSchema批注上指定了名称空间和elementFormDefault,因此将使用http://www.mypage.com/schemas/envelope名称空间自动限定与Envelope类对应的所有元素. package forum14651918; import javax.xml.bind.annotation.*; @XmlRootElement(name="Envelope") public class Envelope { @XmlElement(name="Product") private Product product; @XmlElement(name="Instance") private Instance instance; } 产品(forum14651918 / Product.java) 您可以使用@XmlType批注覆盖Product类的命名空间. package forum14651918; import javax.xml.bind.annotation.*; @XmlType(namespace="http://www.mypage.com/schemas/pdi") public class Product { private int number; } 实例(forum14651918 / Instance.java) 您可以使用@XmlType批注覆盖Instance类的命名空间. package forum14651918; import javax.xml.bind.annotation.XmlType; @XmlType(namespace="http://www.mypage.com/schemas/ib") public class Instance { private String serial; } 演示(forum14651918 / Demo.java) 下面是一些代码,您可以运行以证明一切正常. import java.io.File; import javax.xml.bind.*; public class Demo { public static void main(String[] args) throws Exception { JAXBContext jc = JAXBContext.newInstance(Envelope.class); Unmarshaller unmarshaller = jc.createUnmarshaller(); File xml = new File("src/forum14651918/input.xml"); Envelope envelope = (Envelope) unmarshaller.unmarshal(xml); Marshaller marshaller = jc.createMarshaller(); marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT,true); marshaller.marshal(envelope,System.out); } } 欲获得更多信息 > http://blog.bdoughan.com/2010/08/jaxb-namespaces.html (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- java – Quartz调度程序从3.0版开始不再适用于Spring吗?
- java – 使用JPA和Hibernate在Persistence.xml中配置C3P0
- ***object中的通用方法
- 详解JAVA后端实现统一扫码支付:微信篇
- java – HTTPS客户端无法连接 – PKIX路径构建失败但存在根
- 23种设计模式(8) java外观模式
- java – Dagger 2:如果没有@ Provide-annotated方法,则无法
- CCPC-Wannafly & Comet OJ 夏季欢乐赛(2019)D
- Selenium Standalone Server和Java selenium Jar文件之间有
- java获取手机已安装APK的签名摘要