31.3. 在 Plain Java Application 中发布服务
概述
当您要将应用程序部署为普通 java 应用时,您需要实施在应用的 main () 方法中发布端点的逻辑。Apache CXF 提供两个编写应用程序的 main () 方法的选项。
-
使用
wsdl2java工具生成的main ()方法 -
编写发布端点的自定义
main ()方法
生成服务器主线
代码生成器 -server 标志使工具生成一个简单的服务器主线。生成的服务器主线(如 例 31.2 “生成的服务器主线” 所示),为指定 WSDL 合同中的每个 端口 元素发布一个服务提供商。
如需更多信息,请参阅 第 44.2 节 “cxf-codegen-plugin”。
例 31.2 “生成的服务器主线” 显示生成的服务器主线。
例 31.2. 生成的服务器主线
package org.apache.hello_world_soap_http;
import javax.xml.ws.Endpoint;
public class GreeterServer {
protected GreeterServer() throws Exception {
System.out.println("Starting Server");
Object implementor = new GreeterImpl();
String address = "http://localhost:9000/SoapContext/SoapPort";
Endpoint.publish(address, implementor);
}
public static void main(String args[]) throws Exception {
new GreeterServer();
System.out.println("Server ready...");
Thread.sleep(5 * 60 * 1000);
System.out.println("Server exiting");
System.exit(0);
}
}例 31.2 “生成的服务器主线” 中的代码执行以下操作:
实例化服务实施对象的副本。
根据端点合同中 wsdl:port 元素的 address 子级的内容为端点创建 地址。
发布端点。
编写服务器主线
如果您使用 Java 第一开发模型,或者您不想使用生成的服务器主线,您可以自行编写。要编写服务器主行,您必须执行以下操作:
-
“实例化服务提供商”一节 服务提供商的
javax.xml.ws.Endpoint对象。 - 创建在发布服务提供商时使用的可选服务器上下文。
-
“发布服务提供商”一节 服务供应商使用其中一个
publish ()方法。 - 当应用准备好退出时,停止服务提供商。
例 31.3 “自定义服务器主线” 显示发布服务提供商的代码。
例 31.3. 自定义服务器主线
package org.apache.hello_world_soap_http;
import javax.xml.ws.Endpoint;
public class GreeterServer
{
protected GreeterServer() throws Exception
{
}
public static void main(String args[]) throws Exception
{
GreeterImpl impl = new GreeterImpl();
Endpoint endpt.create(impl);
endpt.publish("http://localhost:9000/SoapContext/SoapPort");
boolean done = false;
while(!done)
{
...
}
endpt.stop();
System.exit(0);
}
}例 31.3 “自定义服务器主线” 中的代码执行以下操作:
实例化服务实施对象的副本。
为服务实施创建未发布 的端点。
在 http://localhost:9000/SoapContext/SoapPort 发布服务提供商。
循环,直到服务器关闭为止。
停止发布的端点。