Tag: jax rs

JAXB纯粹从接口编组

我有一个复杂的Java接口层次结构,我想用JAXB编组(而不一定是unmarshal)。 这些接口表示将从JAX-RS REST API返回的对象,如XML,JSON,YAML等。(我正在使用RestEasy,它可以用XML以外的格式封送JAXB注释类型。) 问题似乎是JAXB基本上是面向类的。 我已经对JAXB和接口的困难进行了大量的网络研究,最接近的解决方案是MOXy JAXB – 映射接口到XML和JAXB以及接口前端模型 。 但是,我有两个主要问题:a)我想在接口方面注释/工作,而不是具体的类(其中将有多个实现并包含不应该被编组的重要的其他状态),以及b)我有多级接口inheritance。 这是接口的示例,减去目前为止的任何JAXB注释: interface Uuided { UUID getId(); } interface Named { String getName(); } interface Component extends Uuided, Named { Map getAttributes(); } interface Attribute extends Named { Type getType(); Object getValue(); } interface ComponentAttribute extends Attribute { Component getDeclaringComponent(); } 理想情况下,这会产生类似于: green 很明显,在摘要中,这会导致诸如确定最衍生的注释界面之类的问题,理论上这些界面可能不止一个。 但是,在我的情况下,我认为具体类只实现了一个应该封送的单个接口。 […]

如何在JAX-RS中手动映射枚举字段

如何映射一个简单的JSON对象{“status” : “successful”}自动映射到JAX-RS中的Java Enum? public enum Status { SUCESSFUL (“successful”), ERROR (“error”); private String status; private Status(String status) { this.status = status; } } 如果您需要更多详细信息,请随时问:)

如何将EJB 3.1公开为REST Web服务?

在Adam Bien的博客上阅读文章时,我在使用EJB 3.1时发现了java restful中的一个新function。 问题是Stateless和Singleton bean可以作为root资源公开。 但是怎么样? 我试着这样做: @Stateless @LocalBean @Path(“Hybrid”) public class RESTEJBSample { @GET @Path(“/demo”) @Produces(MediaType.TEXT_PLAIN) public String something() { return “I am a Hybrid!!!”; } } 当我调用URL http:// localhost:8080 / HybridSample / resources / Hybrid / demo时,我收到404错误。 为了确保JAXRS正在我的项目中工作,我创建了一个简单的pojo资源,以测试它是否正常工作。 @Path(“/genericresource”) public class GenericResource { @GET @Path(“/samplemethod”) @Produces(MediaType.TEXT_PLAIN) public String saySomething() { return “Something!”; […]

Marshal / Un marshal使用JAXB在Jersey JAX-RS中列出对象

早上好。 今天早上,当我通过Jersey Entity提供者MessageBodyReader和MessageBodyWriter我遇到了以下问题。 我想编写一个资源方法和客户端,它返回一个自定义对象列表,媒体类型是application/xml 。 所以我想使用JAXB(我是JAXB的新手)。 我能够通过编写自己的扩展MessageBodyReader和MessageBodyWriter来实现这一目标。 但我害怕跟随的方式。 看看我实施的方式: 资源方法: @Path(“productlist/xml”) @GET public RetObjects getProductsXml(){ List pList = new ArrayList(); pList.add(new Product(“1″,”Dell latitude E6000”,2900,500)); pList.add(new Product(“2″,”Xperia Z2″,549,400)); RetObjects obj = new RetObjects(); obj.setObject(pList); return obj; } 我的自定义对象: @Entity @Table (name=”PRODUCT”) @XmlRootElement(name=”product”) public class Product { @Id @Column(name = “CODE”) private String code; … // rest […]

自动级联bean-validation递归validation,@ Valid注释

我在Jersey中的REST资源端点validation我的POJO: public class Resource { @POST public Response post(@NotNull @Valid final POJO pojo) { … } } public class POJO { @NotNull protected final String name; @NotNull @Valid protected final POJOInner inner; … } public class POJOInner { @Min(0) protected final int limit; … } 这似乎工作正常。 但是,仅当字段inner具有@Valid注释时,才会validation@Min(0)注释。 将@Valid注释添加到不是基元的每个字段是不对的。 有没有办法告诉beanvalidation器自动递归继续validation,即使没有@Valid注释? 我希望我的POJO如下: public class POJO { @NotNull […]

JAX-RS客户端线程安全吗?

在Java EE7中,JAX-RS Client API提供了一个用于访问任何REST资源的高级API。 根据文档, “客户端是管理客户端通信基础设施的重量级对象。初始化以及客户端实例的处理可能是一项相当昂贵的操作。因此建议仅构建少量客户端实例在申请中。“ 为了避免频繁创建客户端,我将缓存客户端实例并重用它。 客户端实例线程是否安全,因为并发线程可以使用它? 如果我只创建客户端实例并将其重用于所有请求,是否存在任何性能问题?

JAX-RS资源生命周期性能影响

我知道默认情况下,JAX-RS端点生命周期是每个请求一次 ,因此可以将请求特定信息注入到实例中。 我们还可以创建一个端点Singleton,意味着每个应用程序一次 ,其中请求特定信息不能注入到实例中,而是可以将其注入到请求的方法中。 1.所以我想知道哪种方法在性能方面更好 ,无论是每次请求还是每次应用一次 。 2.我还想了解这些方法的优缺点,以及注入请求的具体信息 3.您希望在API应用程序中使用哪种方法 注意:到目前为止,我一直在使用按请求一次的方法,但我总是怀疑这是否有效,绝对是使编码更容易和可重用。

同一WAR中的多个JAX-RS应用程序

我有 @ApplicationPath(“/resourcesP”) public class RestfulPrediction extends Application { @Override public Set<Class> getClasses() { Set<Class> set = new HashSet<Class>(); set.add(PredictionsRS.class); return set; } } 和 @ApplicationPath(“/resourcesA”) public class RestfulAdage extends Application { @Override public Set<Class> getClasses() { Set<Class> set = new HashSet<Class>(); set.add(Adages.class); return set; } } 两个不同的ApplicationPath和类如下。 @Path(“/”) public class service.Adages {} @Path(“/”) public class […]

如何组织提供REST Web服务的JEE6企业应用程序?

从一个月前开始,我正在努力学习宁静的网络服务。 现在我练习了语法并理解了概念,我决定创建一个包含EJB,JPA和REST的非常简单的企业应用程序。 我正在努力尝试了解组织这种系统的最佳方法。 如果有经验的人可以给我一些关于什么是最佳实践的技巧,我会非常感激,以及如何解决我当前的问题。 我来告诉你这个形象吧。 抱歉,我无法获得更好的分辨率(使用Ctrl +鼠标向上滚动缩放): 如您所见,这是一个非常简单的企业应用程序,它有2个模块。 此应用程序不使用CDI(我希望在没有CDI帮助的情况下实现我的目标) 当某个客户端(任何可互操作的客户端)发送带有某些参数的@GET时,REST服务应将这些参数传递给EJB模块,该模块将在数据库中搜索并发回适当的数据。 最后,服务将在JAXB的帮助下自动编组,并将.XML发送回客户端。 我的问题如下: 我得到一个ClassCastException,因为它在EJB模块中的实体与WebModule中的JAXB类不兼容(即使它们的变量是相同的) 我不知道应该如何组织事情,所以前端可以整理和解组这些实体。 应该是实体类在前端与JAXB映射相结合吗? 如果那时,就不会真正需要EJB模块。 但问题是,我想要EJB模块,因为我经常在那里进行CRUD操作。 将EJB暴露为REST Web服务(制作混合)怎么样? 你认为这是个好主意吗? 它怎么能帮到我? 再次,如果我在Web模块中创建JAXRS + EJB的混合,我必须在前端创建我的JPA实体,这是我以前从未做过的事情。 你认为这是一个好习惯吗? 你有什么建议? 使用REST Web服务的企业应用程序的组织方式通常是什么?

使用JaxRS自定义JSON序列化

在webservice调用中,我想用这个JSON结构返回我的对象​​。 { “date” : “30/06/2014”, “price” : { “val” : “12.50”, “curr” : “EUR” } } 我想将这个JSON代码映射到这个Java结构(使用joda-time和joda-money ): public class MyResponse { LocalDate date; Money price; } 我的网络服务目前看起来像这样: @javax.ws.rs.POST @javax.ws.rs.Path(“test”) @javax.ws.rs.Produces({MediaType.APPLICATION_JSON}) @javax.ws.rs.Consumes({MediaType.APPLICATION_JSON}) public MyResponse test(MyRequest request) { MyResponse response = new MyResponse(); response.setDate(LocalDate.now()); response.setMoney(Money.parse(“EUR 12.50”)); return response; } 所以我的问题是:我在哪里注册一个自定义处理程序来格式化我想要的日期以及货币表示?