簡體   English   中英

WADL具有用於JSON表示的語法

[英]WADL with grammar for JSON representation

我嘗試為帶有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"/>

必須自定義WADL生成 該物業linkJsonToXmlSchema的的WadlGenerator添加鏈接。

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 – JSON JAX-RS服務缺少WADL方法參數元素類型

更新:

從3.1.x linkJsonToXmlSchema ,不推薦使用linkJsonToXmlSchema

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

在3.0.1版本中,“ linkJsonToXmlSchema”已被棄用,因此該插件支持新的“ linkAnyMediaTypeToXmlSchema”,

所以你應該使用:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM