标签: jax-rs

JAXB编组对象的问题:javax.xml.bind.JAXBException:class ...或者它的任何超类都是这个上下文已知的

在我的JAX-RS项目(Jersey)中,我遇到一个问题,即将一个JAXB注释的对象编组为JSON.这是我在日志中看到的错误消息:

严重:内部服务器错误javax.ws.rs.WebApplicationException:javax.xml.bind.JAXBException:类com.dnb.applications.webservice.mobile.view.CompaniesAndLocations或其任何超类都为此上下文所知.

这是否指出任何具体问题?我的资源有这样的方法:

@Path("/name/{companyname}/location/{location}")
@Produces("application/json; charset=UTF-8;")
@Consumes("application/json")
@POST
public Viewable findCompanyByCompanyNameAndLocationAsJSON(@PathParam("companyname") String companyName,
        @PathParam("location") String location, CriteriaView criteria) {
    criteria = criteria != null ? criteria : new CriteriaView();
    criteria.getKeywords().setCompanyName(companyName);
    return getCompanyListsHandler().listsByCompanyNameAndLocation(criteria, location);
}
Run Code Online (Sandbox Code Playgroud)

Viewable是一个空的界面.上面的方法返回一个类型的对象CompaniesAndLocations,定义如下:

@XmlRootElement
@XmlAccessorType(XmlAccessType.FIELD)
@XmlType(name = "companiesAndLocations", propOrder = { "count", "normalizedLocations", "companyList", "companyMap", "modifiers",
        "modifiersMap", "companyCount", "navigators" })
public class CompaniesAndLocations extends BaseCompanies implements Viewable {

    @XmlElement(name = "normalizedLocations", required = false)
    protected List<NormalizedLocation> normalizedLocations;

    public List<NormalizedLocation> getNormalizedLocations() {
        if (normalizedLocations == null) …
Run Code Online (Sandbox Code Playgroud)

jax-rs jaxb

4
推荐指数
1
解决办法
9281
查看次数

如何在REST Web服务中PUT多个查询参数

有谁知道如何在REST Web服务中PUT多个查询参数?我用java编写.我的curl示例是这样的:

curl -X PUT http://localhost:8080/project/resources/user/directory/sub-directory?name=shareuser&type=Read -v
Run Code Online (Sandbox Code Playgroud)

我的计划是:

@PUT
@Path("{user}/{directory:.+}")
public Response doshare(@PathParam("user")String name,
        @PathParam("directory")String dir,
        @QueryParam("name")String sharename,
        @QueryParam("type")String type){
    mongoDAOImpl impl=new mongoDAOImpl();
    Mongo mongo=impl.getConnection("127.0.0.1","27017");
    DB db=impl.getDataBase(mongo,"public");
    DBCollection coll=impl.getColl(db,name);
    DBCollection coll2=impl.getColl(db,"sharedb");
    shareDTO sharedto=new shareDTO();
    String authority=type.toLowerCase();
    if(authority.equals("rd")){
        sharedto.setAuthority("4");
    }else if(authority.equals("rw")){
        sharedto.setAuthority("12");
    }
    sharedto.setTargetuser(sharename);
    sharedto.setRealURI("/home/public/"+name+"/"+dir);
    sharedto.setIdentifier(name);
    sharedto.setParentURI("/home/public/"+sharename);
    boolean bool = false;
    sharefun=new sharefunction();
    if(sharefun.checksubfoldershared(coll, coll2, sharedto)){
        bool=sharefun.sharefiles(coll, coll2, sharedto);
    }else{
        System.out.println("Error");
    }
    // ...
Run Code Online (Sandbox Code Playgroud)

但我只获取名称查询参数.如何获取或如何键入curl命令以获取所有查询参数?

rest curl web-services jax-rs query-parameters

4
推荐指数
1
解决办法
4万
查看次数

除子资源之外的RESTEasy JAX-RS动态调度

RESTEasy(JAX-RS)允许通过子资源进行动态调度.例如:

POST /customers/create
{"name":"Smith","country":"jp"}
Run Code Online (Sandbox Code Playgroud)

我们可以使用根资源来处理路径"/ customers",其方法是使用没有HTTP方法但使用@Path("/ create")注释的方法.此方法返回JAX-RS查看的资源以继续处理请求.但是,此资源必须处理"/ customers/create"路径.

我有一个现有的情况,可以创建不同类型的实体:

POST /customers/create
{"name":"Smith"}

POST /locations/create
{"name":"Chicago"}
Run Code Online (Sandbox Code Playgroud)

我想基于请求正文中的附加属性添加创建任何类型实体的功能:

POST /entities/create
{"type":"customer","name":"Smith"}
Run Code Online (Sandbox Code Playgroud)

本质上,我想将请求转发到处理"POST/customers/create"的代码.我可以编写为"POST/entities/create"调用的子资源定位器并返回Customer资源,但是JAX-RS无法调度请求,因为Customer资源不处理路径"/ entities/create".有没有办法在转发请求时将URL更改为/ customers/create?

此时我无法更改API以使"客户"成为"实体"的真正子资源.

jax-rs resteasy

4
推荐指数
1
解决办法
1292
查看次数

从现有的CXF休息服务生成wadl

我使用CXF实现了JAX-RS服务.我怎样才能生成wadl?或者有没有像泽西 http://path.to.your/restapp/application.wadl那样的东西?有没有像wsdl,java到wsdl的maven插件?我找到了找不到的答案.

java cxf jax-rs

4
推荐指数
1
解决办法
1万
查看次数

Jersey:如何注册省略某些子类的ExceptionMapper?

如何注册一个包罗万象的ExceptionMapper<Exception>,它拦截WebApplicationException为其提供新泽西特殊处理?

更新:我提交了此功能请求:http://java.net/jira/browse/JERSEY-1607

jax-rs jersey

4
推荐指数
1
解决办法
7197
查看次数

JAX-RS:如何将对象列表作为JSON返回?

我查看了杰克逊的文档,它让我困惑:(我的实体看起来像:

 @Entity
 @Table(name = "variable")
 public class Variable {

    @Id
    @GeneratedValue(strategy = GenerationType.IDENTITY)
    private long id;

    @Column(unique = true, nullable = false)
    private String name;

    @Column
    @Enumerated(EnumType.STRING)
    private VariableType type;

    @Column(nullable = false)
    private String units;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "created_on", nullable = false)
    private Date createdOn;

    @Temporal(TemporalType.TIMESTAMP)
    @Column(name = "retired_on", nullable = true)
    private Date retiredOn;

    @Column(nullable = false)
    private boolean core;

}
Run Code Online (Sandbox Code Playgroud)

我的JAX-RS服务看起来像

@Path("/variable")
public class VariableResource {
    @Inject private VariableManager variableManager;

    @GET
    @Produces(MediaType.APPLICATION_JSON)
    public …
Run Code Online (Sandbox Code Playgroud)

java jax-rs jackson

4
推荐指数
1
解决办法
1万
查看次数

Play Framework检查HTTP请求

我想知道如何检查Play Framework 2.1中的HTTP请求.我可以在文档中找到的唯一信息是通过该conf/routes机制:

GET   /clients/:id          controllers.Clients.show(id: Long)  
Run Code Online (Sandbox Code Playgroud)

但这只允许我们id从路径中获取参数.如何访问请求的其他部分,例如标题或查询参数?换句话说,什么是JAX-RS的Play的等价物@HeaderParam,@FormParam,@QueryParam等?

webserver jax-rs jersey playframework playframework-2.1

4
推荐指数
2
解决办法
1万
查看次数

创建一个ResourceConfig,其行为与默认Jetty的Jersey注册相同

我有一个端点:

@POST
@Path("/test")
@Consumes(MediaType.APPLICATION_JSON)
@Produces(MediaType.APPLICATION_JSON)
public String canaryTest(String JSON) {
    return JSON;
}
Run Code Online (Sandbox Code Playgroud)

当我使用Jersey在Jetty中注册时

ServletHolder holder = new ServletHolder(new ServletContainer());
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好.但是,如果我尝试明确指定默认配置,它将停止工作(从端点返回媒体类型错误).即使只是将ResourceConfig的默认实例传递给ServletContainer,它也会停止工作.

ResourceConfig config = new ResourceConfig();
//config.property(x,defaultX)
//config.property(y,defaultY)
ServletHolder holder = new ServletHolder(new ServletContainer(config));
Run Code Online (Sandbox Code Playgroud)

我想手动和显式地模拟默认配置行为,所以我在这里要问的是我应该如何配置ResourceConfig以使行为保持工作(即,要设置的属性)

PS:我正在使用Jetty 9.2.6.v20141205和Jersey 2.14.Maven中的依赖关系:

  • org.eclipse.jetty.jetty-server org.eclipse.jetty.jetty-servlet
  • org.eclipse.jetty.jetty-的servlet
  • org.glassfish.jersey.containers.jersey-容器servlet的芯
  • com.sun.jersey.jersey-JSON
  • org.glassfish.jersey.media.jersey-媒体JSON - 杰克逊

java json jetty jax-rs jersey

4
推荐指数
1
解决办法
5399
查看次数

没有隔离共享库的JAX-RS 2.0 WebSphere 8.5

我使用Jersey 2在IBM WebSphere 8.5环境中实现JAR-RS 2.0.

在阅读了这篇文章后,在Websphere 8中获得了JAX-RS Jersey 2.10支持,我设法让这个工作.

但是,是否可以在WAR中捆绑JAX-RS Jars并部署应用程序而无需创建隔离的共享库?如果这是不可能的,有人可以解释为什么会这样吗?

我理解在库中使用Jars的部署时间优势,但我更愿意将整个应用程序(包括依赖项)构建到单个WAR中.

- 编辑 -

如果更改类加载顺序,您似乎可以从WAR中加载JAX-RS jar.您需要更改顺序以最后加载父类.这可以如下完成;

在管理控制台中:

Applications - > WebSphere enterprise applications - > {your.application} - > Manage Modules - > {your.module}

将类加载器顺序下拉列表更改为:"首先使用本地类加载器加载的类(父类最后一个)".

但是,这表明附加的Stackoverflow文章中缺少某些JVM属性.

任何人都可以对这种情况有所了解吗?

rest jax-rs java-ee websphere-8 jersey-2.0

4
推荐指数
1
解决办法
4883
查看次数

我可以在Rest Api中为两个班级使用相同的路径吗?

是否可以为两个类定义相同的路径?

@Path("/resource")    
public class ResourceA{
..
..
}

@Path("/resource")
public class ResourceB(){
..
..
}
Run Code Online (Sandbox Code Playgroud)

java rest web-services jax-rs

4
推荐指数
1
解决办法
3497
查看次数