31.3. 在 Plain Java 应用程序中发布服务
概述
如果您想将应用部署为普通 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
元素的内容,为端点创建 地址
。
发布端点。
编写服务器主线
如果您使用了 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 发布服务供应商。
循环,直到服务器关机为止。
停止已发布的端点。