以下是如何处理您的使用 cae:
如果需要映射元素Envelope
软件包信息
通常,您将按如下方式使用。像我所做的那样使用 and 属性意味着映射到 XML 元素的所有数据(除非另有映射)都将属于命名空间。中指定的信息用于 XML 模式生成,尽管某些 JAXB 实现在编组时使用它来确定命名空间的首选前缀(请参见:http://blog.bdoughan.com/2011/11/jaxb-and-namespace-prefixes.html)。@XmlSchema
namespace
elementFormDefault
http://www.xxxx.com/ncp/oomr/dto/
xmlns
@XmlSchema (
namespace="http://www.xxxx.com/ncp/oomr/dto/",
elementFormDefault=XmlNsForm.QUALIFIED,
xmlns = {
@XmlNs(prefix = "env", namespaceURI="http://schemas.xmlsoap.org/soap/envelope/"),
@XmlNs(prefix="whatever", namespaceURI="http://www.xxxx.com/ncp/oomr/dto/")
}
)
package com.one.two;
import javax.xml.bind.annotation.*;
信封
如果在 中,您需要从命名空间映射到元素,则需要在 和 注释中指定它。com.one.two
http://www.xxxx.com/ncp/oomr/dto/
@XmlRootElement
@XmlElement
package com.one.two;
import javax.xml.bind.annotation.*;
@XmlRootElement(name="Envelope", namespace="http://schemas.xmlsoap.org/soap/envelope/")
@XmlAccessorType(XmlAccessType.FIELD)
public class Envelope {
@XmlElement(name="Body", namespace="http://schemas.xmlsoap.org/soap/envelope/")
private Body body;
}
详细信息
如果你只是想映射身体
您可以使用 StAX 解析器来解析消息并前进到有效负载部分,然后从那里取消元组:
import javax.xml.bind.*;
import javax.xml.stream.*;
import javax.xml.transform.stream.StreamSource;
public class UnmarshalDemo {
public static void main(String[] args) throws Exception {
XMLInputFactory xif = XMLInputFactory.newFactory();
StreamSource xml = new StreamSource("src/blog/stax/middle/input.xml");
XMLStreamReader xsr = xif.createXMLStreamReader(xml);
xsr.nextTag();
while(!xsr.getLocalName().equals("return")) {
xsr.nextTag();
}
JAXBContext jc = JAXBContext.newInstance(Customer.class);
Unmarshaller unmarshaller = jc.createUnmarshaller();
JAXBElement<Customer> jb = unmarshaller.unmarshal(xsr, Customer.class);
xsr.close();
}
}
详细信息