2010-01-18 67 views
11

我正在創建一個簡單的SOAP Web服務。 我要確保它在一個tomcat web服務上運行。Java:使用端點將webservice發佈到tomcat服務器

我嘗試用JAX-WS(見代碼)來實現這個

我的問題是:在Endpoint.publish使用Tomcat服務器來承載這還是一個小型的GlassFish樣的服務器呢?

我應該擴展UnicastRemoveObject或類似的東西嗎?

理想情況下,它可以被打包到一個.WAR文件中,並放在該目錄中,然後工作。

它似乎不能像我的已安裝的tomcat服務器那樣工作,因爲它表示端口已被使用。我使用Ubuntu的業力與安裝的tomcat6軟件包,它也可能是我的用戶可是沒有權限發佈到運行Tomcat 8080

我希望這個問題是非常明顯的

示例代碼:

@WebService 
public class UserAttributes { 
    public static void main(String[] args) { 
     UserAttributes instance = new UserAttributes(); 
     Endpoint.publish("http://localhost:8082/WebServices/userattributes", 
      instance); 
    } 

    public string Hello() { 
     return "Hello World"; 
    } 
} 
+0

JDK中的* default * JAX-WS實現使用最小的基於NIO的Web服務器。 – 2010-01-18 01:58:56

+0

謝謝!有沒有辦法將它定位到已經運行的tomcat服務器? – Will 2010-01-18 01:59:48

回答

19

請問Endpoint.publish使用tomcat服務器託管這個或者它是一個迷你glassfish類服務器嗎?

JAX-WS RI Endpoint.publish API使用默認包含在Sun的Java SE 6,重量輕HTTP server implementation所以,不,它使用嵌入式GlassFish的,也不是一個嵌入式的Tomcat,甚至更少現有Tomcat安裝:它使用一個嵌入式容器,即在同一個JVM內運行的東西。只是FYI,但只要它們提供服務提供商實現(SPI),就可以插入其他實現。例如,Jetty 6的確如此,請參閱J2se6HttpServerSPI。但我不打算在這裏介紹的所有細節:)

這似乎不符合我安裝Tomcat服務器工作,因爲是因爲它說的端口已在使用。

如上所述,Enpoint.publish API不使用您現有的Tomcat安裝。它使用自己的服務器,並允許您部署您的Web服務,而無需打包和部署您的應用程序。它在開發過程中特別有用(因爲它加快了速度)。事實上,它非常方便。

現在,如果您有一個運行在端口8082上的Tomcat服務器,並且您嘗試使用相同的端口發佈您的Endpoint,那麼事情就不會像您注意到的那樣工作。在開發過程中使用不同的(和未使用的)端口。

如果您想將您的Web服務部署到現有的Tomcat安裝中,那麼您必須將它們打包在一場戰爭中,並在Tomcat上部署這場戰爭。但是這完全不同,並且與使用Endpoint.publish API沒有任何關係。

+0

很好的解釋。 – atiqkhaled 2017-02-08 11:32:28

1

非常有趣。在我看來,嵌入式服務器還包含一個肥皂引擎來處理髮送到該端口的soap消息。這是一個嵌入式肥皂引擎還是使用其中一種流行的soap引擎(axis2,cxf,metro)

相關問題