Как получить простой URL-адрес сервиса REST javax.ws

Ниже приведен игрушечный пример простого сервиса, использующего javax.ws, Я хочу получить сервисный URL, вызываемый из веб-браузера или 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() функционировать? Я получаю сообщение об ошибке "Сервер не найден" в моем браузере.

Ниже файл wsdl в http://localhost:7777/?wsdl, Информация, которую я ищу где-то здесь? Я пробовал некоторые URL-адреса, получая информацию снизу (testserverService и т. Д.) Без успеха.

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

Я предполагаю, что ответ очень прост, или я делаю грубые синтаксические ошибки в моем коде. Вы можете помочь?

1 ответ

Решение

Вы смешиваете API SOAP и REST, что НЕ правильно. Вы не можете использовать их вместе для одной и той же конечной точки.

javax.jws.* пакет (называемый JAX-WS) представляет API-интерфейс SOAP

javax.ws.rs.* пакет (называемый JAX-RS) представляет REST API

Вы должны понимать разницу между веб-сервисами SOAP и REST. Вы можете посмотреть здесь для более подробной информации об этих концепциях.

Предполагая, что вы ищете реализацию REST-сервисов, в общем, REST-сервисы развертываются на серверах (таких как Tomcat, Jetty, Weblogic), но если вам нужно запустить их автономно, посмотрите здесь

Другие вопросы по тегам