我有简单的架构:
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="error" type="xs:string">
</xs:element>
</xs:schema>
我使用JAXB从XML Schema生成Java代码。我只有一个班级:
@XmlRegistry
public class ObjectFactory {
private final static QName _Error_QNAME = new QName("", "error");
/**
* Create a new ObjectFactory that can be used to create new instances of schema derived classes for package: error
*
*/
public ObjectFactory() {
}
/**
* Create an instance of {@link JAXBElement }{@code <}{@link String }{@code >}}
*
*/
@XmlElementDecl(namespace = "", name = "error")
public JAXBElement<String> createError(String value) {
return new JAXBElement<String>(_Error_QNAME, String.class, null, value);
}
}
我通常使用此代码来解析XML:
JAXBContext context = JAXBContext.newInstance(RootGenerateClass.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
RootGenerateClass response = (RootGenerateClass) unmarshaller.unmarshal(streamWrapper.getStream());
在这种情况下我该怎么做(我没有rootGenerateClass)?我试试这个:
JAXBContext context = JAXBContext.newInstance(String.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
String response = (String) unmarshaller.unmarshal(streamWrapper.getStream());
当然不行((
答案 0 :(得分:1)
假设您的ObjectFactory
位于com.example
包中,您应该可以
JAXBContext context = JAXBContext.newInstance("com.example");
Unmarshaller unmarshaller = context.createUnmarshaller();
JAXBElement<String> responseElt = (JAXBElement<String>) unmarshaller.unmarshal(streamWrapper.getStream());
String response = responseElt.getValue();
当您将包名称提供给JAXBContext.newInstance
时,它会在该包中查找ObjectFactory
类。
答案 1 :(得分:0)
您尚未在此处提及RootGenerateClass
。同样没有意义的是将XML内容转换为JAVA类对象,并且该类应该具有与XML模式中相同的数据成员。因此,在第二种情况下,对String
类对象不起作用将无效。
答案 2 :(得分:0)
非常感谢。 :) 我只是使用包装器作为根元素
<?xml version="1.0" encoding="UTF-8"?>
<xs:schema attributeFormDefault="unqualified" elementFormDefault="qualified"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<xs:element name="error" type="RetroErrorType"/>
<xs:complexType name="RetroErrorType">
<xs:simpleContent>
<xs:extension base="xs:string">
</xs:extension>
</xs:simpleContent>
</xs:complexType>
</xs:schema>
和
JAXBContext context = JAXBContext.newInstance(String.class);
Unmarshaller unmarshaller = context.createUnmarshaller();
String response = (String) unmarshaller.unmarshal(streamWrapper.getStream());
正常工作