在web服务响应中返回了带有List的Jaxb绑定



我正在开发一个jax-ws客户端,我正在尝试处理作为响应返回的ArrayList,但我的列表总是空的。

返回的列表不为空,我确信WebService提供程序正在返回该列表中的数据,我使用SoapUI检查了这一点。

生成了与客户端相关的文件:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "ArrayOfFact", propOrder = {
"item"
})
public class ArrayOfFact {
protected List<Fact> item;
public List<Fact> getItem() {
if (item == null) {
item = new ArrayList<Fact>();
}
return this.item;
}
}

wsimport生成的ArrayOfFacts类与之前生成的类相同。

我在SOAPUI:中收到的XML响应

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsd="http://www.w3.org/2001/XMLSchema" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<soapenv:Body>
<ReleveResponse xmlns="http://www.test.ma/webservices/WSTestServe/">
<ReleveResult>
<ConversationId>conId</ConversationId>
<Status>
<WSStatus>OK</WSStatus>
<WSCode>OK</WSCode>
<WSMessage>Le traitement s’est bien déroulé!</WSMessage>
</Status>
<myReleveInfo>
<NomCli>El Karkouri youssef</NomCli>
<NbrImp>7</NbrImp>
<Facture>
<Fact>
<RefImp>FACT-124</RefImp>
<MntImp>230</MntImp>
<LibImp>label 1</LibImp>
<FlgPaiObl>1</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-125</RefImp>
<MntImp>260</MntImp>
<LibImp>label 0</LibImp>
<FlgPaiObl>0</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-126</RefImp>
<MntImp>360</MntImp>
<LibImp>label 2</LibImp>
<FlgPaiObl>0</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-127</RefImp>
<MntImp>236</MntImp>
<LibImp>label 3</LibImp>
<FlgPaiObl>0</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-128</RefImp>
<MntImp>2310</MntImp>
<LibImp>label 4</LibImp>
<FlgPaiObl>1</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-129</RefImp>
<MntImp>2450</MntImp>
<LibImp>label 0</LibImp>
<FlgPaiObl>1</FlgPaiObl>
</Fact>
<Fact>
<RefImp>FACT-167</RefImp>
<MntImp>2380</MntImp>
<LibImp>label 1125</LibImp>
<FlgPaiObl>0</FlgPaiObl>
</Fact>
</Facture>
</myReleveInfo>
</ReleveResult>
</ReleveResponse>
</soapenv:Body>
</soapenv:Envelope>

我在测试jax-ws客户端时收到的JSON响应:

{
"status": "OK",
"language": "en",
"data": {
"conversationId": {
"name": "{http://www.test.ma/webservices/WSTestServe/}ConversationId",
"declaredType": "java.lang.String",
"scope": "ma.comp.company.client.testserv.AbstractBean",
"value": "conId",
"nil": false,
"globalScope": false,
"typeSubstituted": false
},
"status": {
"name": "{http://www.test.ma/webservices/WSTestServe/}Status",
"declaredType": "ma.comp.company.client.testserv.StatusBeanOut",
"scope": "ma.comp.company.client.testserv.AbstractBeanOutOfReleveInfo",
"value": {
"wsstatus": "OK",
"wscode": "OK",
"wsmessage": "Le traitement s’est bien déroulé!"
},
"nil": false,
"globalScope": false,
"typeSubstituted": false
},
"myReleveInfo": {
"nomCli": {
"name": "{http://www.test.ma/webservices/WSTestServe/}NomCli",
"declaredType": "java.lang.String",
"scope": "ma.comp.company.client.testserv.ReleveInfo",
"value": "El Karkouri youssef",
"nil": false,
"globalScope": false,
"typeSubstituted": false
},
"nbrImp": {
"name": "{http://www.test.ma/webservices/WSTestServe/}NbrImp",
"declaredType": "java.lang.String",
"scope": "ma.comp.company.client.testserv.ReleveInfo",
"value": "7",
"nil": false,
"globalScope": false,
"typeSubstituted": false
},
"facture": {
"name": "{http://www.test.ma/webservices/WSTestServe/}Facture",
"declaredType": "ma.comp.company.client.testserv.ArrayOfFact",
"scope": "ma.comp.company.client.testserv.ReleveInfo",
"value": {
"item": []
},
"nil": false,
"globalScope": false,
"typeSubstituted": false
}
}
},
"message": null

}

事实类别:

@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "Fact", propOrder = {
"refImp",
"mntImp",
"libImp",
"flgPaiObl"
})
public class Fact {
@XmlElementRef(name = "RefImp", namespace = "http://www.test.ma/webservices/WSTesServe/", type = JAXBElement.class, required = false)
protected JAXBElement<String> refImp;
@XmlElementRef(name = "MntImp", namespace = "http://www.test.ma/webservices/WSTesServe/", type = JAXBElement.class, required = false)
protected JAXBElement<String> mntImp;
@XmlElementRef(name = "LibImp", namespace = "http://www.test.ma/webservices/WSTesServe/", type = JAXBElement.class, required = false)
protected JAXBElement<String> libImp;
@XmlElementRef(name = "FlgPaiObl", namespace = "http://www.test.ma/webservices/WSTesServe/", type = JAXBElement.class, required = false)
protected JAXBElement<String> flgPaiObl;
// Getters and Setters
}

我通过在wsimport 生成的类ObjectFactory中添加xml元素声明来修复这一问题

@XmlElementDecl(namespace = "http://www.test.ma/webservices/WSTestServe/", name = "Fact", scope = ArrayOfFact.class)
public JAXBElement<Fact> createArrayOfFactItem(Fact value) {
return new JAXBElement<Fact>(_ReleveInfoFact_QNAME, Fact.class, ArrayOfFact.class, value);
}

项目清单应注明:

@XmlElementRef(name = "Fact", namespace = "http://www.test.ma/webservices/WSTestServe/", type = JAXBElement.class, required = false)
protected List<Fact> item;

相关内容

  • 没有找到相关文章

最新更新