RESTful Web服务代理类

时间:2012-02-12 19:23:32

标签: jaxb jax-ws jpa-2.0 jersey business-objects-sdk

我编写了一个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类的相应setter,但在Jersey客户端应用程序中创建Employee代理类(带有相应的注释)可能更容易。

问题:

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

1 个答案:

答案 0 :(得分:0)

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