2013-03-11 128 views
0

背景:生成CXF使用WSDL2Java的Web服务的服务器实现

我以前的经验对消费的Apache CXF Web服务的工作,但我是一个有点新的生成服务端点接口(SEI)和使用Apache CXF分发版附带的wsdl2java工具的服务实现。

任务:

我目前的工作将由外部系统消耗的SOAP基于Web的服务的实现。我已经定义了消息(XSD)和WSDL文件。我曾尝试使用Apache CXF的wsdl2java工具生成SEI。使用JAXB类型作为输入参数并将返回类型返回到Web服务方法时,SEI会正确生成。

当我看看为服务实现类生成的代码时,我发现它扩展了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是服务端点接口

问题:

  1. 我期待的服务实现类来实现服务端点接口,而不是扩展的javax。 xml.ws.Service。这是一个有效的期望吗?
  2. 我在等待服务实现类实现服务端点接口中的方法。这是一个有效的期望吗?
  3. 我也想知道是否可以要求wsdl2java命令为JAXB POJOS生成一个jar,而不是生成它们作为类文件。

回答

0

对于1和2,答案是否定的。生成的XXXXService类几乎是WSDL中各种SEI代理的工厂。 wsdl中的每个端点/绑定/端口类型组合应导致对服务对象进行一系列“getXYZPort(...)”调用,以返回该特定SEI的实例。

对于3,上周cxf的工具添加了一个-clientjar选项(尚未发布,需要最新的快照),可能接近需要。

+0

这是否意味着我需要手动编写自己的名为Query的类来实现IQuery并定义Web服务方法,或者是否应该将生成的服务实现类直接用作我的Web服务实现? – CKing 2013-03-11 13:20:06