【问题标题】: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>