2012-12-17 3 views
1

Hessian 서비스와 함께 REST 서비스를 사용할 수 있습니까? RESS, Java Spring이있는 Hessian Webservice

내가이 인터페이스를 가지고 정교하게하려면 :

@Controller 
public interface PhotoServices { 

    @RequestMapping(value = "/{user}/{folder_name}/savephoto/", method = RequestMethod.POST) 
    public @ResponseBody Object savePhoto(HttpServletRequest request, @PathVariable("user")String user, @PathVariable("folder_name")String folder_name, @ModelAttribute("photo") Photo photo, BindingResult result, SessionStatus session); 

    @RequestMapping(value = "/user/getuserphotos/", method = RequestMethod.GET) 
    public @ResponseBody Object getUserPhotos(HttpServletRequest request); 

    @RequestMapping(value = "/{user}/{folder_name}/photo/{filename}", method = RequestMethod.GET, produces="image/jpg") 
    public @ResponseBody byte[] getPhoto(@PathVariable("user")String user, @PathVariable("folder_name")String folder_name, @PathVariable("filename") String filename); 

} 

나는 그것이 순전히 RESTful 서비스하지만, 요구 사항의 변화뿐만 아니라 헤센 서비스를 구현하기 위해 저를 필요가 있다는 생각이 인터페이스를 만들었습니다. 그대로

헤 시안에 대해이 인터페이스를 사용하면 다음과 같이 봄이 오류를 던지고있다 : 명확하게 하더군요

12:24:52,765 ERROR http-bio-8080-exec-1 servlet.DispatcherServlet:457 - Context initialization failed 
org.springframework.beans.factory.BeanCreationException: Error creating bean with name 'org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerMapping#0': Initialization of bean failed; nested exception is java.lang.IllegalStateException: Ambiguous mapping found. Cannot map 'photoService' bean method 
public java.lang.Object mppiwebservices.photoservices.impl.photo.PhotoServicesImpl.savePhoto(javax.servlet.http.HttpServletRequest,java.lang.String,java.lang.String,mppiwebservices.photoservices.pojo.Photo,org.springframework.validation.BindingResult,org.springframework.web.bind.support.SessionStatus) 
to {[/{user}/{folder_name}/savephoto/],methods=[POST],params=[],headers=[],consumes=[],produces=[],custom=[]}: There is already 'photoServicesImpl' bean method 
public java.lang.Object mppiwebservices.photoservices.impl.photo.PhotoServicesImpl.savePhoto(javax.servlet.http.HttpServletRequest,java.lang.String,java.lang.String,mppiwebservices.photoservices.pojo.Photo,org.springframework.validation.BindingResult,org.springframework.web.bind.support.SessionStatus) mapped. 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.doCreateBean(AbstractAutowireCapableBeanFactory.java:527) 
    at org.springframework.beans.factory.support.AbstractAutowireCapableBeanFactory.createBean(AbstractAutowireCapableBeanFactory.java:456) 
    at org.springframework.beans.factory.support.AbstractBeanFactory$1.getObject(AbstractBeanFactory.java:294) 
    at org.springframework.beans.factory.support.DefaultSingletonBeanRegistry.getSingleton(DefaultSingletonBeanRegistry.java:225) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.doGetBean(AbstractBeanFactory.java:291) 
    at org.springframework.beans.factory.support.AbstractBeanFactory.getBean(AbstractBeanFactory.java:193) 
    at org.springframework.beans.factory.support.DefaultListableBeanFactory.preInstantiateSingletons(DefaultListableBeanFactory.java:585) 
    at org.springframework.context.support.AbstractApplicationContext.finishBeanFactoryInitialization(AbstractApplicationContext.java:913) 
    at org.springframework.context.support.AbstractApplicationContext.refresh(AbstractApplicationContext.java:464) 
    at org.springframework.web.servlet.FrameworkServlet.configureAndRefreshWebApplicationContext(FrameworkServlet.java:631) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:588) 
    at org.springframework.web.servlet.FrameworkServlet.createWebApplicationContext(FrameworkServlet.java:645) 
    at org.springframework.web.servlet.FrameworkServlet.initWebApplicationContext(FrameworkServlet.java:508) 
    at org.springframework.web.servlet.FrameworkServlet.initServletBean(FrameworkServlet.java:449) 
    at org.springframework.web.servlet.HttpServletBean.init(HttpServletBean.java:133) 
    at javax.servlet.GenericServlet.init(GenericServlet.java:160) 
    at org.apache.catalina.core.StandardWrapper.initServlet(StandardWrapper.java:1228) 
    at org.apache.catalina.core.StandardWrapper.loadServlet(StandardWrapper.java:1147) 
    at org.apache.catalina.core.StandardWrapper.allocate(StandardWrapper.java:836) 
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:135) 
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:169) 
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:472) 
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:168) 
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:100) 
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:929) 
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118) 
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:405) 
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:964) 
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:515) 
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:302) 
    at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1110) 
    at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:603) 
    at java.lang.Thread.run(Thread.java:722) 

를 하나 내가 잘못 REST와 헤 시안을 통합하고있어 이들 두 사람은 같은에 존재할 수 없습니다 동시에 서비스를 제공 할 수 있습니다 ...

그래서 Hessian은 REST와 함께 작업 할 수 없습니까? 아니면 마술을 만들기위한 구성 라인이 누락 되었습니까?

답변

1

내가하는 것이 좋습니다 것이다

는 (. 박사 포스트 사람들이 당신이 필요로하고 내가 TL을하지 않으려는 정말로 확실하지 it..I'm를 요청할 경우 추가 미리보기가 제공됩니다) @Service로 표시된 클래스의 serivce에 비즈니스 로직을 넣습니다. 그러면 프론트 엔드는 http 또는 기타 hessian 또는 RMI 또는 SOAP 용 어댑터 또는 무엇이 던져지고 있는지에 대한 컨트롤러입니다.

// pure business logic method here no dependency on servlets or any network protocol just pojos in 
// pojos out 
@Service 
public interface PhotoServices { 
    public void doSomething(....) 

} 

/** 
* Restful interface knows about Sevlets request and response http status codes ... etc\ 
* does web stuff and delegates to the PhotoService 
*/ 
@Controller 
public class PhotoWebController { 

@Autowired 
private PhotoService photoSerivce; 

    @RequestMapping .... 
    public void doSemething(....) 
    { 
     this.photoSerivce.doSomething(....) 
    } 
} 




/** 
* RPC end point understand how to handle error conditions with Hessian ... etc 
* 
*/ 
// put whatever annoations you need to put for hessian 
public class PhotoHessianController { 

@Autowired 
private PhotoService photoSerivce; 

    // hessian annotations go here 
    public void doSemething(....) 
    { 
     this.photoSerivce.doSomething(....) 
    } 
} 

나는 헤센을 사용하지 않았으므로 헤센과 함께하는 방법에 대한 세부 정보를 제공 할 수 없습니다.

+0

나는 두 웹 서비스 스타일 모두 공통 서비스를 사용하기 때문에 추가 레이어로 충분할 수있다. 이 추가 레이어를 구현하려고 시도한 후에 다시 돌아올 것입니다. –

+0

여분의 레이어가 트릭을했습니다. 제안 해 주셔서 감사합니다. –