如何把soap xml string转对象,里面带有<等转义符
xml如图下,要把caseCode后的提取为对象
<?xml version=\"1.0\" encoding=\"utf-8\"?>
<soap:Envelope xmlns:soap=\"http://www.w3.org/2003/05/soap-envelope\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\" xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\">
<soap:Body>
<serviceResponse xmlns=\"http://tempuri.org/\">
<serviceResult>
<Header>UWBCDtResponse</Header><Type>string</Type><Return>{\"caseCode\":\"abc\",\"bagList\":[{\"reelList\":[],\"bagCode\":\"12\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"123\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"1234\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"12345\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"123456\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"123456\",\"qty\":78000.0},{\"reelList\":[],\"bagCode\":\"1234567\",\"qty\":78000.0}]}</Return><Tailer>UWBCEnd</Tailer>
</serviceResult>
</serviceResponse>
</soap:Body>
</soap:Envelope>
对象:
public class EcsBarcodeVo implements Serializable {
private static final long serialVersionUID = 1L;
@XmlAttribute
private String caseCode;
@XmlAttribute
private List<BagList> bagList;
private class BagList{
private List<String> reelList;
private String bagCode;
private BigDecimal qty;
}
个人是参考这里的方法写了个,
public Object conver(String clazz) throws XMLStreamException, JAXBException {
Reader reader = new StringReader(clazz);
XMLInputFactory factory = XMLInputFactory.newInstance(); // Or newFactory()
XMLStreamReader xsr = factory.createXMLStreamReader(reader);
xsr.nextTag();
while(!xsr.getLocalName().equals("return")) {
xsr.nextTag();
}
JAXBContext jc = JAXBContext.newInstance(EcsBarcodeVo.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<EcsBarcodeVo> jb = unmarshaller.unmarshal(xsr, EcsBarcodeVo.class);
xsr.close();
EcsBarcodeVo customer = jb.getValue();
System.out.println(customer.getCaseCode());
System.out.println(customer.getBagList());
return null;
}
但是不知道是不是有转义符的原因,报错Message: found: CHARACTERS, expected START_ELEMENT or END_ELEMENT