我會使用StAX的XMLStreamReader
解析器XML,推進XMLStreamReader
的元素你希望解組。然後我會讓JAXB解組XMLStreamReader
。像下面這樣:
演示
package bgc.objects.rosy.standarderror.v3;
import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;
public class Demo {
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("src/bgc/objects/rosy/standarderror/v3/input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
while(xsr.hasNext()) {
if(xsr.isStartElement() && xsr.getLocalName().equals("StandardError")) {
break;
}
xsr.next();
}
System.out.println(xsr.getLocalName());
JAXBContext jc = JAXBContext.newInstance(StandardError.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<StandardError> jb = unmarshaller.unmarshal(xsr, StandardError.class);
StandardError response = jb.getValue();
System.out.println(response);
xsr.close();
Marshaller marshaller = jc.createMarshaller();
marshaller.setProperty(Marshaller.JAXB_FORMATTED_OUTPUT, true);
marshaller.marshal(jb, System.out);
}
}
StandardError的
下面是StandardError
類
package bgc.objects.rosy.standarderror.v3;
//Compiled from StandardError.java (version 1.5 : 49.0, super bit)
@javax.xml.bind.annotation.XmlAccessorType(value = javax.xml.bind.annotation.XmlAccessType.FIELD)
@javax.xml.bind.annotation.XmlType(name = "", propOrder = { "code", "category",
"severity", "description", "environment", "correlationId" })
@javax.xml.bind.annotation.XmlRootElement(name = "StandardError")
public class StandardError {
// Field descriptor #15 J
protected long code;
// Field descriptor #17 Ljava/lang/String;
@javax.xml.bind.annotation.XmlElement(required = true)
protected java.lang.String category;
// Field descriptor #17 Ljava/lang/String;
@javax.xml.bind.annotation.XmlElement(required = true)
protected java.lang.String severity;
// Field descriptor #24 Ljava/util/List;
// Signature: Ljava/util/List<Ljava/lang/String;>;
@javax.xml.bind.annotation.XmlElement(required = true)
protected java.util.List description;
// Field descriptor #17 Ljava/lang/String;
@javax.xml.bind.annotation.XmlElement(required = true)
protected java.lang.String environment;
// Field descriptor #17 Ljava/lang/String;
@javax.xml.bind.annotation.XmlElement(required = true)
protected java.lang.String correlationId;
// Field descriptor #17 Ljava/lang/String;
@javax.xml.bind.annotation.XmlAttribute
protected java.lang.String version;
}
包信息
我將使用類package-info
上的@XmlSchema
註釋來指定bgc.objects.rosy.standarderror.v3
軟件包中類的名稱空間限定。
@XmlSchema(namespace="urn:v3.standarderror.vss.objects.bgc", elementFormDefault=XmlNsForm.QUALIFIED)
package bgc.objects.rosy.standarderror.v3;
import javax.xml.bind.annotation.*;
輸出
下面是從運行演示代碼的輸出:
StandardError
[email protected]
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<StandardError xmlns="urn:v3.standarderror.vss.objects.bgc">
<code>209526</code>
<category>TECHNICAL</category>
<severity>ERROR</severity>
<description xmlns:ns10="urn:v3.standarderror.vss.objects.bgc">APC operation AUDIT on position L02LAB00075:1-1-1-5
returned an error : APC audit operation failed Caused by:
com.alcatel.ni.commands.framework.model.UnsupportedDslamException:
unsupported.dslam.message Caused by: Unsupported DSLAM. Internal
rollback of failed action : success.</description>
<environment>PRO</environment>
<correlationId></correlationId>
</StandardError>
更多信息
您可以分享您正在使用的代碼和錯誤中的堆棧跟蹤嗎? –
附加原始堆棧跟蹤 – Reddy
@Reddy您的任何鏈接都不起作用,plz添加xml和xsd的 – LMK