1

我有简单的架构:

<?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());

当然不行((

4

3 回答 3

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类。

于 2012-10-03T13:18:58.270 回答
0

你还没有提到你的RootGenerateClass这里。解组也意味着将 XML 内容转换为 JAVA 类对象,并且该类应该具有与 XML 模式中相同的数据成员。因此,在第二种情况下,解组到String类对象将不起作用。

于 2012-10-03T13:06:38.387 回答
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());

好好工作

于 2012-10-10T15:05:33.340 回答