Tôi đang triển khai một cuộc chiến với Tomcat 7.0.57. Mã này sử dụng Jersey 2.x Client để giao tiếp với điểm cuối Rest và cho thấy điểm cuối của Rest bằng cách sử dụng CXF (AKA của điểm cuối chiến tranh).java.lang.ClassNotFoundException: javax.ws.rs.MessageProcessingException
Khi tôi nhấn một trong các điểm cuối của chiến tranh, mã có vẻ hoạt động và trả về một phản hồi không có vấn đề từ góc nhìn của máy chủ, nhưng máy khách nhận được phản hồi 500 trả về từ tomcat. Đây là lỗi:
java.lang.ClassNotFoundException: javax.ws.rs.MessageProcessingException
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1720)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1571)
org.apache.cxf.jaxrs.impl.ResponseBuilderImpl.build(ResponseBuilderImpl.java:69)
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.processResponse(JAXRSOutInterceptor.java:137)
org.apache.cxf.jaxrs.interceptor.JAXRSOutInterceptor.handleMessage(JAXRSOutInterceptor.java:86)
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
org.apache.cxf.interceptor.OutgoingChainInterceptor.handleMessage(OutgoingChainInterceptor.java:77)
org.apache.cxf.phase.PhaseInterceptorChain.doIntercept(PhaseInterceptorChain.java:272)
org.apache.cxf.transport.ChainInitiationObserver.onMessage(ChainInitiationObserver.java:121)
org.apache.cxf.transport.http.AbstractHTTPDestination.invoke(AbstractHTTPDestination.java:239)
org.apache.cxf.transport.servlet.ServletController.invokeDestination(ServletController.java:248)
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:222)
org.apache.cxf.transport.servlet.ServletController.invoke(ServletController.java:153)
org.apache.cxf.transport.servlet.CXFNonSpringServlet.invoke(CXFNonSpringServlet.java:167)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.handleRequest(AbstractHTTPServlet.java:286)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.doPost(AbstractHTTPServlet.java:206)
javax.servlet.http.HttpServlet.service(HttpServlet.java:646)
org.apache.cxf.transport.servlet.AbstractHTTPServlet.service(AbstractHTTPServlet.java:262)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
Rất tiếc, lỗi này không hiển thị trong nhật ký tomcat.
Tôi đã nghiên cứu một chút và có vẻ như lớp học này là một phần của jax-rs. Trong maven pom của tôi, tôi đã bao gồm sự phụ thuộc này:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0.1</version>
</dependency>
Nhưng sự phụ thuộc này dường như không có lớp này. Đó là lớp là trong sự phụ thuộc này mặc dù:
<dependency>
<groupId>javax.ws.rs</groupId>
<artifactId>javax.ws.rs-api</artifactId>
<version>2.0-m01</version>
</dependency>
tôi cảm thấy không thoải mái hạ cấp lên một phiên bản thấp hơn đó là một cột mốc quan trọng mặc dù. Quan trọng hơn, lọ đó không bao gồm các lớp tôi đang sử dụng trong mã của tôi như javax.ws.rs.client.ClientBuilder
.
Bất cứ ai có thể giải thích lý do tại sao tôi nhận được ngoại lệ này và cách giải quyết vấn đề này?
My Giải pháp
Tôi đã đi đến kết luận rằng đây có nhiều việc phải làm với Client Jersey và CXF can thiệp với nhau. Tôi quyết định xóa Khách hàng Jersey và thay thế bằng Ứng dụng khách CXF. Những hướng dẫn này tốt hơn nhiều so với các hướng dẫn chính thức: http://fandry.blogspot.com/2012/06/how-to-create-simple-cxf-based-jax-rs.html
import com.fasterxml.jackson.jaxrs.json.JacksonJaxbJsonProvider;
import org.apache.cxf.jaxrs.client.WebClient;
import java.util.ArrayList;
import java.util.List;
public class App
{
public static void main(String[] args) throws Exception {
List<Object> providers = new ArrayList<Object>();
providers.add(new JacksonJaxbJsonProvider());
WebClient client = WebClient.create("http://localhost:8080/poc_restapi_cxf/api", providers);
client = client.accept("application/json").type("application/json").path("/order").query("id", "1");
Order order = client.get(Order.class);
System.out.println("Order:" + order.getCustomerName());
}
}
API tương tự. Tôi chỉ tìm kiếm và thay thế một số tên phương thức và mọi thứ đã hoạt động.
@ Michael-O Vì những người khác nhau xem mỗi –