Muk*_*oel 10 java rest web-services jax-rs jaxb
我们试图从我们的类中取出所有注释并在一个中配置它spring-config.xml.
spring-config.xml 好像
<jaxrs:server id="restServer" address="/rest/">
<jaxrs:model id="restModel">
<jaxrs:resource name="com.csc.fs.rest.contact.RetrieveContactHistoryBP" path="retrieveContactHistoryBP">
<jaxrs:operation name="retrieve" path="{partyId}" consumes="application/json" produces="application/json" verb="GET">
<jaxrs:param name="req" type="CONTEXT"/>
<jaxrs:param name="partyId" type="PATH"/>
</jaxrs:operation>
</jaxrs:resource>
<jaxrs:resource name="com.csc.fs.rest.contact.StartContactBP" path="startContactBP">
<jaxrs:operation name="startContact" path="/" consumes="application/json" produces="application/json" verb="PUT">
<jaxrs:param name="req" type="CONTEXT"/>
<jaxrs:param name="startContact" type="REQUEST_BODY"/>
</jaxrs:operation>
</jaxrs:resource>
</jaxrs:model>
<jaxrs:serviceBeans>
Run Code Online (Sandbox Code Playgroud)
现在当我点击暴露的服务时:

我得到以下痕迹:
HTTP Status 500 -
________________________________________
type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
java.lang.RuntimeException: org.apache.cxf.interceptor.Fault
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:102)
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:315)
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:105)
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:188)
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
root cause
org.apache.cxf.interceptor.Fault
org.apache.cxf.interceptor.AbstractFaultChainInitiatorObserver.onMessage(AbstractFaultChainInitiatorObserver.java:67)
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:315)
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:113)
org.apache.cxf.transport.servlet.ServletDestination.invoke(ServletDestination.java:105)
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:461)
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:188)
org.apache.cxf.transport.servlet.AbstractCXFServlet.invoke(AbstractCXFServlet.java:148)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:179)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doGet(AbstractHTTPServlet.java:108)
javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:159)
root cause
java.lang.NullPointerException
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleOperation(WadlGenerator.java:310)
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleResource(WadlGenerator.java:253)
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleRequest(WadlGenerator.java:185)
org.apache.cxf.jaxrs.impl.RequestPreprocessor.checkMetadataRequest(RequestPreprocessor.java:189)
?
Run Code Online (Sandbox Code Playgroud)
我调试了cxf-jaxrs源码并在线上调试
java.lang.NullPointerException
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleOperation(WadlGenerator.java:310)
Run Code Online (Sandbox Code Playgroud)
该方法搜索annotatedMethod但该对象具有由此抛出错误的annotatedMethod字段null.
我可以使用方法上面的类中的注释来使用它.但我希望它通过xml配置工作.
我指定了
<jaxrs:operation name="retrieve" path="{partyId}" consumes="application/json" produces="application/json" verb="GET">
Run Code Online (Sandbox Code Playgroud)
这retrieve是要调用的操作.还需要设置哪些其他属性?或者它只是xml配置的限制?
PS:如果您觉得需要添加或澄清更多信息,请留下评论.RESTful服务的新功能,不确定在此上下文中所需的所有信息.
更新:
服务类
//@Path("/startContactBP")
public class StartContactBP {
//@PUT
//@Consumes(MediaType.APPLICATION_JSON)
//@Produces(MediaType.APPLICATION_JSON)
//@Path ("/")
//public com.csc.fs.ws.contact.StartContactResult startContact(@Context HttpServletRequest req, com.csc.fs.ws.contact.StartContact startContact){
public com.csc.fs.ws.contact.StartContactResult startContact(HttpServletRequest req, com.csc.fs.ws.contact.StartContact startContact){
//call login
//call actual service
//call logoff
}
Run Code Online (Sandbox Code Playgroud)
据我所知,CXF 不一定期望该方法被注释,只是在恰好被调用的WadlGenerator类的实例上调用一个方法。这可能是因为开发人员只是懒惰,没有适当地命名该方法。OperationResourceInfogetAnnotatedMethod
我的建议是在堆栈跟踪中进行更高的调试,以查看是什么在创建该类的实例OperationResourceInfo,从中您应该能够看到此创建是否出错。
另外您使用的是哪个版本的CXf?确保其是最新的。
出于好奇,您是否有任何理由选择 XML 配置而不是注释?
| 归档时间: |
|
| 查看次数: |
3066 次 |
| 最近记录: |