如何使用 javax.xml.bind.Unmarshaller 仅解组单个嵌套元素
how to unmarshall only the single nested element using javax.xml.bind.Unmarshaller
我有以下样本xsd
<annotation><appinfo>
<jaxb:schemaBindings>
<jaxb:package name="com.myapp"/>
</jaxb:schemaBindings>
</appinfo></annotation>
<element name="user">
<complexType>
<sequence>
<element name="roles" type="u:Roles" minOccurs="1"></element>
</sequence>
<attribute name="name" type="string"></attribute>
</complexType>
</element>
<complexType name="Role">
<complexContent>
<extension base="u:Role">
<attribute name="name" type="string"></attribute>
<attribute name="action" type="string"></attribute>
</extension>
</complexContent>
</complexType>
我只想解组一个角色 xml 就像下面的示例
JAXBContext c = JAXBContext.newInstance(User.class, Roles.class, Role.class);
Unmarshaller unmarshaller = c.createUnmarshaller();
JAXBElement ele = (JAXBElement) unmarshaller.unmarshal(inputStream);
return (Roles) ele.getValue();
我的输入 stream/xml 是
<roles>
<role name="admin" action="all"/>
<role name="recep" action="select"/>
</roles>
以上代码抛出如下错误
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.myapp.com/xsd/internal/myapp", local:"roles"). Expected elements are <{http://www.myapp.com/xsd/internal/myapp}User>
如何解组我的角色 xml?
如果您知道要解组的 class,请使用 unmarshal(Source source, Class<T> declaredType)
和喜欢。
所以尝试 unmarshaller.unmarshall(source, Roles.class)
会给你 JAXBElement<Roles>
。然后你可以 getValue()
从它得到一个实例 Roles
.
如果您提供 class 进行解组,根元素名称根本不重要,JAXB 不需要 "know" 它。
我有以下样本xsd
<annotation><appinfo>
<jaxb:schemaBindings>
<jaxb:package name="com.myapp"/>
</jaxb:schemaBindings>
</appinfo></annotation>
<element name="user">
<complexType>
<sequence>
<element name="roles" type="u:Roles" minOccurs="1"></element>
</sequence>
<attribute name="name" type="string"></attribute>
</complexType>
</element>
<complexType name="Role">
<complexContent>
<extension base="u:Role">
<attribute name="name" type="string"></attribute>
<attribute name="action" type="string"></attribute>
</extension>
</complexContent>
</complexType>
我只想解组一个角色 xml 就像下面的示例
JAXBContext c = JAXBContext.newInstance(User.class, Roles.class, Role.class);
Unmarshaller unmarshaller = c.createUnmarshaller();
JAXBElement ele = (JAXBElement) unmarshaller.unmarshal(inputStream);
return (Roles) ele.getValue();
我的输入 stream/xml 是
<roles>
<role name="admin" action="all"/>
<role name="recep" action="select"/>
</roles>
以上代码抛出如下错误
javax.xml.bind.UnmarshalException: unexpected element (uri:"http://www.myapp.com/xsd/internal/myapp", local:"roles"). Expected elements are <{http://www.myapp.com/xsd/internal/myapp}User>
如何解组我的角色 xml?
如果您知道要解组的 class,请使用 unmarshal(Source source, Class<T> declaredType)
和喜欢。
所以尝试 unmarshaller.unmarshall(source, Roles.class)
会给你 JAXBElement<Roles>
。然后你可以 getValue()
从它得到一个实例 Roles
.
如果您提供 class 进行解组,根元素名称根本不重要,JAXB 不需要 "know" 它。