背景 :
我以前有使用 Apache CXF Web 服务的经验,但我对使用 Apache CXF 发行版附带的 wsdl2java 工具生成服务端点接口 (SEI) 和服务实现有点陌生。
任务 :
我目前正在实现将由外部系统使用的基于 SOAP 的 Web 服务。我已经定义了消息 (XSD) 和 WSDL 文件。我尝试使用 Apache CXF 的 wsdl2java 工具生成 SEI。SEI 使用 JAXB 类型作为输入参数正确生成,并将类型返回给 Web 服务方法。
当我查看为服务实现类生成的代码时,我发现它扩展了 javax.xml.ws.Service 类。此外,还会生成许多与服务端点接口中的方法同名的重载方法,并在方法名称后附加“Soap12Http”。其中一些方法采用 WebServiceFeature... 类型的参数,而其他方法则不采用任何参数。例子 :
public class Query extends Service {
@WebEndpoint(name = "product_query-soap12-http")
public IQuery getProductsSoap12Http(WebServiceFeature... features) {
return super.getPort(getProductsSoap12Http, IQuery.class,features);
}
}
*其中 IQuery 是服务端点接口
问题 :
- 我期待服务实现类实现服务端点接口,而不是扩展 javax.xml.ws.Service。这是一个有效的期望吗?
- 我期待服务实现类从服务端点接口实现方法。这是一个有效的期望吗?
- 我还想知道是否可以要求 wsdl2java 命令为 JAXB POJOS 生成 jar,而不是将它们生成为类文件。