簡體   English   中英

sun-jaxws.xml 中的 JAX-WS 多個端點

[英]JAX-WS multiple endpoints in sun-jaxws.xml

剛開始使用 JAX-WS。 我在一個 WAR 文件中創建了 2 個測試 web 服務,如下所示....

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>

這是 sun-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> 


I deploy into Tomcat 7 and use http://localhost:8080/MyApp/AddTwoInts?wsdl to get the WSDL for AddTwoInts OK.... But when I execute http://localhost:8080/MyApp/SayHello?wsdl I get找不到 404 頁面錯誤....

任何建議表示贊賞。

戴夫,

我猜你錯過了你擁有的兩個端點的 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>

您希望 web.xml 在 urlMapping / 處僅引用一個 servlet:

  <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>

然后,在 sun-jaxws.xml 中的完整所需路徑中包含多個端點:

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

請注意那里的“couldhavemore”...您可以添加到 sun-jaxws.xml 文件中的相關路徑以獲得所需的完整路徑。 I've gotten a single service to work with a web.xml entry of something other than /, but then you need a web.xml entry for every service. 您需要使用 / 然后將完整路徑放入 sun-jaxws.xml 中似乎需要多個工作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM