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 发布服务提供商。
循环,直到服务器关闭为止。
停止发布的端点。