【问题标题】:WADL with grammar for JSON representation带有 JSON 表示语法的 WADL
【发布时间】:2016-04-22 12:45:33
【问题描述】:

我尝试使用 JSON 表示的 JAX-B 对象的语法自动生成 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"/>

【问题讨论】:

    标签: java json jaxb jax-rs cxf


    【解决方案1】:

    customizing of the WADL generation 是必需的。 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 已弃用。

    【讨论】:

      【解决方案2】:

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

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

      所以你应该使用:

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

      【讨论】:

      • @谢谢,我会试试的。如果它有效,我会回来支持你的答案。
      猜你喜欢
      • 1970-01-01
      • 2017-07-03
      • 2017-01-12
      • 1970-01-01
      • 1970-01-01
      • 2016-10-02
      • 1970-01-01
      • 1970-01-01
      • 2016-11-21
      相关资源
      最近更新 更多