如何获得简单的 javax.ws REST 服务 url

How to get simple javax.ws REST service url

下面是一个使用 javax.ws 的简单服务的玩具示例。我想获得服务 URL,可从 Web 浏览器或 curl 调用。 这是玩具服务代码:

package packagename;

import javax.jws.WebMethod;
import javax.jws.WebService;
import javax.ws.rs.GET;
import javax.ws.rs.Path;

@WebService
@Path("/service")
public class testserver
{
    @GET
     @Path("/test")
     @WebMethod
     public   String test()
    {
        return "<html>Test text here</html>";
    }
}

这是服务部署函数:

package packagename;
import javax.xml.ws.Endpoint;

    public class deploy
{
    public static void main(String [] args)
    {

        String endpointURL = "http://localhost:7777/";
        Endpoint.publish(endpointURL,new testserver());
    }
}

我 运行 java 文件通过 bash 没有错误。

导航到 http://localhost:7777/service/test 不应该生成 test() 函数的文本吗?我的浏览器收到“未找到服务器”错误。

下面是 http://localhost:7777/?wsdl 处的 wsdl 文件。我要找的信息在这儿吗?我通过从下面(testserverService 等)获取信息尝试了一些 url,但没有成功。

  <!-- Published by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. 
-->
<!-- Generated by JAX-WS RI (http://jax-ws.java.net). RI's version is JAX-WS RI 2.2.9-b130926.1035 svn-revision#5f6196f2b90e9460065a4c2f4e30e065b245e51e. 
-->
<definitions targetNamespace="http://packagename/" name="testserverService">
    <types>
        <xsd:schema>
            <xsd:import namespace="http://packagename/" schemaLocation="http://localhost:7777/?xsd=1"/>
        </xsd:schema>
    </types>
    <message name="test">
        <part name="parameters" element="tns:test"/>
    </message>
    <message name="testResponse">
        <part name="parameters" element="tns:testResponse"/>
    </message>
    <portType name="testserver">
        <operation name="test">
            <input wsam:Action="http://packagename/testserver/testRequest" message="tns:test"/>
            <output wsam:Action="http://packagename/testserver/testResponse" message="tns:testResponse"/>
        </operation>
    </portType>
    <binding name="testserverPortBinding" type="tns:testserver">
        <soap:binding transport="http://schemas.xmlsoap.org/soap/http" style="document"/>
        <operation name="test">
            <soap:operation soapAction=""/>
            <input>
                <soap:body use="literal"/>
            </input>
            <output>
                <soap:body use="literal"/>
            </output>
        </operation>
    </binding>
    <service name="testserverService">
        <port name="testserverPort" binding="tns:testserverPortBinding">
            <soap:address location="http://localhost:7777/"/>
        </port>
    </service>
</definitions>

我猜答案很简单,或者我在代码中犯了严重的语法错误。 你能帮忙吗?

您混合了 SOAP 和 REST API,这是不正确的。您不能将它们一起用于同一端点。

javax.jws.* 包(称为 JAX-WS)表示 SOAP API

javax.ws.rs.* 包(称为 JAX-RS)表示 REST API

您需要了解 SOAP 和 REST Web 服务之间的区别。您可以查看 here 了解有关这些概念的更多详细信息。

假设您正在寻找 REST 服务实现,一般来说,REST 服务部署到服务器(如 Tomcat、Jetty、Weblogic),但如果您需要 运行 它们独立查看here