Apache CXF + Spring:生成一个简单的客户端

我已经开始用Spring学习Apache CXF了。 首先,我试图创建一个简单的客户端/服务器模型。

服务器端是: service.HelloWorld.java

@WebService public interface HelloWorld { String sayHi(String text); } 

service.HelloWorldImpl.java

 @WebService(endpointInterface = "service.HelloWorld") public class HelloWorldImpl implements HelloWorld { public String sayHi(String text) { return "Hello, " + text; } } 

客户端是: client.Client.java public class Client {

  public static void main(String[] args) { ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext(new String[] {"cxf-client-servlet.xml"}); HelloWorld client = (HelloWorld) context.getBean("client"); System.out.println(client.sayHi("Batman")); } } 

CXF的客户端- servlet.xml中

       

问题是:为了使客户端工作,我必须将service.HelloWorld(包+接口)添加到客户端的项目中。 我听说过在使用服务之前我需要生成一个存根。 所以这对我来说很困惑。 那么,什么是正确的方法,什么是最佳实践(可能最好使用一些契约优先方法或类似方法)? 后来,我想添加WS-Security,所以我需要一个强大的背景=)

提前致谢。

如果您正在进行代码优先的WS开发,那么分发接口并将其提供给客户端是可以的。 我认为接口(仅实现)上不需要@WebService (?),因此客户端没有依赖于此注释。

即使您正在执行代码优先的Web服务,您仍然可以下载Apache CXF为您生成的WSDL文档,并将其提供给客户端。 使用这种方法(被认为更成熟,更不用说它可以在.NET等不同平台上使用),客户端必须生成存根(使用像wsdl2java这样的工具)。 此过程实际上将自动创建非常相似的客户端界面。

这就是为什么这么多人更喜欢契约优先开发的原因之一 – 相同的WSDL用于生成客户端存根和服务器端WS实现。 这限制了(偶然)不相容的范围。

您可以为客户端使用这样的简单弹簧配置 –

           

如果您不需要,请忽略拦截器。

这篇文章中的更多细节。