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