JAXB接口解析 相同属性名 @XmlElementWrapper的name相同

先看一下接口字段定义:第一层array下有两层并列array集合(解析并列array标签里的数据)JAXB接口解析 相同属性名 @XmlElementWrapper的name相同
JAXB接口解析 相同属性名 @XmlElementWrapper的name相同
JAXB接口解析 相同属性名 @XmlElementWrapper的name相同
JAXB接口解析 相同属性名 @XmlElementWrapper的name相同代码:(通过dom4j解析 一步一步映射到实体类)
OrderlogistnewGetResponse_HfyhEsb orderlogistnewGetResponse_hfyhEsb = JavaToXml.converyToJavaBean(cateResponseStr, OrderlogistnewGetResponse_HfyhEsb.class);
Document docum = DocumentHelper.parseText(cateResponseStr);
Element mes = docum.getRootElement();
Element BODY=mes.element(“BODY”);
Element array=BODY.element(“array”);
Iterator PkgInfDtlIterator =array.elementIterator(“PkgInfDtl”);
List ordVOlist= new ArrayList();
while(PkgInfDtlIterator.hasNext()) {
Element Pkg= PkgInfDtlIterator.next();
OrderlogistnewPkgInfDtlResponseVO orderlogistnewPkgInfDtlVO = JavaToXml.converyToJavaBean(Pkg.asXML(), OrderlogistnewPkgInfDtlResponseVO.class);
List orderlogistnewExprsInfDtlVO=new ArrayList();
List orderlogistnewOrderInfVO =new ArrayList();
Iterator elementIterator = Pkg.elementIterator(“array”);
while (elementIterator.hasNext()) {
Element rray = elementIterator.next();
Element array2 = rray.element(“ExprsInfDtl”);
if (array2 != null) {
Iterator ExprsInfDtlIterator = rray.elementIterator(“ExprsInfDtl”);
while (ExprsInfDtlIterator.hasNext()) {
Element ExprsInfDtl = ExprsInfDtlIterator.next();
OrderlogistnewExprsInfDtlResponseVO ExprsInfDtlResponseVO = JavaToXml.converyToJavaBean(ExprsInfDtl.asXML(), OrderlogistnewExprsInfDtlResponseVO.class);
orderlogistnewExprsInfDtlVO.add(ExprsInfDtlResponseVO);
}
}
Element array1 = rray.element(“OrderInf”);
if (array1 != null) {
Iterator OrderInfIterator = rray.elementIterator(“OrderInf”);
while (OrderInfIterator.hasNext()) {
Element OrderInf = OrderInfIterator.next();
OrderlogistnewOrderInfResponseVO istnewOrderInfResponseVO = JavaToXml.converyToJavaBean(OrderInf.asXML(), OrderlogistnewOrderInfResponseVO.class);
orderlogistnewOrderInfVO.add(istnewOrderInfResponseVO);
}
}
}
orderlogistnewPkgInfDtlVO.setOrderlogistnewExprsInfDtlResponseVO(orderlogistnewExprsInfDtlVO);
orderlogistnewPkgInfDtlVO.setOrderlogistnewOrderInfResponseVO(orderlogistnewOrderInfVO);
ordVOlist.add(orderlogistnewPkgInfDtlVO);
}
orderlogistnewGetResponse_hfyhEsb.getOrderlogistnewGetResponse().setOrderlogistnewPkgInfDtlResponseVOlist(ordVOlist);

还有种方法 比较笨但是也能解决

把定义的 @XmlElementWrapper(name=“array”)其中一个改成@XmlElementWrapper(name=“array1”)然后替换字符串

(字符串替换,如果是第二层中有相同属性 这么写可能有风险 因为标签的间隔不能确定):
cateResponseStr是接收的xml字符串
cateResponseStr=cateResponseStr.replace("\r\n" + " “,”\r\n" +" “).replace(”\r\n" + " “,”\r\n" +" ");

如果是第一层:
(字符串替换,无风险)
cateResponseStr是接收的xml字符串
cateResponseStr=cateResponseStr.replaceFirst("", “”).replaceFirst("", “”);

要放假了 不细写了 就截了个图 有需要的私聊我,有时间我给你讲也行,qq3165416548