2012-01-19 60 views
0

我剛開始學習CXF。我通過eclipse製作了一個maven原型項目。當我運行Maven構建並部署在JBoss中時,它的工作正常。在eclipse上使用CXF

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

@WebService(endpointInterface = "foo.HelloWorld") 

    public class HelloWorldImpl implements HelloWorld { 

     public String sayHi(String text) { 

      return new "Hello"+text; 
     } 
    } 

然後我創建了一個Employee類,名稱和薪水作爲其字段與getter和setters。我只是將HelloWorld sayHi方法的返回類型更改爲Employee,並且我從HelloWorldimpl sayHi方法返回了一個Employee對象。

然後還它工作正常(我的意思是我檢查使用SOAP UI,修改代碼後,我得到一個Employee XML)

哪裏是這樣寫的轉換代碼。

我也沒發現代碼中cxf.xml和CXF-servlet.xml中:(在哪裏這些XML保存在代碼)

<import resource="classpath:META-INF/cxf/cxf.xml" /> 
    <import resource="classpath:META-INF/cxf/cxf-servlet.xml" /> 

請幫我理解這一點。

@ŁukaszBachman我得到了CXF * .jar文件中的XML文件。

我應該怎麼做才能在此項目中進行擴展。我是否需要在xml文件中添加bean?

+0

除非你在開發團隊,貢獻者或者你完全知道你在做什麼,否則你不應該修改CXF庫的任何部分;)但是,由於Spring和IoC,你可以擴展一些bean。例如:如果您有由CXF創建並在XImpl1中實現的接口X,則如果該庫的創建者打算擴展它,則可以始終定義自己的實現XImpl2並將其與CXF連接起來。通常,不要擴展那些不打算擴展的API部分。設計良好的API應該給你足夠的靈活性來使用它,只要你願意。 –

回答

0

您顯然使用CXF和Spring來導入在CLASSPATH上定義的資源。這意味着,Spring將嘗試導入在提供的兩個文件(cxf.xml和cxf-servlet.xml)中定義的任何種類的bean。

當servlet容器啓動它時,Classloader將加載爲您的Web應用程序(/ WEB-INF/lib目錄)定義的所有庫。然後它將啓動Spring框架(在/WEB-INF/web.xml中定義)。當加載spring時,它會嘗試創建爲web應用程序定義的所有Beans,因此它將分析您自己的應用程序上下文,以找出它,還需要將位於META-INF/cxf/cxf.xml中的某些資源導入到類路徑中。因此,它將再次在位於/WEB-INF/lib的所有圖書館中查找它。

這就是爲什麼你沒有看到你的項目中的這兩個文件。它們由CXF庫(cxf.jar)提供。您可能想自己查看,只需打開cxf.jar作爲常規ZIP文件並瀏覽至/META-INF即可。

最後一句話,這兩個文件是由CXF框架提供的,所以你可能不需要修改它。你可能只是看看它,如果它能幫助你理解CXF內部。