JAXB生成XML时不同包类出现ns2前缀问题求助
JAXB跨包类出现ns2前缀问题
问题描述
试过网上所有方案都无效,不同Java包中的类被附加了ns2前缀(如ns2:Request),已添加package.info但没有作用。
POJO代码(响应包)
package com.models.response; @XmlRootElement(name = "Response") @XmlAccessorType(XmlAccessType.FIELD) @Data public class ResponseModel extends CommonModel { private static final long serialVersionUID = -865642381181292886L; @XmlElement(required = true) private ContentModelResponse content; } package com.models.response; @Data @ToString(callSuper = true) @XmlAccessorType(XmlAccessType.FIELD) public class ContentModelResponse extends ContentModelRequest { @XmlElement(name = "Response", required = true) private ResponseModel response; }
请求包中的类
package com.models.request; @Data @XmlAccessorType(XmlAccessType.FIELD) public class ContentModelRequest { @XmlElement(name = "Request", required = true) protected RequestModel request; }
已配置的package.info(仅请求包)
@javax.xml.bind.annotation.XmlSchema( namespace = "http://uri.abc.com/ML", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { @javax.xml.bind.annotation.XmlNs( namespaceURI = "http://uri.abc.com/ML", prefix = "") }) package com.models.request;
生成的响应XML
<?xml version="1.0" encoding="UTF-8" standalone="yes"?> <BCResponse xmlns:ns2="http://uri.abc.com/ML"> <publisher> </publisher> <content> <ns2:Request> <ns2:legalEntity> <ns2:partyId> <ns2:id></ns2:id> </ns2:partyId> </ns2:Request> <Response> <ResponseStatus> <statusType>ERROR</statusType> </ResponseStatus> </Response> </content> </BCResponse>
解决方案
给响应包添加一致的package.info
在com.models.response包下创建相同配置的package.info文件,确保两个包共享同一命名空间且元素默认合格:@javax.xml.bind.annotation.XmlSchema( namespace = "http://uri.abc.com/ML", elementFormDefault = javax.xml.bind.annotation.XmlNsForm.QUALIFIED, xmlns = { @javax.xml.bind.annotation.XmlNs( namespaceURI = "http://uri.abc.com/ML", prefix = "") }) package com.models.response;统一根元素的命名空间
检查BCResponse对应的JAXB类,确保它也标注了相同的命名空间,例如:@XmlRootElement(name = "BCResponse", namespace = "http://uri.abc.com/ML") public class BCResponse { // 类内容 }验证跨包命名空间一致性
确保所有关联的JAXB类(如RequestModel、CommonModel等)所在的包都配置了相同的XmlSchema,避免跨包时命名空间不匹配导致JAXB自动生成额外前缀。
内容的提问来源于stack exchange,提问作者Chandresh Mishra
相关产品推荐
相关产品推荐

