如何解决如何将 EntityManager 正确注入 JAX-WS Web 服务?
我正在尝试实现一个 JAX-WS Web 服务,该服务具有一个端点,该端点从配置的数据源返回数据。我设法创建了服务和客户端,但是我无法访问数据库,因为当我尝试使用注入的 EntityManager 时出现空指针异常。 这是我的服务:
@WebService(serviceName="ViewDocuments")
public class ViewDocumentService {
@PersistenceContext(unitName = "HibernateJPA")
private EntityManager em;
@WebMethod
public String sayHello() {
return "Hello world!";
}
@Produces("application/json")
@WebMethod(operationName="getDocuments")
public List<File> getDocuments(@WebParam(name = "name") String filename) {
if(filename == null)
return em.createQuery("FROM File").getResultList();
else return null;
}
}
这是我的 WebServiceClient:
@WebServiceClient(name="ViewDocuments",wsdlLocation = "http://localhost:8080/lab8/ViewDocuments?wsdl")
public class ViewDocumentClient extends Service {
protected ViewDocumentClient(URL wsdlDocumentLocation,QName serviceName) {
super(wsdlDocumentLocation,serviceName);
}
@WebEndpoint(name = "DocumentPort")
public ViewDocumentService getDocumentPort() {
return new ViewDocumentService();
}
}
我试图在这里调用函数:
public class MainDocumentClient {
public static void main(String[] args) throws Exception {
URL wsdlUrl = new URL("http://localhost:8080/lab8/ViewDocuments?wsdl");
QName serviceName = new QName("http://webservices/","ViewDocuments");
ViewDocumentClient service = new ViewDocumentClient(wsdlUrl,serviceName);
ViewDocumentService viewDocumentService = service.getDocumentPort();
System.out.println(viewDocumentService.sayHello());
System.out.println(viewDocumentService.getDocuments(null));
}
}
这是我的persistence.xml文件内容:
<?xml version="1.0" encoding="UTF-8"?>
<persistence version="2.2"
xmlns="http://xmlns.jcp.org/xml/ns/persistence"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/persistence
http://xmlns.jcp.org/xml/ns/persistence/persistence_2_2.xsd">
<persistence-unit name="HibernateJPA" transaction-type="JTA">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<jta-data-source>java:/Postgres-Source8</jta-data-source>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.archive.autodetection" value="class,hbm" />
</properties>
</persistence-unit>
<persistence-unit name="HibernateJPAForTests" transaction-type="RESOURCE_LOCAL">
<provider>org.hibernate.jpa.HibernatePersistenceProvider</provider>
<exclude-unlisted-classes>false</exclude-unlisted-classes>
<properties>
<property name="javax.persistence.jdbc.url" value="jdbc:postgresql://localhost:5432/lab8" />
<property name="javax.persistence.jdbc.driver" value="org.postgresql.Driver" />
<property name="javax.persistence.jdbc.user" value="postgres" />
<property name="javax.persistence.jdbc.password" value="<password>" />
<property name="hibernate.dialect" value="org.hibernate.dialect.PostgreSQL95Dialect" />
<property name="hibernate.hbm2ddl.auto" value="create-drop" />
<property name="hibernate.show_sql" value="true" />
<property name="hibernate.format_sql" value="true" />
<property name="hibernate.archive.autodetection" value="class,hbm" />
</properties>
</persistence-unit>
</persistence>
sayHello()
方法工作正常。我还尝试使用 EntityManagerFactory
,手动实例化我的 Repository
,添加 @Stateless
注释,但似乎没有任何效果。我只是无法查询我的数据库。
经过大量研究,我似乎仍然无法理解如何正确注入 EntityManager。有人可以向我解释一下吗?
我使用的是 Wildfly21.0.0。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。