2016-04-22 72 views
0

我尝试用JSON表示自动生成带有语法的WADL,但它不能完全正常工作。用于JSON表示的语法的WADL

代码:

JAX-B模型类:

@XmlRootElement(namespace = "http://www.test.com/test") 
@XmlAccessorType(value = XmlAccessType.FIELD) 
public class TestModel { 

    @XmlElement(required = true) 
    private String id; 

    @XmlElement 
    private String name; 
} 

JAX-RS资源类:

@Path("test") 
public class TestResource { 

    @POST 
    @Consumes(MediaType.APPLICATION_JSON) 
    public void create(TestModel testModel) { 
     // some code 
    } 
} 

CXF配置:

<jaxrs:server address="/rest/1" id="test" staticSubresourceResolution="true"> 
    <jaxrs:serviceBeans> 
     <ref bean="testResource" /> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" /> 
    </jaxrs:providers> 
</jaxrs:server> 

WADL:

<?xml version="1.0"?> 
<application xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://wadl.dev.java.net/2009/02"> 
    <grammars> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com/test" targetNamespace="http://www.test.com/test" elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
      <xs:import/> 
      <xs:element type="testModel" name="testModel"/> 
     </xs:schema> 
     <xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns="http://www.test.com/test" targetNamespace="http://www.test.com/test" elementFormDefault="unqualified" attributeFormDefault="unqualified"> 
      <xs:complexType name="testModel"> 
       <xs:sequence> 
        <xs:element type="xs:string" name="id"/> 
        <xs:element type="xs:string" name="name" minOccurs="0"/> 
       </xs:sequence> 
      </xs:complexType> 
     </xs:schema> 
    </grammars> 
    <resources base="http://localhost:8080/test-app/services/rest/1"> 
     <resource path="/test"> 
      <method name="POST"> 
       <request> 
        <representation mediaType="application/json"/> 
       </request> 
       <response status="204"/> 
      </method> 
     </resource> 
    </resources> 
</application> 

语法生成,但我缺少的元素的引用,是这样的:

<representation mediaType="application/json" element="testModel"/> 

回答

1

一个customizing of the WADL generation是neccessary。 WadlGenerator的属性linkJsonToXmlSchema添加链接。

CXF配置:

<bean id="wadlGenerator" class="org.apache.cxf.jaxrs.model.wadl.WadlGenerator"> 
    <property name="linkJsonToXmlSchema" value="true" /> 
</bean> 

<jaxrs:server address="/rest/1" id="test" staticSubresourceResolution="true"> 
    <jaxrs:serviceBeans> 
     <ref bean="testResource" /> 
    </jaxrs:serviceBeans> 
    <jaxrs:providers> 
     <bean class="com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider" /> 
     <ref bean="wadlGenerator" /> 
    </jaxrs:providers> 
</jaxrs:server> 

参见:CXF – Missing WADL method parameter element types with JSON JAX-RS services

更新:

由于3.1.X linkJsonToXmlSchema已被弃用。

0

https://issues.apache.org/jira/browse/CXF-5479引用Sergey Beryozkin

在3.0.1 “linkJsonToXmlSchema” 已被弃用,因此插件支持新的 “linkAnyMediaTypeToXmlSchema”,

所以你应该使用:

<property name="linkAnyMediaTypeToXmlSchema" value="true" /> 
+0

@谢谢,我会试试看。如果它有效,我会回来并且提出你的答案。 – dur