我收到肥皂信息,但无法解析参数列表中的所有值。
参考:http://blog.bdoughan.com/2012/08/handle-middle-of-xml-document-with-jaxb.html
我遵循了这一点,但我的数据具有多重价值。它只能解析一个。我该怎么办
XML数据
<?xml version="1.0" encoding="UTF-8"?>
<env:Envelope xmlns:env="http://schemas.xmlsoap.org/soap/envelope/" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
<env:Header />
<env:Body>
<m:ExecuteServiceResponse xmlns:m="http://com/myproject/sff/ws">
<m:return>
<java:ErrorMessage xmlns:java="java:com.myproject.sff.domain.gm.vo.ws"/>
<java:ParameterList xmlns:java="java:com.myproject.sff.domain.gm.vo.ws">
<java:Parameter>
<java:Name>success</java:Name>
<java:Value xsi:nil="true"/>
</java:Parameter>
<java:Parameter>
<java:Name>productID</java:Name>
<java:Value>T3452789</java:Value>
</java:Parameter>
<java:Parameter>
<java:Name>productName</java:Name>
<java:Value>some</java:Value>
</java:Parameter>
</java:ParameterList>
</m:return>
</m:ExecuteServiceResponse>
</env:Body>
</env:Envelope>
我的代码
main.java
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("msg/input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
while(!xsr.getLocalName().equals("Parameter")) {
xsr.nextTag();
}
JAXBContext jc = JAXBContext.newInstance(Parameter.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<Parameter> jb = unmarshaller.unmarshal(xsr, Parameter.class);
xsr.close();
Parameter Parameter = jb.getValue();
System.out.println(Parameter.Name);
System.out.println(Parameter.Value);
Parameter.java
@XmlAccessorType(XmlAccessType.FIELD)
public class Parameter {
@XmlElement(namespace="java:com.myproject.sff.domain.gm.vo.ws")
String Name;
@XmlElement(namespace="java:com.myproject.sff.domain.gm.vo.ws")
String Value;
@XmlElement(name = "Parameter")
private List<Parameter> Parameter;
public List<Parameter> getCustomer (){
if( Parameter == null ){
Parameter = new ArrayList<Parameter>();
}
return Parameter;
}
}
答案 0 :(得分:0)
你不能只是解组这样的元素,它们必须用其他元素包装,例如:
<java:ParameterList xmlns:java="java:com.myproject.sff.domain.gm.vo.ws">
<java:ParList>
<java:Parameter>
<java:Name>success</java:Name>
<java:Value xsi:nil="true"/>
</java:Parameter>
<java:Parameter>
<java:Name>productID</java:Name>
<java:Value>T3452789</java:Value>
</java:Parameter>
<java:Parameter>
<java:Name>productName</java:Name>
<java:Value>some</java:Value>
</java:Parameter>
<java:ParList>
</java:ParameterList>
然后将代码更改为:
@XmlElementWrapper(name = "ParList")
@XmlElement(name = "Parameter")
private List<Parameter> Parameter;
我不完全确定你的参数周围有<java:ParameterList>
,但也许你也可以使用它。