我们正在使用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
吗? (虽然......我无法找到任何我不会提示的暗示。)
答案 0 :(得分:1)
我试图做你想做的事情而且cxf不能让你有两个BeanParams,最后我最终使用了两个类之间的继承,尽管这样做的灵活性较低。根据您的对象所代表的内容,这可能不是您的选择。
答案 1 :(得分:0)
我们正在CXF用户名单上与Christian合作。最近的测试证实它有效。克里斯蒂安 - 请回复我的澄清请求。