2012-02-12 140 views
0

我已经编写了一个与两个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代理类(使用适当的注释)可能更容易。

问题:

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

关于第3点和第4点:您必须管理REST API网址。例如,对于初始版本,您将拥有'/ myservice/1.0.0/getlist' URL。 – 2012-02-13 00:51:56

回答

0

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

+0

您是否需要手动生成XSD文件? – craig 2012-05-31 12:52:08

+1

是的。但是接下来我使用Maven插件从XSD生成Java代码。我的理解是,你也可以走另一条路。您可以编写Java代码,然后从中生成您的XSD。我个人从来没有这样做过。 – mark 2012-06-01 10:39:34

+0

我希望实现(在我的情况下,泽西岛)将能够动态生成XSD,并有一个选项来缓存它以获得更好的性能。 – craig 2012-06-01 11:40:40