mobilefirst - Java适配器中的响应类型

时间:2015-07-30 12:00:08

标签: java jax-rs ibm-mobilefirst mobilefirst-adapters

我有一个类(存储在server / java中),它返回一个Response类型对象,我想在适配器中使用它。

public class CorsResponse {
public static Response build() {
    return Response
            .ok()
            .header("Access-Control-Allow-Origin", "*")
            .header("Access-Control-Allow-Methods", "GET, POST")
            .header("Access-Control-Allow-Headers", "accept, origin, content-type")
            .header("Access-Control-Max-Age", "1728000")
            .build();
}

如果我在适配器的方法中使用此类,则会出现异常:

  

javax.servlet.ServletException:java.lang.LinkageError:loader   约束违规:loader(实例)   com / ibm / ws / classloading / internal / AppClassLoader)以前发起过   加载名称为“javax / ws / rs / core / Response”的其他类型...

     

引起:java.lang.LinkageError:加载器约束违规:loader   (com / ibm / ws / classloading / internal / AppClassLoader的实例)   先前为具有名称的其他类型启动了加载   “的javax / WS / RS /核心/响应”

如何设置要加载的响应类型?

2 个答案:

答案 0 :(得分:1)

我已经设法创建了一个外部项目,将该类放在那里,将其编译为jar文件并将其包含在adapters / adapter_name / lib文件夹中(也添加到构建路径中)。

答案 1 :(得分:0)

如果您对CorsFilter感兴趣,我建议像下面的节目那样实施它,并将课程添加到Application而不是...

@Provider
public class ResponseCorsFilter implements ContainerResponseFilter {

    @Override
    public void filter(ContainerRequestContext requestContext,
            ContainerResponseContext responseContext) throws IOException {

        responseContext.getHeaders().add("Access-Control-Allow-Origin", "*");
        responseContext.getHeaders().add("Access-Control-Allow-Methods", "GET, POST, OPTIONS");


        String reqHead = requestContext.getHeaderString("Access-Control-Request-Headers");

        if(null != reqHead && !reqHead.equals("")){
            responseContext.getHeaders().add("Access-Control-Allow-Headers", reqHead);
        }

    }


}