mobilefirst - Java 适配器中的响应类型
mobilefirst - Response type in Java adapters
我有一个 class(存储在 server/java 中)returns 一个响应类型对象,我想在适配器中使用它。
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();
}
如果我在适配器的方法中使用这个 class,我会得到一个异常:
javax.servlet.ServletException: java.lang.LinkageError: loader
constraint violation: loader (instance of
com/ibm/ws/classloading/internal/AppClassLoader) previously initiated
loading for a different type with name "javax/ws/rs/core/Response" ...
Caused by: java.lang.LinkageError: loader constraint violation: loader
(instance of com/ibm/ws/classloading/internal/AppClassLoader)
previously initiated loading for a different type with name
"javax/ws/rs/core/Response"
如何设置要加载的响应类型?
如果您对 CorsFilter 感兴趣,我建议像下面所示那样实现它,并将 class 添加到您的 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);
}
}
}
我设法创建了一个外部项目,将 class 放在那里,将其编译成一个 jar 文件并将其包含在 adapters/adapter_name/lib 文件夹中(也添加到构建路径)。
我有一个 class(存储在 server/java 中)returns 一个响应类型对象,我想在适配器中使用它。
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();
}
如果我在适配器的方法中使用这个 class,我会得到一个异常:
javax.servlet.ServletException: java.lang.LinkageError: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/AppClassLoader) previously initiated loading for a different type with name "javax/ws/rs/core/Response" ...
Caused by: java.lang.LinkageError: loader constraint violation: loader (instance of com/ibm/ws/classloading/internal/AppClassLoader) previously initiated loading for a different type with name "javax/ws/rs/core/Response"
如何设置要加载的响应类型?
如果您对 CorsFilter 感兴趣,我建议像下面所示那样实现它,并将 class 添加到您的 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);
}
}
}
我设法创建了一个外部项目,将 class 放在那里,将其编译成一个 jar 文件并将其包含在 adapters/adapter_name/lib 文件夹中(也添加到构建路径)。