27.3. 实施服务提供商
生成实施代码
您生成了一个使用代码生成器的 -impl
标志来构建服务提供商的实施类。
注意
如果您的服务合同包含 XML 架构中定义的任何自定义类型,您必须确保生成并可用的类型类。
有关使用代码生成器的详情请参考 第 44.2 节 “cxf-codegen-plugin”。
生成的代码
-
portTypeName.java
- 服务接口(SEI)。 -
portTypeNameImpl.java
- 您要使用的类来实施服务所定义的操作。
实施操作的逻辑
为了为您的服务操作提供业务逻辑,可在 portTypeNameImpl.java
中完成 stub 方法。您通常使用标准 Java 来实现业务逻辑。如果您的服务使用自定义 XML 架构类型,必须使用各种类型生成的类来操作它们。还有一些 Apache CXF 特定的 API 可用于访问某些高级功能。
示例
例如: 例 26.1 “HelloWorld WSDL Contract” 中定义的服务的实现类可能类似于 例 27.2 “Greeter Service 的实现”。只有以粗体突出显示的代码部分必须由 mer 插入。
例 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); } }