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);
    }
}