我正在使用 JBoss Forge 为我的应用程序生成 REST API。已使用以下命令为名为 Message 的实体生成端点(包名已混淆):
rest endpoint-from-entity x.x.x.Message --contentType application/xml
这将产生一个带有以下创建方法的 MessageEndpoint.java:
@Stateless @Path("/messages") public class MessageEndpoint { @PersistenceContext(unitName = "forge-default") private EntityManager em; @POST @Consumes("application/xml") public Response create(Message entity) { em.persist(entity); return Response.created(UriBuilder.fromResource(MessageEndpoint.class).path(String.valueOf(entity.getId())).build()).build(); }
……
要为端点创建测试,我使用了以下命令:
arquillian create-test --class x.x.x.MessageEndpoint.java --enableJPA
然后,我在生成的测试类 MessageEndpointTest.java 中扩展了默认测试,以显示 Response 对象上的 getEntity() 返回 null:
@RunWith(Arquillian.class)
public class MessageEndpointTest
{
@Inject
private MessageEndpoint messageEndpoint;
@Deployment
public static JavaArchive createDeployment()
{
return ShrinkWrap.create(JavaArchive.class, "test.jar")
.addClass(MessageEndpoint.class)
.addClass(Message.class)
.addAsManifestResource("META-INF/persistence.xml", "persistence.xml")
.addAsManifestResource(EmptyAsset.INSTANCE, "beans.xml");
}
@Test
public void testIsDeployed()
{
Assert.assertNotNull(messageEndpoint);
Response r = messageEndpoint.create(new Message());
Assert.assertNotNull(r.getEntity()); // getEntity returns null
}
}
新消息被应用服务器接收并持久化在数据库中。
在调试服务器时,我可以看到实体确实获得了一个 ID,该 ID 作为创建Response
.
应用程序服务器日志中没有错误。
我在 Eclipse Kepler 中使用 JBoss EAP 6.1 和 JBoss Forge 1.3.3 版。
任何人都可以发现问题所在或提供一些调试建议吗?