우리 클래스의 모든 주석을 제거하고 spring-config.xml
으로 구성하려고합니다.REST services : 주석을 사용하지 않고 annotatedMethod를 지정하는 방법
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>
같은 지금은 노출 된 서비스를 클릭 할 때 :
난 다음 추적을 얻을 : 나는 CXF-jaxrs에 디버그를했다
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)
소스 및 라인
java.lang.NullPointerException
org.apache.cxf.jaxrs.model.wadl.WadlGenerator.handleOperation(WadlGenerator.java:310)
이 메서드는 annotatedMethod
을 검색하지만 annotatedMethod
필드의 개체는 null
이므로 오류가 발생합니다.
나는 메소드 위에있는 클래스의 주석을 사용하여 작동시킬 수 있습니다. 하지만 난 XML 구성을 통해 작동 싶습니다.
가 나는
<jaxrs:operation name="retrieve" path="{partyId}" consumes="application/json" produces="application/json" verb="GET">
retrieve
추신 : 더 많은 정보를 추가하거나 정리해야한다고 생각되면 의견을 남기십시오. RESTful 서비스를 처음 접하고이 컨텍스트에서 모든 정보가 무엇인지 예상하지 못한다.
UPDATE :
서비스 클래스
내가WadlGenerator
단순히 발생 클래스
OperationResourceInfo
의 인스턴스의 메소드를 호출하고, CXF는 반드시 방법은 주석이 될 것으로 예상되지 볼 수있는에서
//@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
}
naah .. xml을 사용하는 그러한 이유가 없습니다. 믿을만한 건축가가 만든 _Requirements_ ___ "만약 그가 단 하나의 층을 더 넣을 수 있다면 그는 세상을 통치 할 수 있습니다"___ lol :) –
나는 당신의 고통이 나를 믿는다고 느낍니다! 나는 그것이 작동하는 무언가를 바꾸는 것이 진짜 농담이라는 것을 인정해야하지만. 나는 XML 대 Annotations의 장점을 얻고 싶지 않지만 XML 파일을 열지 않아도 클래스가 열리고 물건들이 함께 연결되어있는 것을 볼 수 있다면 주석을 선호한다. – ramsinb
@ 예, 알고 있습니다. 개발자는 그것에 동의 할 것입니다.또한 나는 주석을 선호하지만 "Architect"가 세계를 통치하기위한 ___ 여행객에있을 때 당신은 무엇을합니까? 어쨌든, 나는 아침에 그것을 시도하고 나의 발견으로 게시물을 업데이트 할 것입니다. 감사합니다 (y) –