2017-02-07 93 views
0

所以,我用WSDL創建了一個Apache CXF的客戶端存根應用程序。這個過程相對簡單。我在SoapUI界面中完成了它。我提供了WSDL位置,告訴CXF生成客戶端存根並打好。然後,我將項目導入到Eclipse中,添加了Apache CXF庫,配置了一些安全選項,證書和其他東西。
我寫了一個主要的幾個測試調用我的web服務,並... 它的工作。Apache CXF如何生成類?

現在我的問題是,我不知道它爲什麼工作。更具體地說,當我在Eclipse中運行時,調試輸出清楚地表明有CXF類被調用。

INFO: Loaded configuration file cxf.xml.

org.apache.cxf.service.factory.ReflectionServiceFactoryBean buildServiceFromWSDL

在我main()我調用

MyServices ss = new MyServices(wsdlURL, SERVICE_NAME); 
port = ss.getWSHttpBindingMyService(); 

MyServices類擴展javax.xml.ws.Service而且也沒有什麼提示,以CXF。

wsdl2java還生成了一個MyService接口和一個MyServiceImpl類,該類位於相同的包中。它看起來是一個很好的候選人。在我的main()我可以寫像port.someMethod(someRequest)的東西。如果我按住Ctrl鍵並點擊someMethod並按照實施方式進行操作,它實際上會將我帶到MyServiceImpl類,但那裏只有虛擬代碼!

public Boolean someMethod(SomeRequest request) { 
      LOG.info("Executing operation"); 
      System.out.println(request); 
      try { 
       Boolean _return = null; 
       return _return; 
      } catch (java.lang.Exception ex) { 
       ex.printStackTrace(); 
       throw new RuntimeException(ex); 
      } 
     } 

所以必須有一些配置,告訴運行時使用哪個實現。但我無法弄清楚它在哪裏或哪一個。

感謝

回答

0

無論您使用的CXF或WSDL2Java的生成客戶端代碼。 客戶端代碼將按照J2EE規範生成。

生成的代碼只是服務的聲明,服務的實現將在服務器上。

客戶端代碼利用webservice wsdl位置來查找服務以及它所暴露的操作。

檢入您的MyServices,您會看到您的服務網址。 防爆

wsdlLocation = `"http://127.0.0.1/bookstore/services/search?wsdl"` 

感謝

+0

嗨,什麼我問的是,它是如何掛鉤生成的Java代碼與客戶端的CXF實現。 – TXV

+0

您是否在代碼中創建任何客戶端實例?即org.apache.cxf.endpoint.Client client = org.apache.cxf.frontend.ClientProxy .getClient(port); –

+0

是的,我是'客戶端客戶端= ClientProxy.getClient(服務);' – TXV