WADL(泽西岛)中的空语法



我正在使用Jersey JAX-RS开发服务器。当我访问应用程序 WADL 时,它包含所有操作的描述,但没有对 XML 架构的引用(语法元素为空)。

这是我所拥有的简化版本。 XML 架构:

<?xml version="1.0" encoding="UTF-8"?>
<xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema">
<xsd:element name="parent" type="Parent" />
<xsd:complexType name="Parent">
<xsd:sequence>
<xsd:element name="son" minOccurs="0" maxOccurs="unbounded">
<xsd:complexType>
<xsd:attribute name="name" type="xsd:string" use="required" />
</xsd:complexType>
</xsd:element>
</xsd:sequence>
<xsd:attribute name="name" type="xsd:string" use="required"/>
</xsd:complexType>

这里是一个处理请求.java,类 Parent 是由 JAXB 自动生成生成的。代码可以很好地编译和处理请求,如果有语法错误,那只是因为我复制了代码的最小部分。

@Path("/parents")
public class ParentAPI {
private static ObjectFactory jaxbOf = new ObjectFactory();
@GET
@ApiOperation(value = "getParent")
@ApiResponses(value = { @ApiResponse(code = 200, message = "OK"),
@ApiResponse(code = 500, message = "Internal Server Error") })
@Produces({ MediaType.APPLICATION_XML, MediaType.TEXT_XML })
@Path("/{name}")
public JAXBElement<Parent> getParent(@PathParam("name") String name) {
Parent parent = new Parent();
//.....
return jaxbOf.createParent(parent);
}
@POST
@ApiOperation(value = "postParent")
@ApiResponses(
value = { @ApiResponse(code = 201, message = "Created"), @ApiResponse(code = 400, message = "Bad request"),
@ApiResponse(code = 500, message = "Internal Server Error") })
@Produces({ MediaType.TEXT_XML })
@Consumes({ MediaType.APPLICATION_XML })
public Response postNode(JAXBElement<Parent> jaxbParent, @Context UriInfo uriInfo) {
Parent parent = jaxbParent.getValue();
//.....
UriBuilder builder = uriInfo.getAbsolutePathBuilder();
URI u = builder.path(parent.getName()).build();
return Response.created(u).build();
}
}

我正在使用 JAXBElement<> 包装器,因为我在模式中命名了 complexType。此外,我正在使用实现MessageBodyReader<JAXBElement<?>的验证器。

这就是网络.xml

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
id="WebApp_ID" version="3.1">
<display-name>Example</display-name>
<welcome-file-list>
<welcome-file>index.html</welcome-file>
</welcome-file-list>
<servlet>
<servlet-name>Jersey RESTful Application</servlet-name>
<servlet-class>org.glassfish.jersey.servlet.ServletContainer</servlet-class>
<init-param>
<param-name>jersey.config.server.provider.packages</param-name>
<param-value>io.swagger.jaxrs.listing, it.example</param-value>
</init-param>
<load-on-startup>1</load-on-startup>
</servlet>
<servlet>
<servlet-name>Jersey2Config</servlet-name>
<servlet-class>io.swagger.jersey.config.JerseyJaxrsConfig</servlet-class>
<init-param>
<param-name>api.version</param-name>
<param-value>1.0.0</param-value>
</init-param>
<init-param>
<param-name>swagger.api.basepath</param-name>
<param-value>http://localhost:8080/Example/rest</param-value>
</init-param>
<load-on-startup>2</load-on-startup>
</servlet>
<servlet-mapping>
<servlet-name>Jersey RESTful Application</servlet-name>
<url-pattern>/rest/*</url-pattern>
</servlet-mapping>
</web-app>

现在,我试图将 xsd 放入 WebContent 中,但仍然没有运气,它没有出现在 WADL(自动生成)中。我正在使用 ANT 进行编译和打包。

我仔细搜索了其他问题,有人没有答案,其他人很旧,并使用我没有的 Servlet 库提出解决方案(我无法添加,因为它是一个作业,我们有一组可以使用的库),看起来在泽西岛默认情况下模式应该在 WADL 中,所以我真的不明白出了什么问题。

问题是我使用的是命名的复杂类型,这导致我使用 JAXBElement<>包装器等。 消除了命名的复杂类型,问题得到了解决。

相关内容

  • 没有找到相关文章

最新更新