Tag: jax rs

如何防止“本地事务已经有1个非XA资源”exception?

我在无状态EJB中使用2 PU,并且在一个方法上调用它们: @PersistenceContext(unitName=”PU”) private EntityManager em; @PersistenceContext(unitName=”PU2″) private EntityManager em2; @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW ) public void getCandidates(final Integer eventId) throws ControllerException { ElectionEvent electionEvent = em.find(ElectionEvent.class, eventId); … Person person = getPerson(candidate.getLogin()); … } @TransactionAttribute(TransactionAttributeType.REQUIRES_NEW ) private Person getPerson(String login) throws ControllerException { Person person = em2.find(Person.class, login); return person; } 这些方法使用REQUIRES_NEW transcaction进行注释以避免此exception。 当我从javaFX applet调用这些方法时,所有方法都按预期工作。 现在我试图从JAX-RS webservice调用它们(我没有看到任何逻辑上的区别,因为在初始上下文中查找了ejb两种情况)并且我一直得到这个exception。 […]

不能在JDK8上使用org.jvnet.jax-ws-commons.jaxws-maven-plugin

我正在使用org.jvnet.jax-ws-commons:jaxws-maven-plugin为Soap服务生成客户端存根。 升级到JDK8使此失败并出现以下错误: Failed to read schema document ‘xxx.xsd’, because ‘file’ access is not allowed due to restriction set by the accessExternalSchema property. 和类似的东西 Failed to read DTD ‘XMLSchema.dtd’, because ‘file’ access is not allowed due to restriction set by the accessExternalDTD property. 为什么这样,我该如何解决这个问题?

OffsetDateTime在GET方法中产生“没有找到类型为public javax.ws.rs.core.response的参数的注入源”

我有以下GET REST方法: import java.time.OffsetDateTime; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; import javax.ws.rs.HeaderParam; import javax.ws.rs.POST; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; import io.swagger.annotations.Api; import io.swagger.annotations.ApiOperation; import io.swagger.annotations.ApiResponse; import io.swagger.annotations.ApiResponses; import com.product.rest.api.TransactionsApi; import com.product.rest.model.Transaction; @Path(“/transactions”) @Api(description = “the transactions API”) @Consumes({ “application/json” }) @Produces({ “application/json” }) public class TransactionsApiImpl extends TransactionsApi […]

如何在Jersey客户端的DELETE请求中发送封装数据?

我在Jersey 2.x中有以下服务器端代码: @Path(“/store/remove/from/group”) @DELETE @Consumes(MediaType.APPLICATION_FORM_URLENCODED) @Produces(MediaType.TEXT_PLAIN) public Response removeStoresFromGroup(@FormParam(“storeName”) List storeNames, @FormParam(“groupName”) String groupName) { //…… } 在客户端,我想使用Jersey 2.x客户端向上述Web服务发送删除请求。 但是,从Jersey客户端API的文档中,我没有找到如何在DELETE请求中包含以下数据: WebTarget webTarget = client.target(“/store/remove/from/group”); MultivaluedMap formData = new MultivaluedHashMap(); List storeName = new ArrayList(); storeName.add(“Store1”); storeName.add(“Store2”); storeName.add(“Store3”); formData.addAll(“storeName”, storeName); formData.add(“groupName”, “Group A”); Response response = webTarget.request().accept(MediaType.TEXT_PLAIN).delete(); //The delete() method doesn’t take any entity body in […]

具有Resteasy的多个端点

我在一个应用程序中有两个单独的REST服务。 让我们说一个主要的“人”服务和一个辅助“管理”服务。 我想要的是在服务器上的不同路径中公开它们。 我正在使用JAX-RS,RESTEasy和Spring。 例: @Path(“/people”) public interface PeopleService { // Stuff } @Path(“/management”) public interface ManagementService { // Stuff } 在web.xml我目前有以下设置: org.jboss.resteasy.plugins.server.servlet.ResteasyBootstrap org.jboss.resteasy.plugins.spring.SpringContextLoaderListener resteasy.servlet.mapping.prefix /public Resteasy org.jboss.resteasy.plugins.server.servlet.HttpServletDispatcher Resteasy /public/* PeopleService和ManagementService实现只是Spring bean。 上面的web.xml配置会在/public上公开它们(所以分别使用/public/people和/public/management )。 我想要实现的是在/public上/public PeopleService ,以便完整路径将成为/public/people并在/internal上公开ManagementService ,以便其完整路径将成为/internal/management 。 不幸的是,我无法更改@Path注释的值。 我该怎么做?

Jersey / JAX-RS:在响应头中返回Content-Length而不是chunked transfer encoding

我使用Jersey创建RESTful API资源,使用ResponseBuilder生成响应。 RESTful资源的示例代码: public class infoResource{ @GET @Path(“service/{id}”) @Produces({MediaType.APPLICATION_JSON, MediaType.APPLICATION_XML}) public Response getCompany(@PathParam(“id”)String id) { //company is just a POJO. Company company = getCompany(id); return Response.status(200).entity(company).build(); } } 在响应中,它在响应头中返回分块传输编码。 “Jersey world”中的正确方法是让它返回Content-Length标头而不是Transfer-Encoding: chunked响应头中的Transfer-Encoding: chunked标头?

在泽西请求中获取客户端区域设置

在Jersey(JAX-RS)请求的上下文中获取客户端区域设置的最佳和更便携的方法是什么? 我有以下代码: @GET @Produces(“text/html”) @Path(“/myrequest”) public Response myRequest(@Context HttpServletRequest request) { Locale locale = … } 请假设“请求”是由浏览器中的一些javascript代码通过调用window.location = …;

使用JAX-RS在REST API中进行error handling

任务:我没有在我的堆栈跟踪中接收一般的HTTP 500 Internal Server Error ,而是在客户端上同样可怕的堆栈跟踪,我希望看到我的另一个状态代码(例如403 )的自定义消息,对于开发人员来说,它会更加清晰,发生了什么事。 并向用户添加一些关于exception的消息。 以下是我的应用程序中的几个更改的类: 服务器部分: AppException.class – 我的所有服务器响应exception(在回馈客户端之前)我想转换为此exception。 有点标准实体类 public class AppException extends WebApplicationException { Integer status; /** application specific error code */ int code; /** link documenting the exception */ String link; /** detailed error description for developers */ String developerMessage; public AppException(int status, int code, String message, String […]

从现有REST API生成Swagger文档

鉴于现有的JAX-RS注释API接受并返回带有jackson-annotated类型的json,有没有办法可以生成一些YAML Swagger文档? 我的计划B是编写一些使用reflection来查找REST注释类型的代码,创建其参数和返回的哈希映射,然后为Jackson注释抓取这些类,并以这种方式生成文档。 我更愿意使用已经存在的解决方案来编写一次性的东西。 我发现这个Swagger模块声称它可以解析Jackson的配置( https://github.com/FasterXML/jackson-module-swagger ),但我不太了解Swagger了解哪些模块以及我是否可以使用它来从现有代码生成Swagger。

使用jersey获取所有html表单参数名称和值

我有一个包含这样的元素的html表单 在服务器端,我使用Jersey实现来捕获表单名称和值。 有没有办法在这样的单个地图中捕捉上述所有内容 Name1 ==> Val1 Name2 ==> Val2 Name3 ==> Val3 我知道使用@FormParam,我可以捕获变量中的表单值。 但我需要捕获表单元素名称以及值。 任何帮助表示赞赏。