2011-05-30 28 views
4

剛開始使用JAX-WS。我在一個WAR文件,如下所示創建2個測試Web服務....sun-jaxws.xml中的JAX-WS多個端點

package com.djs; 

import javax.jws.WebService; 

@WebService() 
public class AddTwoInts { 

    public int performAdd(int firstNum, int secondNum) { 
     return firstNum + secondNum; 
    } 
} 

而且.....

package com.djs; 

import javax.jws.WebService; 

@WebService() 
public class SayHello { 

    public String sayHello(String inwards) { 
     return "Hello " + inwards; 
    } 
} 

這是我的web.xml

<?xml version="1.0" encoding="UTF-8"?> 
<web-app xmlns="http://java.sun.com/xml/ns/j2ee" 
     xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee 
          http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" version="2.4"> 

    <listener> 
     <listener-class> 
      com.sun.xml.ws.transport.http.servlet.WSServletContextListener 
     </listener-class> 
    </listener> 

    <servlet> 
     <servlet-name>jaxws</servlet-name> 
     <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
    </servlet> 

    <servlet-mapping> 
     <servlet-name>jaxws</servlet-name> 
     <url-pattern>/</url-pattern> 
    </servlet-mapping> 

</web-app> 

這是太陽-jaxws.xml

<?xml version="1.0" encoding="UTF-8"?> 
<endpoints xmlns='http://java.sun.com/xml/ns/jax-ws/ri/runtime' version='2.0'> 
    <endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' /> 
    <endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/SayHello' /> 
</endpoints> 


我部署到Tomcat 7並使用http://localhost:8080/MyApp/AddTwoInts?wsdl以獲取AddTwoInts OK了WSDL ....但是,當我執行http://localhost:8080/MyApp/SayHello?wsdl我得到一個404頁未找到錯誤....

任何意見讚賞。

回答

11

戴夫,

我猜你是對你的思念有兩個端點的servlet的映射。

將以下內容添加到您的web.xml中,然後重試。讓我知道這是否解決了這個問題。

<servlet> 
    <servlet-name>AddTwoInts</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>AddTwoInts</servlet-name> 
    <url-pattern>/AddTwoInts</url-pattern> 
</servlet-mapping> 

<servlet> 
    <servlet-name>SayHello</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet</servlet-class> 
</servlet> 
<servlet-mapping> 
    <servlet-name>SayHello</servlet-name> 
    <url-pattern>/SayHello</url-pattern> 
</servlet-mapping> 
+1

修復它,Thankyou .......出於興趣,爲什麼我不能指向兩個端點在同一個servlet?我認爲JAXWS servlet使用sun-jaxws中的端點映射來確定要調用哪個端點類。因此,如果我將所有URL指向一個servlet,它應該能夠找出該做什麼...... – Dave 2011-06-02 11:03:01

+1

我想可以將多個端點映射到一個servlet,但是您的「sun-jaxws」應該包含所有enpoints單獨定義。 嘗試此: '** web.xml中:** SomeName com.sun.xml.ws.transport.http.servlet。 WSServlet SomeName /* ' ** sun-jaxws.xml:** 沒有變化.' – Vivek 2011-06-03 14:13:42

2

你想web.xml中引用只有一個servlet的,在urlMapping中/:

<servlet> 
    <servlet-name>services</servlet-name> 
    <servlet-class>com.sun.xml.ws.transport.http.servlet.WSServlet 
     </servlet-class> 
    <load-on-startup>1</load-on-startup> 
    </servlet> 
    <servlet-mapping> 
    <servlet-name>services</servlet-name> 
    <url-pattern>/</url-pattern> 
    </servlet-mapping> 

然後,包括在全所需的路徑在陽光jaxws.xml多個端點:

<endpoint name='performAdd' implementation='com.djs.AddTwoInts' url-pattern='/AddTwoInts' /> 
<endpoint name='sayHello' implementation='com.djs.SayHello' url-pattern='/couldhavemore/SayHello' /> 

請注意那裏的「canhavemore」...您可以添加到sun-jaxws.xml文件中的相關路徑以獲取完整的所需路徑。我已經獲得了一個單獨的服務來處理除/以外的web.xml條目,但是然後您需要爲每個服務提供一個web.xml條目。它似乎得到多個工作,你需要使用/然後把完整的路徑在sun-jaxws.xml。