0

我编写了一个 Jersey 客户端应用程序,它与两个 Web 服务交互,一个是 REST,另一个是 SOAP。我使用 REST 服务提供的员工数据通过 SOAP 服务创建一个新用户。

REST 服务是一个返回 Employee 实体的 JAX-RS (Jersey) 应用程序:

@Entity
@Table(name = "EMPLOYEE_TABLE")
@XmlRootElement
public class Employee implements Serializable {
  ...
}

我没有为实体类明确创建模式定义。

GET 请求返回 Employee 实体的表示:

GET /employees/100

<Employee id='100' providerId='3345'>
  <Link type="application/xml" href="/employees/100" rel="self"/>
  <Name>Doe, Dr. John</Name>
  <Departments>
    <Department id='10'><Name>Emergency Medicine</Name></Department>
    <Department id='56'><Name>Behavioral Medicine</Name></Department>
  </Departments>
</Employee>

SOAP 服务(BusinessObjects Enterprise Web 服务 SDK)提供 Java 客户端以简化其使用。

虽然我可以解析 Employee 实体的 XML 表示并将其分配给 User 类的适当设置器,但在我的 Jersey 客户端应用程序中创建一个 Employee 代理类(带有适当的注释)可能会更容易。

问题:

  1. JAX-RS(特别是泽西岛,在我的例子中)是否有一种机制来公开实体的模式定义(XSD 格式)?WADL 文档不包含此类信息。
  2. 虽然我可以手动创建一个模仿 Employee 资源类的 POJO 类表示,但我可能应该使用“工具”。我有什么选择?
  3. 随着时间的推移,我可能需要向 Employee 实体添加其他元素。这是否意味着需要创建新版本的 RESTful 服务?
  4. 假设 Jersey 可以配置为自动生成和公开模式定义,并且对 Employee 的更改会改变模式定义,那么 Employee 实体是否应该实现一个接口来防止未经授权的更改?
4

1 回答 1

0

关于问题 1,如果您的 XSD 部署在您的 web 应用程序中,您可以在浏览器中导航到它。例如,在我的 webapp 中,我有一个/xsd包含我的 XSD 的文件夹。当应用程序运行时,我可以将浏览器指向http://localhost:8080/<app_name>/xsd/<xsd_name>.xsd并查看 XSD。

于 2012-05-30T21:02:48.457 回答