27.3. 实施服务提供商
生成实施代码
您可以使用代码生成器的 -impl
标志生成用于构建服务提供商的实施类。
注意
如果您的服务合同包含 XML Schema 中定义的任何自定义类型,您必须确保该类型的类已生成并可用。
有关使用代码生成器的更多信息,请参阅 第 44.2 节 “cxf-codegen-plugin”。
生成的代码
-
portTypeName.java
- 服务的服务接口(SEI)。 -
portTypeNameImpl.java
- 用于实现服务定义的操作的类。
实施操作的逻辑
要为您的服务操作提供业务逻辑,请在 portTypeNameImpl.java
中完成 stub 方法。您通常使用标准 Java 来实施业务逻辑。如果您的服务使用自定义 XML Schema 类型,则必须对每种类型使用生成的类来操作它们。还有一些 Apache CXF 特定的 API,可用于访问一些高级功能。
示例
例如: 例 26.1 “helloworld WSDL Contract” 中定义的服务的实现类可能类似于 例 27.2 “Greeter Service 的实现”。只有以粗体突出显示的代码部分才能被编程者插入。
例 27.2. Greeter Service 的实现
package demo.hw.server; import org.apache.hello_world_soap_http.Greeter; @javax.jws.WebService(portName = "SoapPort", serviceName = "SOAPService", targetNamespace = "http://apache.org/hello_world_soap_http", endpointInterface = "org.apache.hello_world_soap_http.Greeter") public class GreeterImpl implements Greeter { public String greetMe(String me) { System.out.println("Executing operation greetMe"); System.out.println("Message received: " + me + "\n"); return "Hello " + me; } public void greetMeOneWay(String me) { System.out.println("Executing operation greetMeOneWay\n"); System.out.println("Hello there " + me); } public String sayHi() { System.out.println("Executing operation sayHi\n"); return "Bonjour"; } public void pingMe() throws PingMeFault { FaultDetail faultDetail = new FaultDetail(); faultDetail.setMajor((short)2); faultDetail.setMinor((short)1); System.out.println("Executing operation pingMe, throwing PingMeFault exception\n"); throw new PingMeFault("PingMeFault raised by server", faultDetail); } }