我可以在相同的方法签名中使用两个javax @BeanParam bean吗?

时间:2015-10-16 10:20:58

标签: java cxf

我们正在使用Spring和Apache cxf。

对于以下示例代码,我得到一个例外。这让我想知道:我可以在同一个方法签名中使用两个BeanParam注释/ bean吗?

import javax.ws.rs.BeanParam;
//...
@GET
@Produces({"application/json;charset=UTF-8"})
public Response doFoo(
        @BeanParam Bar bar,
        @BeanParam Bas bas,
        @Context UriInfo uriInfo)
        throws BazException {

这是堆栈跟踪:

javax.ws.rs.InternalServerErrorException: null
at org.apache.cxf.jaxrs.utils.SpecExceptions.toInternalServerErrorException(SpecExceptions.java:77) ~[cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.utils.ExceptionUtils.toInternalServerErrorException(ExceptionUtils.java:110) ~[cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.utils.JAXRSUtils.createBeanParamValue(JAXRSUtils.java:975) ~[cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameter(JAXRSUtils.java:767) ~[cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.utils.JAXRSUtils.processParameters(JAXRSUtils.java:716) ~[cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:265) [cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]
at org.apache.cxf.jaxrs.JAXRSInvoker.invoke(JAXRSInvoker.java:101) [cxf-rt-frontend-jaxrs-2.7.15.jar:2.7.15]

在JAXRSUtils中,我可以看到:

BeanParamInfo bmi = ProviderFactory.getInstance(m).getBeanParamInfo(clazz);
if (bmi == null) {
    // we could've started introspecting now but the fact no bean info 
    // is available indicates that the one created at start up has been 
    // lost and hence it is 500
    LOG.warning("Bean parameter info is not available");
    throw ExceptionUtils.toInternalServerErrorException(null, null);
}

抛出的异常是什么。

对于我做错了什么,这有什么暗示吗?当我注释掉@BeanParam Bas bas,行时,事情似乎有效......我可能不允许在相同的方法签名中使用两个@BeanParam吗? (虽然......我无法找到任何我不会提示的暗示。)

2 个答案:

答案 0 :(得分:1)

我试图做你想做的事情而且cxf不能让你有两个BeanParams,最后我最终使用了两个类之间的继承,尽管这样做的灵活性较低。根据您的对象所代表的内容,这可能不是您的选择。

答案 1 :(得分:0)

我们正在CXF用户名单上与Christian合作。最近的测试证实它有效。克里斯蒂安 - 请回复我的澄清请求。