java - 解码简单 xml

标签 java xml jaxb

我有简单的架构:

<?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 架构生成了 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());

当然不行((

最佳答案

假设您的 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 类。

关于java - 解码简单 xml,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12708615/

相关文章:

java - 如何使用 Apache POI 替换 Powerpoint 幻灯片图中的 DataXML

ruby-on-rails - xml到ruby中的数组

java - AES加密测试(android)

java - 如何使 ICS 和 Gingerbread 中的选项卡看起来相同?

c++ - 在 xerces C++ 中使用内存模式验证 xml 文件

java - 为对象显示 null -JSON- JAXB

rest - 使用 JAX-RS 编码列表<String>

java - 使用 Jackson 解析器获取整个 JSON 对象

java - Mule - 从 java 类的 onCall() 方法内部调用 Controller

java - 编码和解码JAXB或org.exolab.castor.xml哪个更好