Java 从委托类引用@Service
在委托类中使用@Service注释的JAX-RS资源时遇到问题。以下是我的设置: javaJava 从委托类引用@Service,java,spring,web-services,rest,Java,Spring,Web Services,Rest,在委托类中使用@Service注释的JAX-RS资源时遇到问题。以下是我的设置: java package com.company.mobileservice.servlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import org.springframework.beans.factory.annotation.Autowired; imp
package com.company.mobileservice.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.HttpRequestHandler;
public class MyServlet implements HttpRequestHandler {
@Autowired
MyDelagate delegate;
private void writeResponse(HttpServletRequest request,
HttpServletResponse response, String delegateResponse) {
try {
response.setContentType("application/json");
String callback = request.getParameter("callback");
if (callback != null) {
delegateResponse = callback + "(" + delegateResponse + ");";
} else {
throw new Exception("Callback was null.");
}
response.getWriter().write(delegateResponse);
} catch (Exception e) {
throw new RuntimeException(e);
}
}
private String delegateGetRequest(HttpServletRequest request) {
return delegate.handleRequest(request);
}
@Override
public void handleRequest(HttpServletRequest request,
HttpServletResponse response) {
String delegateResponse = delegateGetRequest(request);
writeResponse(request, response, delegateResponse);
}
}
MyDelegate.java
package com.company.mobileservice.servlet;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.core.Response;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.Authentication;
import org.springframework.security.context.SecurityContextHolder;
import org.springframework.stereotype.Component;
import com.company.mobileservice.cards.CardResource;
@Component
public class MyDelagate {
@Autowired
private CardResource cardResource;
public String handleRequest(HttpServletRequest request) {
return addCard(request);
}
// Proxies the request to CardResource
private String addCard(HttpServletRequest request) {
String accountID = request.getParameter("accountID");
Card card = new Card();
card.setPan(accountInformation.getAccountNumber().toString());
card.setPaymentTypeId("ABCD1234");
Response response = cardResource.addCard(request, "TEST", null, card);
return response.toString();
}
}
CardResource.java
package com.company.mobileservice.cards;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.Consumes;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.QueryParam;
import javax.ws.rs.core.Context;
import javax.ws.rs.core.Response;
import org.springframework.context.annotation.Scope;
import org.springframework.stereotype.Service;
import com.company.mobileservice.model.Card;
@Path("/{appId}/cards")
@Service
@Scope("singleton")
public class CardResource {
@POST
@Consumes({"application/xml", "application/json"})
@Produces({"application/xml", "application/json"})
public Response addCard(
@Context HttpServletRequest request,
@PathParam("appId") String appId,
@QueryParam("location") String location,
Card card) {
// Do work here
}
}
我想做的是从代理中调用我的@Service。我能够从应用程序上下文成功地将CardResource注入到我的委托中,但我想知道是否有其他方法可以通过使用RESTful@Path方法访问此服务 在进一步搜索之后,我确定这是不可能的。我希望得到某种服务目录,以便从中获得适当的服务。最后,我决定只调用localhost上的服务。它基本上完成了这项工作,但如果我可以在自己的应用程序中调用REST服务,而不必配置客户端,那就太好了 那么,您可以为此编写一个REST客户端。但是为什么要这样做呢?我想补充一点,我试图避免对@Service本身进行外部HTTP调用,因为我希望从容器中访问它。