获取 RESTful 自 EJB 以来的列表
Get list to RESTful since EJB
我有一个项目 maven - EAR,同样我有一个 RESTful JAX-RS 可以与球衣一起使用并且它正在使用 JSON,当我尝试获取列表到 RESTful自从EJB,带来的不是什么。但是,当在同一个 REST 中添加列表时,它运行良好。!
这是 RESTful 与列表相同的 class!。
@Path("/courseMockRS")
@Consumes({"application/json"})
@Produces({"application/json"})
public class CourseMock_RS {
@GET
@Path("/all_courses")
public List<CourseMock> AllCourses() {
List<CourseMock> courses = getCoursesMock();
return courses;
}
public List<CourseMock> getCoursesMock() {
List<CourseMock> coursesMocks = new ArrayList<CourseMock>();
CourseMock mock = new CourseMock();
mock.setName("SOA Analist");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Architect");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Consultant");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
return coursesMocks;
}
}
这样效果很好!
[{"name":"SOA Analist","author":"SOA Education","releaseDate":"16/07/2015"},
{"name":"SOA Architect","author":"SOA ET","releaseDate":"16/07/2015"},
{"name":"SOA Consultant","author":"SOA ET","releaseDate":"16/07/2015"}]
但是当找不到实现 EJB 时!,但是部署了应用程序并接受了无状态资源。
这是来自 EJB 的资源。
DTO
public class CourseMock {
private String name;
private String author;
private String releaseDate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
}
外观
@Stateless
@LocalBean
public class CourseFacadeMock implements ICourseMockFacade{
private CourseMock mock;
@Override
public List<CourseMock> getCoursesMock() {
List <CourseMock> coursesMocks = new ArrayList<CourseMock>();
mock= new CourseMock();
mock.setName("Analista SOA");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock= new CourseMock();
mock.setName("SOA Analist");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Architect");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Consultant");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
return coursesMocks;
}
}
界面立面
@Local
public interface ICourseMockFacade {
public List<CourseMock> getCoursesMock();
}
还有 RESTful
@Path("/courseMockRS")
@Consumes({"application/json"})
@Produces({"application/json"})
public class CourseMock_RS {
@EJB
ICourseMockFacade courseMockFacade;
@GET
@Path("/all_courses")
public List<CourseMock> AllCourses() {
List<CourseMock> courses = courseMockFacade.getCoursesMock();
return courses;
}
}
因此失败。异常是 NUllPointerException。
请帮忙!
好的,看起来 courseMockFacade
没有被注入 CourseMock_RS。原因是@EJB 注释是为在 EJB 中使用而设计的,您不能将它放入任意 类 列表 JAXRS 接口中。
要获取 ICourseMockFacade
对象,您可以使用 JNDI 查找,例如:
ICourseMockFacade courseMockFacade=lookupCourseFacade();
private ICourseMockFacade lookupCourseFacade(){
return (ICourseMockFacade)new InitialContext().lookup("java:module/CourseMockFacade");
}
有一些注意事项:我在这里假设您有一个实现 ICourseMockFacade
的 EJB CourseMockFacade
,并且 JNDI 地址将取决于您的部署 - full details here。
我已经使用您的代码创建了一个项目,假设您已将 JAX-RS 配置 class 设置为类似以下内容,它可以完美运行:
@ApplicationPath("resources")
public class JAXRSConfiguration extends Application {
}
在这种情况下,如果没有注入 EJB,也许问题出在您的 beans.xml 文件中,属性 bean-discovery-mode 应该设置为 "all" .例如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
希望对您有所帮助。
我有一个项目 maven - EAR,同样我有一个 RESTful JAX-RS 可以与球衣一起使用并且它正在使用 JSON,当我尝试获取列表到 RESTful自从EJB,带来的不是什么。但是,当在同一个 REST 中添加列表时,它运行良好。!
这是 RESTful 与列表相同的 class!。
@Path("/courseMockRS")
@Consumes({"application/json"})
@Produces({"application/json"})
public class CourseMock_RS {
@GET
@Path("/all_courses")
public List<CourseMock> AllCourses() {
List<CourseMock> courses = getCoursesMock();
return courses;
}
public List<CourseMock> getCoursesMock() {
List<CourseMock> coursesMocks = new ArrayList<CourseMock>();
CourseMock mock = new CourseMock();
mock.setName("SOA Analist");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Architect");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Consultant");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
return coursesMocks;
}
}
这样效果很好!
[{"name":"SOA Analist","author":"SOA Education","releaseDate":"16/07/2015"},
{"name":"SOA Architect","author":"SOA ET","releaseDate":"16/07/2015"},
{"name":"SOA Consultant","author":"SOA ET","releaseDate":"16/07/2015"}]
但是当找不到实现 EJB 时!,但是部署了应用程序并接受了无状态资源。
这是来自 EJB 的资源。
DTO
public class CourseMock {
private String name;
private String author;
private String releaseDate;
public String getName() {
return name;
}
public void setName(String name) {
this.name = name;
}
public String getAuthor() {
return author;
}
public void setAuthor(String author) {
this.author = author;
}
public String getReleaseDate() {
return releaseDate;
}
public void setReleaseDate(String releaseDate) {
this.releaseDate = releaseDate;
}
}
外观
@Stateless
@LocalBean
public class CourseFacadeMock implements ICourseMockFacade{
private CourseMock mock;
@Override
public List<CourseMock> getCoursesMock() {
List <CourseMock> coursesMocks = new ArrayList<CourseMock>();
mock= new CourseMock();
mock.setName("Analista SOA");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock= new CourseMock();
mock.setName("SOA Analist");
mock.setAuthor("SOA Education");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Architect");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
mock = new CourseMock();
mock.setName("SOA Consultant");
mock.setAuthor("SOA ET");
mock.setReleaseDate("16/07/2015");
coursesMocks.add(mock);
return coursesMocks;
}
}
界面立面
@Local
public interface ICourseMockFacade {
public List<CourseMock> getCoursesMock();
}
还有 RESTful
@Path("/courseMockRS")
@Consumes({"application/json"})
@Produces({"application/json"})
public class CourseMock_RS {
@EJB
ICourseMockFacade courseMockFacade;
@GET
@Path("/all_courses")
public List<CourseMock> AllCourses() {
List<CourseMock> courses = courseMockFacade.getCoursesMock();
return courses;
}
}
因此失败。异常是 NUllPointerException。 请帮忙!
好的,看起来 courseMockFacade
没有被注入 CourseMock_RS。原因是@EJB 注释是为在 EJB 中使用而设计的,您不能将它放入任意 类 列表 JAXRS 接口中。
要获取 ICourseMockFacade
对象,您可以使用 JNDI 查找,例如:
ICourseMockFacade courseMockFacade=lookupCourseFacade();
private ICourseMockFacade lookupCourseFacade(){
return (ICourseMockFacade)new InitialContext().lookup("java:module/CourseMockFacade");
}
有一些注意事项:我在这里假设您有一个实现 ICourseMockFacade
的 EJB CourseMockFacade
,并且 JNDI 地址将取决于您的部署 - full details here。
我已经使用您的代码创建了一个项目,假设您已将 JAX-RS 配置 class 设置为类似以下内容,它可以完美运行:
@ApplicationPath("resources")
public class JAXRSConfiguration extends Application {
}
在这种情况下,如果没有注入 EJB,也许问题出在您的 beans.xml 文件中,属性 bean-discovery-mode 应该设置为 "all" .例如:
<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/beans_1_1.xsd"
bean-discovery-mode="all">
</beans>
希望对您有所帮助。