Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/11.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从委托类引用@Service_Java_Spring_Web Services_Rest - Fatal编程技术网

Java 从委托类引用@Service

Java 从委托类引用@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

在委托类中使用@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;
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调用,因为我希望从容器中访问它。