我已经编写了一个与两个Web服务交互的Jersey客户端应用程序,一个是REST,另一个是SOAP。我使用REST服务提供的员工数据来创建具有SOAP服务的新用户。REST风格的web服务代理类
REST服务是一个JAX-RS(新泽西州)的应用程序,返回一个Employee实体:
@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代理类(使用适当的注释)可能更容易。
问题:
- 不JAX-RS(特别是新泽西州,在我的情况)有一个机制来揭露一个实体的模式定义(XSD格式)? WADL文件不包括这种类型的信息。
- 虽然我可以手动创建模仿Employee资源类的POJO类表示,但我应该使用'工具'。我有什么选择呢?
- 随着时间的推移,我可能需要向Employee实体添加其他元素。这是否意味着需要创建新版本的RESTful服务?
- 假设Jersey可以被配置为自动生成并公开模式定义,并且如果Employee实体实现一个接口以防止未经授权的更改,那么对Employee的更改将会更改模式定义?
关于第3点和第4点:您必须管理REST API网址。例如,对于初始版本,您将拥有'/ myservice/1.0.0/getlist' URL。 – 2012-02-13 00:51:56