无法从wadl为jersey客户端生成void方法

时间:2012-03-29 17:23:31

标签: rest jersey void wadl

我正在使用运动衫。 我有休息方法:

@PUT
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/create-profile")
public void createProfile (Profile profile) throws UnableTransferToEntity {
    EntityManager em = emf.createEntityManager();
    try{
        em.getTransaction().begin();
        em.persist(EntityConversionUtils.transformReporterProfileToSimpleProfileEntity(profile));
        em.getTransaction().commit();
    }finally{
        em.close();
    }
}

为此方法生成的wadl部分:

<resource path="/create-profile">
            <method id="createProfile" name="PUT">
                <request>
                    <representation mediaType="application/json"/>
                    <representation mediaType="application/xml"/>
                </request>
            </method>
        </resource>

我正在使用maven-plugin来生成客户端:

<groupId>org.jvnet.ws.wadl</groupId>
            <artifactId>wadl-maven-plugin</artifactId>
            <version>1.1-SNAPSHOT</version>

问题是没有生成void方法(putApplicationXml Asvoid ),只有生成期望响应的方法。当我尝试使用它们时,即使使用Void.class,我也会捕获异常(返回的响应状态为204 No Content)。

如果rest方法包含@QueryParam:

@DELETE
@Consumes({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML})
@Path("/remove-profile")
public void removeProfile (@QueryParam("id") final int id){
    EntityManager em = emf.createEntityManager();
    SimpleProfileEntity simpleProfileEntity = em.find(SimpleProfileEntity.class, id);

    new NotificationService().removeProfile(simpleProfileEntity.getNotificationProfile().getId());

    try{
        em.getTransaction().begin();
        em.remove(simpleProfileEntity);
        em.getTransaction().commit();
    }finally{
        em.close();
    }
}

然后wadl看起来像:

<resource path="/remove-profile">
            <method id="removeProfile" name="DELETE">
                <request>
                    <param xmlns:xs="http://www.w3.org/2001/XMLSchema" name="id" style="query" type="xs:int"/>
                </request>
            </method>
        </resource>

如您所见,它包含“param”节点。 此条目的void client方法生成良好。

如何为CreateProfile生成void方法?

1 个答案:

答案 0 :(得分:0)

响应类型205是正确的。

我遇到了同样的问题,它发现它是客户端部分的问题,但不是服务器部分的问题。

我使用resource.type(MediaType.APPLICATION_JSON).put(String.class, datenJson);并获得相同的例外情况。

在删除预期的返回类型(put(String.class)的第一个paremter)后它起作用了:

resource.type(MediaType.APPLICATION_JSON).put(datenJson);

因此,如果您没有任何回复,请不要指定预期的响应类型。