创建XSD并将其链接到WADL

问题描述

| 我正在使用JAX-RS创建一些服务,这些服务需要将任意复杂的对象作为参数,而不仅仅是整数和字符串之类的原语。关于CXF邮件列表的讨论表明,在这种情况下,仅将包装对象用作单个参数。 我关心的是如何记录服务的输入格式?如果创建的服务类似于以下内容
@POST
@Produces(\"application/json\")
@Consumes(\"application/json\")
@Path(\"oneParam\")
public ComplexObject2 myServiceMethod(ComplexObject1 obj) {
    Foo f = obj.foo
    Bar b = obj.bar
    ...
}
CXF生成自动生成的WADL将仅生成以下内容
<resource path=\"/oneParam\">
   <method name=\"POST\">
      <request>
            <representation mediaType=\"application/json\"/>
      </request>
      <response>
             <representation mediaType=\"application/json\"/>
       </response>
   </method>
</resource> 
它不包含有关请求或响应实际包含的信息。 CXF邮件列表上的谢尔盖(Sergey)说可以将模式链接到表示,但是我应该怎么做呢?以及如何创建XSD? (P.S.使用POST来获得幂等资源可能不是RESTful的,但这在这里并不重要,因为我们本质上是使用Json进行RPC。这或多或少是现有基于SOAP的api的1:1克隆。)     

解决方法

        可以将XSD文件链接到WADL文件,然后在表示中引用XML元素以获取请求和响应。但是,由于它是XML模式,因此不适用于JSON表示形式。 要将XSD链接到WADL文件,请在文件顶部创建一个
grammars
元素,然后位于主
resources
元素之前。
<grammars>
    <include href=\"myapp.xsd\"/>
</grammars>
然后添加对XML元素的引用,如下所示(使用示例的修改版本):
<resource path=\"/oneParam\">
   <method name=\"POST\">
      <request>
            <representation mediaType=\"application/xml\" element=\"myapp:oneParamRequest\" />
      </request>
      <response>
             <representation mediaType=\"application/xml\" element=\"myapp:oneParamResponse\" />
       </response>
   </method>
</resource>
前缀“ 6”在XSD中定义,也可以在WADL文件中使用。 我不知道将CXF配置为自动执行此操作。我对Jersey的经验与之类似,我们将生成的WADL用作以后进行手动编辑的起点。