Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/asp.net/31.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Web services 如何在EJB项目中将SOAP功能引入payara/micro_Web Services_Jakarta Ee_Soap_Glassfish_Payara Micro - Fatal编程技术网

Web services 如何在EJB项目中将SOAP功能引入payara/micro

Web services 如何在EJB项目中将SOAP功能引入payara/micro,web-services,jakarta-ee,soap,glassfish,payara-micro,Web Services,Jakarta Ee,Soap,Glassfish,Payara Micro,我有一个EJB项目,它在以payara/micro为基本映像的容器中运行,提供SOAP和REST两种Web服务,因为payara/micro没有现成的JAXWSSOAP支持特性,但是,通过添加 cxf-rt-frontend-jaxws 及 作为项目的依赖项以及以下内容,并将以下代码替换为: @Override public void loadBus(ServletConfig servletConfig) { super.loadBus(servletConfig); Bus bus

我有一个EJB项目,它在以payara/micro为基本映像的容器中运行,提供SOAP和REST两种Web服务,因为payara/micro没有现成的JAXWSSOAP支持特性,但是,通过添加

cxf-rt-frontend-jaxws

作为项目的依赖项以及以下内容,并将以下代码替换为:

@Override
public void loadBus(ServletConfig servletConfig) {
  super.loadBus(servletConfig);
  Bus bus = getBus();
  BusFactory.setDefaultBus(bus);
  Endpoint.publish("/MySoapService", new ASoapService());
}
我能够使SOAP接口几乎可用。wsdl信息已经公开,并且

http://localhost:8080/<my project name>/services
在哪里

ASoapService
实际上是一个EJB。因此,我尝试用以下代码替换上述代码:

@EJB
ASoapService aSoapService
...
Endpoint.publish("/MySoapService", aSoapService);
在容器启动期间,我得到了

Caused by: javax.naming.NameNotFoundException: com.example.ASoapServiceF#com.example.ASoapService not found
通过查看日志,我发现了一个可能的原因: 当SOAP部件以以下代码启动时

Endpoint.publish("/MySoapService", aSoapService);
EJB容器尚未就绪,因此

ASoapService
失败了,这样的假设正确吗?因为通常情况下,您应该看到如下内容:

[2018-02-02T14:43:57.821+0000] [] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1517582637821] [levelValue: 800] Portable JNDI names for EJB ASoapService: [java:global/<my project name>/ASoapService, java:global/<my project name>/ASoapService!com.example.ASoapService]
在启动期间,我的情况并非如此

我对EJB和Glassfish的世界相对来说比较陌生,我能强迫EJB容器先启动吗?或者它真的和开始的顺序有关吗?如何将两者结合起来


提前感谢。

您不应该试图强制EJB容器启动。相反,请尝试以下操作之一:

@EJB
ASoapService aSoapService
...
Endpoint.publish("/MySoapService", aSoapService);
尝试@inject而不是@EJB ASoapService ASoapService来注入EJB ASoapService ASoapService-@Inject应该等待依赖项,因此要等到EJB可用 从EJB容器准备就绪后初始化的对象运行Endpoint.publish方法,可以从启动单例EJB,也可以在初始化CDI应用程序作用域时运行:
[2018-02-02T14:43:57.821+0000] [] [INFO] [AS-EJB-00054] [javax.enterprise.ejb.container] [tid: _ThreadID=1 _ThreadName=main] [timeMillis: 1517582637821] [levelValue: 800] Portable JNDI names for EJB ASoapService: [java:global/<my project name>/ASoapService, java:global/<my project name>/ASoapService!com.example.ASoapService]