我刚刚检查了你的WADL,看起来还不错,有一些小错误,但没有什么可以指出你的错误。此外,我还使用了命令行工具wadl2java;
wadl2java -d /output/dir -interface /input/wadl/application.wadl
这里是修正后的WADL;
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<application xmlns="http://wadl.dev.java.net/2009/02" xmlns:ns1="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators">
<grammars>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" targetNamespace="http://services.test.com/schema/bs/bom/v01/GetAllTypeDesignators">
<xs:element name="dataResponse" type="ns1:dataResponse"/>
<xs:complexType name="dataResponse">
<xs:sequence>
<xs:element name="param1" type="xs:int"/>
<xs:element name="param2" type="xs:string" nillable="true" minOccurs="0" maxOccurs="unbounded"/>
</xs:sequence>
</xs:complexType>
</xs:schema>
</grammars>
<resources base="http://localhost:8082">
<resource path="getData" id="com.test.services.schema.maindata.v1.MainData">
<resource path="/retrieve/" >
<method name="GET" id="retrieveDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/delete/" >
<method name="DELETE" id="deleteDataOperation">
<request>
<param type="xs:int" style="query" name="id"/>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/insert/" >
<method name="POST" id="insertDataOperation">
<request>
<representation mediaType="*/*">
<param name="message" style="plain" type="xs:string" />
</representation>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
<resource path="/update/" >
<method name="PUT" id="updateDataOperation">
<request>
<representation mediaType="*/*">
<param name="message" style="plain" type="xs:string" />
</representation>
</request>
<response>
<representation mediaType="application/json" element="ns1:dataResponse"/>
</response>
</method>
</resource>
</resource>
</resources>
</application>
你应该把你的
MainData.xsd
,我敢打赌,XSD内部依赖于您的错误。
更新:
如果在“representation”中使用参数名称,则参数名称必须是参数类型的小写字母。我刚刚检查了wadl2java的源代码(cxf-tools-wadlto-jaxrs-3.0.1-sources.jar),并得出结论,需要修改生成器。上课时出现问题
org.apache.cxf.tools.wadlto.jaxrs.SourceGenerator:1044
看起来像
elementParamName = elementParamType.toLowerCase();
你应该在
Apache CXF jira
或自行修改代码。
另一种方法是设置
message
参数为
@QueryParam
,您可以通过替换;
<representation mediaType="*/*">
<param name="message" style="plain" type="xs:string" />
</representation>
用这个;
<param name="message" style="query" type="xs:string" />
但在这种情况下,您的接口方法看起来像;
@POST
@Produces("application/json")
@Path("/insert/")
DataResponse insertDataOperation(@QueryParam("message") String message);
希望有帮助。