【问题标题】:JAX-WS multiple endpoints in sun-jaxws.xmlsun-jaxws.xml 中的 JAX-WS 多个端点
【发布时间】:2011-05-30 05:06:27
【问题描述】:

刚开始使用 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> 


我部署到 Tomcat 7 并使用http://localhost:8080/MyApp/AddTwoInts?wsdl 获取 AddTwoInts 的 WSDL

任何建议表示赞赏。

【问题讨论】:

    标签: java web-services jax-ws


    【解决方案1】:

    戴夫,

    我猜你缺少两个端点的 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>
    

    【讨论】:

    • 解决了,谢谢......出于兴趣,为什么我不能将两个端点都指向同一个 servlet?我认为 JAXWS servlet 使用 sun-jaxws 中的端点映射来确定要调用哪个端点类。因此,如果我将所有 URL 指向一个 servlet,它应该能够弄清楚要做什么......
    • 我想可以将您的多个端点映射到一个 servlet,但是您的“sun-jaxws”应该单独定义所有端点。试试这个:**web.xml:** &lt;servlet&gt; &lt;servlet-name&gt;SomeName&lt;/servlet-name&gt; &lt;servlet-class&gt;com.sun.xml.ws.transport.http.servlet.WSServlet&lt;/servlet-class&gt; &lt;/servlet&gt; &lt;servlet-mapping&gt; &lt;servlet-name&gt;SomeName&lt;/servlet-name&gt; &lt;url-pattern&gt;/*&lt;/url-pattern&gt; &lt;/servlet-mapping&gt; sun-jaxws.xml: 没有变化。`
    • 一个servlet-mapping 可以有一个servlet-name 和多个url-pattern 条目,如果通配符不正确地匹配同一个容器中的非Web 服务资源,这就是您想要做的(静态资源、JSF 或 JSP 等)。无需指定servlet 两次。
    【解决方案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>
    

    然后,在 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 文件中的相关路径以获得所需的完整路径。我已经获得了一个服务来处理除 / 之外的 web.xml 条目,但是您需要为每个服务创建一个 web.xml 条目。您需要使用 / 然后将完整路径放在 sun-jaxws.xml 中。

    【讨论】:

      猜你喜欢
      • 2013-05-08
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 2011-04-28
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多