27.3. 实施服务提供商


生成实施代码

您可以使用代码生成器的 -impl 标志生成用于构建服务提供商的实施类。

注意

如果您的服务合同中包含 XML Schema 中定义的任何自定义类型,您必须确保生成和可用的类。

有关使用代码生成器的更多信息,请参阅 第 44.2 节 “cxf-codegen-plugin”

生成的代码

实现代码由两个文件组成:

  • portTypeName.java - 服务的服务接口(SEI)。
  • portTypeNameImpl.java - 用于实施服务所定义的操作的类。

实施操作的逻辑

为服务操作提供业务逻辑,请完成 portTypeNameImpl.java 中的存根方法。您通常使用标准的 Java 来实施业务逻辑。如果您的服务使用自定义 XML Schema 类型,则必须为每种类型使用生成的类来操作它们。还有一些 Apache CXF 特定的 API,可用于访问一些高级功能。

示例

例如,在 例 26.1 “helloworld WSDL 合同” 中定义的服务的实现类可能类似于 例 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);
    }
}
Red Hat logoGithubRedditYoutubeTwitter

学习

尝试、购买和销售

社区

关于红帽文档

通过我们的产品和服务,以及可以信赖的内容,帮助红帽用户创新并实现他们的目标。

让开源更具包容性

红帽致力于替换我们的代码、文档和 Web 属性中存在问题的语言。欲了解更多详情,请参阅红帽博客.

關於紅帽

我们提供强化的解决方案,使企业能够更轻松地跨平台和环境(从核心数据中心到网络边缘)工作。

© 2024 Red Hat, Inc.