在为简单的RESTful CRUD Web服务实现泽西客户端时遇到错误

问题描述

我正在尝试使用Jersey制作CRUD RESTful Web服务,但是客户端遇到了麻烦。我使用不带客户端的Advanced Rest Client chrome应用程序测试了我的项目,并且功能还不错,但是当我尝试为其实现客户端时,我遇到了两个主要问题,它们是:

  1. 当我尝试实现“发布”功能或试图实现“获取功能时(在获取功能中,我希望所有现有员工数据都将被打印)。处理过帐请求后,奇怪的是确实添加了员工数据,但是在控制台中却没有响应错误。这是错误消息: 2020年11月5日12:03:52 PM org.eclipse.yasson.internal.Unmarshaller deserializeItem 严重:无法将JSON数组反序列化为:com.sun.research.ws.wadl.Response类 线程“主”中的异常javax.ws.rs.client.ResponseProcessingException:javax.json.bind.JsonbException:无法将JSON数组反序列化为:com.sun.research.ws.wadl.Response
  2. 当我尝试实现“放置”功能时,我想做的就是发送一个JAXB可以处理并添加员工数据的员工对象。我在这里遇到的错误是: 线程“主”中的异常javax.ws.rs.InternalServerErrorException:HTTP 500内部服务器错误。由以下原因引起:javax.xml.bind.JAXBException:在模块路径或类路径上找不到JAXB-API的实现。 [java.lang.classNotFoundException:com.sun.xml.bind.v2.ContextFactory]。造成原因:java.lang.classNotFoundException:com.sun.xml.bind.v2.ContextFactory。

在控制台上打印删除请求的响应就足够奇怪了,并且不会引发任何错误。 这是我项目的各种文件

Employee.java

package com.wipro;
import javax.xml.bind.annotation.*;
import javax.json.bind.annotation.*;

@XmlRootElement
@XmlType(propOrder= {"EmpId","EmpName","EmpDept","EmpAge"})
@JsonbPropertyOrder("{EmpId,EmpName,EmpDept,EmpAge}")
public class Employee {
private String EmpId;
private String EmpName;
private String EmpDept;
private int EmpAge;

public Employee() {
    
}
public Employee(String id,String name) {
    this.EmpId=id;
    this.EmpName=name;
}
public String getEmpId() {
    return EmpId;
}
public void setEmpId(String empId) {
    this.EmpId = empId;
}
public String getEmpName() {
    return EmpName;
}
public void setEmpName(String empName) {
    this.EmpName = empName;
}
public String getEmpDept() {
    return EmpDept;
}
public void setEmpDept(String empDept) {
    this.EmpDept = empDept;
}
public int getEmpAge() {
    return EmpAge;
}
public void setEmpAge(int empAge) {
    this.EmpAge = empAge;
}

}

EmployeeDao.java

package com.wipro;

import java.util.HashMap;
import java.util.Map;
public enum EmployeeDao {
object;

private Map<String,Employee> contentProvider = new HashMap<>();
private EmployeeDao() {
    Employee emp = new Employee("1","Mohit");
    emp.setEmpDept("I&ES");
    emp.setEmpAge(21);
    contentProvider.put("Mohit",emp);
    emp=new Employee("2","Rohit");
    emp.setEmpDept("Digital");
    emp.setEmpAge(22);
    contentProvider.put("Rohit",emp);
}
public Map<String,Employee> getModel() {
    return contentProvider;
}
}

EmployeeResource.java

package com.wipro;

import java.util.*;
import javax.ws.rs.*;
import javax.ws.rs.core.MediaType;
import javax.xml.bind.*;

@Path("/employee")
public class EmployeeResource {

@GET
@Produces({MediaType.APPLICATION_JSON,MediaType.APPLICATION_XML,MediaType.TEXT_XML})
public List<Employee> getEmployeeList(){
    List<Employee> emp = new ArrayList<Employee>();
    emp.addAll(EmployeeDao.object.getModel().values());
    return emp;
}

@PUT
@Consumes(MediaType.APPLICATION_XML)
public void putEmployee(JAXBElement<Employee> emp){
    Employee emps =emp.getValue();
    EmployeeDao.object.getModel().put(emps.getEmpId(),emps);
}

@DELETE
@Consumes(MediaType.TEXT_PLAIN)
public void deleteEmployee(String name) {
    Employee emp = EmployeeDao.object.getModel().get(name);
    if(emp==null) {
        throw new RuntimeException("Employee with name \""+name+"\" does not exist.");
    }
    EmployeeDao.object.getModel().remove(name);
}

@DELETE
@Path("{name}")
public void deleteEmployee1(@PathParam("name") String name) {
    Employee emp = EmployeeDao.object.getModel().get(name);
    if(emp==null) {
        throw new RuntimeException("Employee with name \""+name+"\" does not exist.");
    }
    EmployeeDao.object.getModel().remove(name);
}

@POST
@Path("form")
@Consumes(MediaType.APPLICATION_FORM_URLENCODED)
public void putEmployee(@FormParam("EmpId") String EmpId,@FormParam("EmpName") String 
EmpName,@FormParam("EmpDept") String EmpDept,@FormParam("EmpAge") int EmpAge) {
    Employee emp = new Employee(EmpId,EmpName);
    emp.setEmpDept(EmpDept);
    emp.setEmpAge(EmpAge);
    EmployeeDao.object.getModel().put(EmpName,emp);
}
}

EmployeeClient.java

package com.wipro;

import java.net.URI;
import javax.ws.rs.client.ClientBuilder;
import javax.ws.rs.core.Form;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.UriBuilder;
import org.glassfish.jersey.client.ClientConfig;
import com.sun.research.ws.wadl.Response;
import javax.ws.rs.client.*;

public class EmployeeClient {
public static void main(String[] args) {
    ClientConfig config = new ClientConfig();
    Client client = ClientBuilder.newClient(config);
    WebTarget target = client.target(getBaseURI());
    
    String response = target.path("rest").path("employee").request().get(Response.class).toString();
    System.out.println(response);
    Employee emp = new Employee("3","Ankit");
    emp.setEmpDept("HR");
    emp.setEmpAge(21);
    target.path("rest").path("employee").request().put(Entity.entity(emp,MediaType.APPLICATION_XML));
    System.out.println(response);
    response = target.path("rest").path("employee").request().get(Response.class).toString();
    System.out.println(response);
    response = target.path("rest").path("employee/Ankit").request().delete().toString();
    System.out.println(response);
    Form form = new Form();
    form.param("EmpId","3");
    form.param("EmpName","Ankit");
    form.param("EmpDept","HR");
    form.param("EmpAge","20");
    Response rest = target.path("rest").path("employee/form").request().post(Entity.entity(form,MediaType.APPLICATION_FORM_URLENCODED),Response.class);
    System.out.println(rest.getStatus());
}
private static URI getBaseURI() {
    return UriBuilder.fromUri("http://localhost:8080/"+"Assignment_6").build();
}
}

我们非常感谢您的帮助。谢谢。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)