【问题标题】:Modeling XML requests and responses for Google Sheets API?为 Google Sheets API 建模 XML 请求和响应?
【发布时间】:2016-03-29 22:23:21
【问题描述】:

我想将更新 Google 电子表格中的行的功能添加到我的网络应用程序。看起来Google Sheets API 是要走的路。它是一个主要由 XML 驱动的 RESTful Web 服务。我想将 XML 请求和响应建模为 Java 对象(通过 JAXB 解组/编组)。但是,我找不到任何描述它们的 WADL 或 XSD 文件。它们存在吗?有什么聪明的方法可以发现它们吗?

如果它们不存在,生成它们的好方法是什么?通过 xml-to-xsd 工具运行示例 xml 响应,然后让 JAXB 创建 Java 类?

注意:Google 提供了一个 Java 客户端库,但我想避免在项目中引入更多依赖项。我的用例似乎很简单,不需要它。

【问题讨论】:

    标签: xml web-services jaxb google-spreadsheet-api wadl


    【解决方案1】:

    经过大量挖掘,我找不到任何描述服务、请求和响应的 WADL/XSD 文件。最接近的发现是发现 Google Sheets API 基于 Atom 提要格式 (http://www.w3.org/2005/Atom)。但是通过 JAXB 运行它的 XSD 会产生很多额外的东西,我放弃了这条路线。

    我编写了一个简单的 XSD 来满足我的 Java XML 模型要求。这些模型足以读取和添加/更新工作表中的行。

    <?xml version="1.0" encoding="UTF-8"?>
    <xs:schema attributeFormDefault="unqualified"
        elementFormDefault="qualified" 
        targetNamespace="http://www.w3.org/2005/Atom"
        xmlns="http://www.w3.org/2005/Atom"
        xmlns:xs="http://www.w3.org/2001/XMLSchema" 
        xmlns:gsx="http://schemas.google.com/spreadsheets/2006/extended"
        xmlns:jaxb="http://java.sun.com/xml/ns/jaxb"
        jaxb:version="2.1">
    
    <xs:element name="feed">
        <xs:annotation>
            <xs:appinfo>
                <jaxb:class name="GoogleSheetFeed" />
            </xs:appinfo>
        </xs:annotation>
        <xs:complexType>
            <xs:sequence>
                <xs:element name="id" type="xs:string" />
                <xs:element name="title" type="xs:string" />
                <xs:element maxOccurs="unbounded" name="entry" type="GoogleSheetFeedEntry" />
            </xs:sequence>
        </xs:complexType>
    </xs:element>
    
    <xs:element name="entry" type="GoogleSheetFeedEntry" />
    
    <xs:complexType name="GoogleSheetFeedEntry">
        <xs:sequence>
            <xs:element name="id" type="xs:string" />
            <xs:element name="title" type="xs:string" />
            <xs:element maxOccurs="unbounded" name="link">
                <xs:complexType>
                    <xs:attribute name="href" type="xs:string" />
                    <xs:attribute name="rel" type="xs:string" />
                    <xs:attribute name="type" type="xs:string" />
                </xs:complexType>
            </xs:element>
            <xs:any namespace="##other" minOccurs="0" maxOccurs="unbounded" processContents="lax"/>
        </xs:sequence>
    </xs:complexType>
    
    </xs:schema>
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-11-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多